新增: 功能路线图 + 9份需求契约
- feature-roadmap.md: 现有能力盘点 + P1/P2/P3方向 + 竞品参考 - AI深度视差: 远程推理方案(服务端Depth-Anything + 客户端WebGL) - 自动升级模块文档: 设计规格/任务规划/决策记录 - 9份需求契约: 视频/颜色提取/时间段/番茄钟/播放列表/电池/网页/便签/监控
This commit is contained in:
106
README.md
106
README.md
@@ -1,17 +1,18 @@
|
||||
# u-desktop
|
||||
|
||||
Windows 桌面壁纸增强工具 — 将 WebView2 嵌入桌面壁纸层,在壁纸上叠加时间、天气、星座运势、AI 资讯等信息卡片。
|
||||
Windows 桌面壁纸增强工具 — 将 WebView2 嵌入桌面壁纸层,在壁纸上叠加时间、天气、星座运势、AI 资讯、电子相册等信息卡片。
|
||||
|
||||
## 功能
|
||||
|
||||
| 模块 | 说明 |
|
||||
|------|------|
|
||||
| 壁纸 | 6 种主题动画(极光/星空/渐变/粒子/极光流体/文字)、本地图片、Bing 每日壁纸、纯色/渐变 |
|
||||
| 壁纸 | 6 种主题动画(极光/星空/渐变/粒子/极光流体/文字)、本地图片、Bing 每日壁纸(导航+收藏)、纯色/渐变 |
|
||||
| 时间 | 大字时钟,支持秒显示开关,整点光晕动画,节日倒计时 |
|
||||
| 天气 | 和风天气 API,当前天气 + 24h/7d 预报,IP 自动定位 + 手动选城 |
|
||||
| 星座运势 | 天聚数行 API,5 维指数进度条 + 幸运标签 + 今日概述 |
|
||||
| AI 资讯 | 天聚数行 API,图文布局 5 条展示 |
|
||||
| 知识卡片 | AI 生成,自定义关键字 + 提示词 |
|
||||
| 电子相册 | 本地目录轮播,可调间隔,支持电子相册模式(照片铺满壁纸) |
|
||||
| 桌面设置 | 独立 WebView2 窗口,所有配置可视化操作 |
|
||||
|
||||
## 项目结构
|
||||
@@ -19,28 +20,33 @@ Windows 桌面壁纸增强工具 — 将 WebView2 嵌入桌面壁纸层,在壁
|
||||
```
|
||||
u-desktop/
|
||||
├── main.go # 入口: 单实例互斥锁 + 配置目录 + 托盘启动
|
||||
├── win32.go # Win32 API 声明 (user32/kernel32/ole32)
|
||||
├── systray.go # 系统托盘 + WebView2 壁纸嵌入 + 消息循环
|
||||
├── win32.go # Win32 API 声明 (user32/comdlg32/shell32)
|
||||
├── systray.go # 系统托盘 + WebView2 壁纸嵌入 + 消息循环 + WorkerW 监控
|
||||
├── wallpaper.go # 壁纸 HTML 构建 + 主题注入 + 重载
|
||||
├── config.go # 配置结构体 + JSON 持久化
|
||||
├── settings.go # 设置窗口 (独立 WebView2)
|
||||
├── weather.go # 天气 API + IP 定位 + 城市列表
|
||||
├── horoscope.go # 星座运势 API + 文件缓存
|
||||
├── ainews.go # AI 资讯 API + 文件缓存
|
||||
├── knowledge.go # 知识卡片 AI 生成
|
||||
├── knowledge.go # 知识卡片 AI 生成 + SQLite 缓存
|
||||
├── bing.go # Bing 壁纸下载 + 历史导航 + 收藏
|
||||
├── dialog.go # Win32 对话框 (文件选择/颜色选择)
|
||||
├── photo.go # 电子相册: 目录扫描 + 定时轮播 + 预缓存
|
||||
├── dialog.go # Win32 对话框 (文件选择/颜色选择/目录选择)
|
||||
├── web-ui/ # Vue 3 前端源码
|
||||
│ └── src/
|
||||
│ ├── overlay/ # 桌面覆盖层组件 (TimeCard/WeatherCard/ZodiacCard/...)
|
||||
│ ├── settings/ # 设置窗口组件 (ToggleSection/WallpaperSection/...)
|
||||
│ └── shared/ # 类型定义 + 工具函数
|
||||
├── web/
|
||||
│ ├── overlay.html # 桌面覆盖层 (时间/天气/星座/资讯/知识)
|
||||
│ ├── settings.html # 设置窗口 UI
|
||||
│ ├── overlay.html # 构建产物: 桌面覆盖层 (单文件内联)
|
||||
│ ├── settings.html # 构建产物: 设置窗口 UI
|
||||
│ └── themes/ # 壁纸主题 HTML
|
||||
│ ├── aurora.html
|
||||
│ ├── starfield.html
|
||||
│ ├── gradient.html
|
||||
│ ├── particles.html
|
||||
│ ├── fractal.html
|
||||
│ └── text.html
|
||||
├── config/ # 运行时配置 (settings.json + 缓存)
|
||||
│ ├── aurora.html # WebGL 极光动画
|
||||
│ ├── starfield.html # Canvas 2D 星空
|
||||
│ ├── gradient.html # CSS 渐变动画
|
||||
│ ├── particles.html # Canvas 2D 粒子
|
||||
│ ├── fractal.html # WebGL 分形流体
|
||||
│ └── text.html # CSS 文字动画
|
||||
└── docs/
|
||||
└── wallpaper-embedding.md # 壁纸嵌入技术笔记
|
||||
```
|
||||
@@ -50,29 +56,34 @@ u-desktop/
|
||||
```
|
||||
┌──────────────┐ ┌─────────────────┐
|
||||
│ systray.go │────▶│ WebView2 主窗口 │ SetParent → WorkerW (壁纸层)
|
||||
│ (托盘+消息循环) │ │ overlay.html │
|
||||
│ (托盘+消息循环) │ │ overlay.html │ WS_EX_TRANSPARENT (鼠标穿透)
|
||||
└──────┬───────┘ └─────────────────┘
|
||||
│ evalJS / SetHtml
|
||||
│ evalJS / SetHtml / PostMessage
|
||||
│
|
||||
▼
|
||||
┌──────────────┐ ┌─────────────────┐
|
||||
│ settings.go │────▶│ WebView2 设置窗口 │ 独立窗口, 760x1350
|
||||
│ settings.go │────▶│ WebView2 设置窗口 │ 独立窗口, 自适应高度
|
||||
│ │ │ settings.html │
|
||||
└──────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
**核心通信机制**:
|
||||
- `evalJS(cmd)` — 通过 channel + PostMessage 向壁纸 WebView 注入 JS
|
||||
- `htmlQueue` — 通过 SetHtml 替换整个壁纸 HTML(触发完整重载)
|
||||
- WebView2 `Bind` — 设置窗口通过 Go 绑定函数读写配置
|
||||
- `htmlQueue` — 通过 SetHtml 替换整个壁纸 HTML(主题切换时触发)
|
||||
- WebView2 `Bind` — 设置窗口通过 Go 绑定函数(30+)读写配置
|
||||
- `TrayClickCh` — 托盘图标左键点击通道,触发设置窗口打开
|
||||
|
||||
**数据刷新策略**:
|
||||
- 启动时推送文件缓存(即时显示),后台拉取新数据后替换
|
||||
- 星座: 24h / AI 资讯: 2h / 知识卡片: 30min / 天气: 10min / Bing: 4h
|
||||
|
||||
**WorkerW 监控**:
|
||||
- 每 10 秒检测 WebView2 父窗口是否变化(`GetParent`)
|
||||
- Windows 桌面重建 WorkerW 时自动重新嵌入,无感知恢复
|
||||
|
||||
## 配置
|
||||
|
||||
配置文件: `config/settings.json`(与 exe 同级目录)
|
||||
配置文件: `~/.u-desktop/settings.json`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
@@ -88,34 +99,63 @@ u-desktop/
|
||||
| hideZodiac | bool | false | 隐藏星座 |
|
||||
| hideAINews | bool | false | 隐藏 AI 资讯 |
|
||||
| hideKnowledge | bool | false | 隐藏知识卡片 |
|
||||
| bingAutoRefresh | bool | false | Bing 每小时自动切换 |
|
||||
| hidePhoto | bool | false | 隐藏相册 |
|
||||
| photoFrameMode | bool | false | 电子相册模式(照片铺满壁纸) |
|
||||
| photoDir | string | "" | 相册图片目录 |
|
||||
| photoInterval | int | 15 | 相册切换间隔(秒) |
|
||||
| bingAutoRefresh | bool | false | Bing 定时自动切换 |
|
||||
| knowledgeKeyword | string | "" | 知识卡片关键字 |
|
||||
| knowledgePrompt | string | "" | 知识卡片提示词 |
|
||||
| wallpaperText | string | "" | 文字主题自定义内容 |
|
||||
| savedColors | array | [] | 收藏的颜色方案 |
|
||||
| autoStart | bool | false | 开机自启 |
|
||||
| color1 | string | "#1a1a2e" | 纯色/渐变颜色 1 |
|
||||
| color2 | string | "" | 渐变颜色 2 |
|
||||
| colorGradient | bool | false | 启用渐变 |
|
||||
|
||||
## 构建
|
||||
|
||||
```bash
|
||||
go build -o u-desktop.exe .
|
||||
```powershell
|
||||
# 完整构建(含前端 + UPX 压缩)
|
||||
pwsh -File build.ps1
|
||||
|
||||
# 构建并打包 zip(含 WebView2 bootstrapper)
|
||||
pwsh -File build.ps1 -Pack
|
||||
```
|
||||
|
||||
需要 Windows 10+ 和 WebView2 Runtime(Win11 已内置)。
|
||||
|
||||
## 交互
|
||||
|
||||
| 操作 | 行为 |
|
||||
|------|------|
|
||||
| 左键托盘图标 | 打开桌面设置 |
|
||||
| 右键托盘图标 | 弹出菜单(桌面设置/重启/退出) |
|
||||
| 设置窗口 | 所有配置实时生效,无需重启 |
|
||||
|
||||
## 依赖
|
||||
|
||||
```
|
||||
github.com/jchv/go-webview2 # WebView2 绑定
|
||||
github.com/getlantern/systray # 系统托盘
|
||||
golang.org/x/sys/windows # Win32 API
|
||||
github.com/anthropics/anthropic-sdk-go # Claude API (知识卡片)
|
||||
```
|
||||
**Go:**
|
||||
- `github.com/jchv/go-webview2` — WebView2 绑定
|
||||
- `github.com/getlantern/systray` — 系统托盘(已修改:左键点击支持)
|
||||
- `golang.org/x/sys/windows` — Win32 API
|
||||
- `modernc.org/sqlite` — 纯 Go SQLite(知识卡片缓存)
|
||||
|
||||
## 开机自启
|
||||
|
||||
注册表 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\UDesktopWallpaper`
|
||||
**前端:**
|
||||
- Vue 3.5 + TypeScript 5.8 + Vite 6 + Tailwind CSS 3
|
||||
- `vite-plugin-singlefile` — 构建产物单文件内联
|
||||
|
||||
## 技术要点
|
||||
|
||||
- WebView2 嵌入桌面壁纸层通过 `SetParent` 到 WorkerW 实现(详见 [docs/wallpaper-embedding.md](docs/wallpaper-embedding.md))
|
||||
- `WS_EX_TRANSPARENT | WS_EX_LAYERED` 扩展样式实现鼠标键盘事件穿透,桌面图标正常操作
|
||||
- 自定义 Win32 消息循环替代 `wv.Run()`(SetParent 后 Run() 消息路由异常)
|
||||
- WorkerW 重建监控:定时 `GetParent` 检测,Windows 桌面刷新后自动重新嵌入
|
||||
- 全屏应用检测:定时检查前台窗口是否全屏,自动暂停/恢复壁纸渲染
|
||||
- 配置存储于 `~/.u-desktop/`,不依赖 exe 同级目录,构建清理不影响用户配置
|
||||
- 配置变更即时生效:设置窗口通过 evalJS 直接操作壁纸层 DOM,无需重启
|
||||
- 构建参数 `-H windowsgui` 隐藏控制台窗口,双击 exe 无黑窗口
|
||||
|
||||
## 开机自启
|
||||
|
||||
注册表 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\u-desktop`
|
||||
|
||||
Reference in New Issue
Block a user