initial commit

This commit is contained in:
guiling
2026-05-08 11:59:26 +08:00
commit 2b5e66c1e7
20 changed files with 1604 additions and 0 deletions
+97
View File
@@ -0,0 +1,97 @@
# ClashWidget
> 精美的 Windows 桌面悬浮窗,实时显示 Clash Meta 代理速度和当前节点,支持一键切换。
基于 WPF (.NET 8) 打造,毛玻璃质感、原生窗口效果、流线型速度曲线。
## ✨ 功能
- **实时速度显示** — 300ms 刷新率,下载 ▼ / 上传 ▲ 直观展示,自适应 B/KB/MB/GB 单位
- **速度曲线图** — 60 秒历史 Sparkline,蓝色下载 + 绿色上传
- **节点一键切换** — 点击当前节点弹出下拉菜单,选择即切,切完自动断开旧连接
- **延迟测速** — 启动自动测,⚡ 按钮手动刷新
- **自定义设置** — API 地址、端口、密钥、测速 URL 均可配置
- **macOS 风格窗口控件** — 左上角红绿灯(关闭 / 最小化 / 最大化)
- **毛玻璃背景** — 系统级丙烯酸模糊 + Win11 原生圆角
- **始终置顶** — 悬浮不遮挡,可拖拽移动
- **隐藏任务栏图标** — 纯桌面悬浮小部件
- **单文件部署** — 发布版为单个 EXE,即开即用
## 📦 快速开始
### 下载运行
从 [Releases](../../releases) 下载最新版本:
- `ClashWidget.exe`(完整版,155 MB)— 无需安装 .NETWindows 10 / 11 x64 双击运行
- `ClashWidget-lite.exe`(轻量版,~230 KB)— 需安装 [.NET 8 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet/8.0)
### 开发编译
```bash
# 要求:.NET 8 SDK
cd ClashWidget
dotnet run
# 发布单文件
dotnet publish -c Release -p:PublishSingleFile=true -p:SelfContained=true -o publish
```
## ⚙️ 配置
首次启动会在 EXE 同级目录生成 `config.json`
```json
{
"ApiHost": "0.0.0.0",
"ApiPort": 9090,
"ApiSecret": "123456",
"TestUrl": "https://www.gstatic.com/generate_204"
}
```
| 字段 | 说明 | 默认值 |
|------|------|--------|
| `ApiHost` | Clash API 地址 | `0.0.0.0` |
| `ApiPort` | Clash API 端口 | `9090` |
| `ApiSecret` | API 密钥 | `123456` |
| `TestUrl` | 延迟测速地址 | `https://www.gstatic.com/generate_204` |
也可通过悬浮窗右上角 ⚙ 设置按钮直接修改。
> 注意:`ApiHost` 需与 Clash 配置中 `external-controller` 的地址一致,`ApiSecret` 与 `secret` 一致。
## 🏗️ 项目结构
```
ClashWidget/
├── App.xaml(.cs) # 应用程序入口,单实例控制
├── MainWindow.xaml(.cs) # 主悬浮窗(速度、曲线、节点)
├── SettingsWindow.xaml(.cs) # 设置窗口
├── Models/
│ ├── AppConfig.cs # 配置数据模型
│ └── TrafficData.cs # API 响应模型
├── Services/
│ ├── ClashApiService.cs # Clash REST API 客户端
│ └── ConfigService.cs # 配置持久化
├── ViewModels/
│ ├── MainViewModel.cs # 主窗口 ViewModel
│ └── SettingsViewModel.cs # 设置窗口 ViewModel
├── Converters/
│ ├── SpeedConverter.cs # 速度值 → 文本
│ └── NodeMatchConverter.cs # 节点选中标记
└── Helpers/
└── NativeMethods.cs # P/Invoke(毛玻璃、置顶等)
```
## 🔧 技术栈
- **框架**WPF + .NET 8
- **UI**:毛玻璃(`SetWindowCompositionAttribute`)、Win11 Acrylic Backdrop
- **数据**Clash Meta REST API`/traffic``/proxies``/connections`
- **认证**Bearer Token + URL Query Token
- **部署**:单文件 Publish`PublishSingleFile` + `IncludeNativeLibrariesForSelfExtract`
## 📄 开源协议
MIT License