From eed461e325737caeffa104f328aadb60c9af5d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Tue, 26 May 2026 04:34:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E9=A1=B9=E7=9B=AEREADME?= =?UTF-8?q?=20+=20=E6=9B=B4=E6=96=B0=E6=8A=80=E6=9C=AF=E7=AC=94=E8=AE=B0?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 121 ++++++++++++++++++++++++++++++++++++ docs/wallpaper-embedding.md | 21 +++++-- 2 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..41e0544 --- /dev/null +++ b/README.md @@ -0,0 +1,121 @@ +# u-desktop + +Windows 桌面壁纸增强工具 — 将 WebView2 嵌入桌面壁纸层,在壁纸上叠加时间、天气、星座运势、AI 资讯等信息卡片。 + +## 功能 + +| 模块 | 说明 | +|------|------| +| 壁纸 | 6 种主题动画(极光/星空/渐变/粒子/极光流体/文字)、本地图片、Bing 每日壁纸、纯色/渐变 | +| 时间 | 大字时钟,支持秒显示开关,整点光晕动画,节日倒计时 | +| 天气 | 和风天气 API,当前天气 + 24h/7d 预报,IP 自动定位 + 手动选城 | +| 星座运势 | 天聚数行 API,5 维指数进度条 + 幸运标签 + 今日概述 | +| AI 资讯 | 天聚数行 API,图文布局 5 条展示 | +| 知识卡片 | AI 生成,自定义关键字 + 提示词 | +| 桌面设置 | 独立 WebView2 窗口,所有配置可视化操作 | + +## 项目结构 + +``` +u-desktop/ +├── main.go # 入口: 单实例互斥锁 + 配置目录 + 托盘启动 +├── win32.go # Win32 API 声明 (user32/kernel32/ole32) +├── systray.go # 系统托盘 + WebView2 壁纸嵌入 + 消息循环 +├── wallpaper.go # 壁纸 HTML 构建 + 主题注入 + 重载 +├── config.go # 配置结构体 + JSON 持久化 +├── settings.go # 设置窗口 (独立 WebView2) +├── weather.go # 天气 API + IP 定位 + 城市列表 +├── horoscope.go # 星座运势 API + 文件缓存 +├── ainews.go # AI 资讯 API + 文件缓存 +├── knowledge.go # 知识卡片 AI 生成 +├── bing.go # Bing 壁纸下载 + 历史导航 + 收藏 +├── dialog.go # Win32 对话框 (文件选择/颜色选择) +├── web/ +│ ├── overlay.html # 桌面覆盖层 (时间/天气/星座/资讯/知识) +│ ├── settings.html # 设置窗口 UI +│ └── themes/ # 壁纸主题 HTML +│ ├── aurora.html +│ ├── starfield.html +│ ├── gradient.html +│ ├── particles.html +│ ├── fractal.html +│ └── text.html +├── config/ # 运行时配置 (settings.json + 缓存) +└── docs/ + └── wallpaper-embedding.md # 壁纸嵌入技术笔记 +``` + +## 架构 + +``` +┌──────────────┐ ┌─────────────────┐ +│ systray.go │────▶│ WebView2 主窗口 │ SetParent → WorkerW (壁纸层) +│ (托盘+消息循环) │ │ overlay.html │ +└──────┬───────┘ └─────────────────┘ + │ evalJS / SetHtml + │ + ▼ +┌──────────────┐ ┌─────────────────┐ +│ settings.go │────▶│ WebView2 设置窗口 │ 独立窗口, 760x1350 +│ │ │ settings.html │ +└──────────────┘ └─────────────────┘ +``` + +**核心通信机制**: +- `evalJS(cmd)` — 通过 channel + PostMessage 向壁纸 WebView 注入 JS +- `htmlQueue` — 通过 SetHtml 替换整个壁纸 HTML(触发完整重载) +- WebView2 `Bind` — 设置窗口通过 Go 绑定函数读写配置 + +**数据刷新策略**: +- 启动时推送文件缓存(即时显示),后台拉取新数据后替换 +- 星座: 24h / AI 资讯: 2h / 知识卡片: 30min / 天气: 10min / Bing: 4h + +## 配置 + +配置文件: `config/settings.json`(与 exe 同级目录) + +| 字段 | 类型 | 默认值 | 说明 | +|------|------|--------|------| +| layout | string | "single" | 布局: single(合并卡片) / multi(独立卡片) | +| wallpaperType | string | "theme" | 壁纸类型: theme/image/bing/color | +| theme | string | "aurora" | 主题动画 | +| zodiac | string | "射手座" | 星座 | +| city | string | "" | 天气城市 ID | +| showSeconds | bool | false | 显示秒 | +| hideWallpaper | bool | false | 隐藏壁纸 | +| hideTime | bool | false | 隐藏时间 | +| hideWeather | bool | false | 隐藏天气 | +| hideZodiac | bool | false | 隐藏星座 | +| hideAINews | bool | false | 隐藏 AI 资讯 | +| hideKnowledge | bool | false | 隐藏知识卡片 | +| bingAutoRefresh | bool | false | Bing 每小时自动切换 | +| knowledgeKeyword | string | "" | 知识卡片关键字 | +| knowledgePrompt | string | "" | 知识卡片提示词 | + +## 构建 + +```bash +go build -o u-desktop.exe . +``` + +需要 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 (知识卡片) +``` + +## 开机自启 + +注册表 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run\UDesktopWallpaper` + +## 技术要点 + +- WebView2 嵌入桌面壁纸层通过 `SetParent` 到 WorkerW 实现(详见 [docs/wallpaper-embedding.md](docs/wallpaper-embedding.md)) +- 自定义 Win32 消息循环替代 `wv.Run()`(SetParent 后 Run() 消息路由异常) +- 全屏应用检测:定时检查前台窗口是否全屏,自动暂停/恢复壁纸渲染 +- 配置变更即时生效:设置窗口通过 evalJS 直接操作壁纸层 DOM,无需重启 diff --git a/docs/wallpaper-embedding.md b/docs/wallpaper-embedding.md index 0bf77b3..a3a45ba 100644 --- a/docs/wallpaper-embedding.md +++ b/docs/wallpaper-embedding.md @@ -143,10 +143,23 @@ wallpaper.html 里把 `RENDER_SCALE` 从 1.0 降到 0.5,canvas 渲染分辨率 ``` u-desktop/ -├── main.go # Go 层: WebView2 创建 + WorkerW 嵌入 + 系统托盘 -├── wallpaper.html # 渲染层: WebGL 极光 + 天气组件 + 星座运势 -├── backup-opengl/ # OpenGL 方案备份(已确证不可行) -├── go.mod / go.sum +├── main.go # 入口: 单实例互斥锁 + 配置目录 + 托盘启动 +├── win32.go # Win32 API 声明 +├── systray.go # 系统托盘 + WebView2 壁纸嵌入 + 消息循环 +├── wallpaper.go # 壁纸 HTML 构建 + 主题注入 +├── config.go # 配置结构体 + JSON 持久化 +├── settings.go # 设置窗口 (独立 WebView2) +├── weather.go # 天气 API + IP 定位 + 城市列表 +├── horoscope.go # 星座运势 API + 文件缓存 +├── ainews.go # AI 资讯 API + 文件缓存 +├── knowledge.go # 知识卡片 AI 生成 +├── bing.go # Bing 壁纸下载 + 历史导航 + 收藏 +├── dialog.go # Win32 对话框 (文件/颜色选择) +├── web/ +│ ├── overlay.html # 桌面覆盖层 (时间/天气/星座/资讯/知识) +│ ├── settings.html # 设置窗口 UI +│ └── themes/ # 壁纸主题 HTML +├── config/ # 运行时配置 (settings.json + 缓存) └── docs/ └── wallpaper-embedding.md # 本文档 ```