壁纸切换器
一键切换桌面壁纸,支持必应每日壁纸和多种随机壁纸。
> 智能壁纸设置:本技能已解决 Windows 11 24H2 壁纸设置问题,可自动在任何环境下设置壁纸,无需用户手动操作。
功能概览
| 模式 | 场景 | 一句话说明 |
|---|---|---|
| A | 必应每日壁纸 | 获取今天或指定日期的必应壁纸 |
| B | 随机壁纸 | 从图片库随机获取一张壁纸 |
| C | 分类壁纸 | 按分类获取壁纸(动漫/风景/AI艺术等) |
| D | 历史壁纸 | 获取指定日期的必应历史壁纸 |
| E | 查看/恢复 | 查看当前壁纸信息、一键恢复上一张原壁纸 |
怎么触发?
换壁纸 → 风景壁纸(默认)
换必应壁纸 → 模式A(必应今日)
换动漫壁纸 → 模式C(动漫分类)
换风景壁纸 → 模式C(风景分类)
换4K壁纸 → 模式C(4K分类)
换上周一的必应壁纸 → 模式D(历史壁纸)
恢复原来的壁纸 / 换回去 → 模式E(--restore)
现在的壁纸是哪张 → 模式E(--current)
模式自动识别规则:
- 含"必应/bing" → 模式A或D
- 含"随机/随便/换一个" → 默认风景壁纸
- 含"动漫/风景/AI/4K/二次元" → 模式C(对应分类)
- 含具体日期 → 模式D
- 其余 → 默认风景壁纸
智能壁纸设置原理
Windows 11 24H2 壁纸设置问题分析
在 AI agent 环境(如 TRAE)中,存在三个核心问题:
| 缺陷 | 问题描述 | 修复方案 |
|---|---|---|
| SystemParametersInfo 不可靠 | Win11 24H2 中 API 返回成功(1)但壁纸不生效,桌面显示黑色 | 改用 IDesktopWallpaper COM 接口 |
| Known Folder 重定向 | IDesktopWallpaper 无法设置 Pictures/Desktop 等重定向目录下的壁纸,返回 0x80070002 | 复制到 %TEMP% 目录再设置 |
| 路径问题 | TRAE 会话和桌面会话隔离,用户目录不可见 | 下载到已知工作目录 |
解决方案
- 下载壁纸:保存到技能目录下的
wallpapers文件夹 - TEMP 中转:复制到
%TEMP%\current_wallpaper.jpg(绕过 Known Folder 重定向) - COM 接口:使用
IDesktopWallpaperCOM 接口设置壁纸(替代不可靠的SystemParametersInfo) - 壁纸位置:设为 Fill (4)
- 兼容补充:同时调用
SystemParametersInfo兼容旧版 Windows - 注册表备份:写入
HKCU\Control Panel\Desktop\Wallpaper(跨会话生效)
执行流程
1. 下载壁纸到 skill/wallpapers/ 目录
2. 写入注册表(HKCU\Control Panel\Desktop,指向 %TEMP% 副本)
3. 复制壁纸到 %TEMP%\current_wallpaper.jpg(绕过 Known Folder 重定向)
4. 调用 IDesktopWallpaper COM 接口设置壁纸(位置=Fill)
5. 补充调用 SystemParametersInfo(兼容旧版)
6. 等待 500ms,调用 UpdatePerUserSystemParameters 刷新 3 次
7. 等待 1s 确保生效
关键文件
| 文件 | 说明 |
|---|---|
scripts/wallpaper.py |
主脚本:下载壁纸 + 格式嗅探 + 备份 + 调用设置流程 |
scripts/SetWallpaper.ps1 |
PowerShell 脚本:复制到 TEMP + IDesktopWallpaper COM + 刷新 |
scripts/ConvertImage.ps1 |
用 Windows 内置 WIC 把 WebP 转成 JPEG(无需 Pillow) |
模式A:必应每日壁纸
获取今天的必应壁纸,或指定日期的壁纸。
API
GET https://uapis.cn/api/v1/image/bing-daily
参数
| 参数 | 类型 | 说明 |
|---|---|---|
date |
string | 壁纸日期,格式 YYYY-MM-DD,不传则返回今天 |
resolution |
string | 分辨率:4k(默认)或 1080 |
使用方式
获取今日壁纸:
python scripts/wallpaper.py bing
获取指定日期壁纸:
python scripts/wallpaper.py bing --date 2025-06-20
获取1080p壁纸:
python scripts/wallpaper.py bing --resolution 1080
模式B:随机壁纸
从图片库随机获取一张壁纸。
API
GET https://uapis.cn/api/v1/random/image
使用方式
python scripts/wallpaper.py random
模式C:分类壁纸
按分类获取特定类型的壁纸。
分类速查表
| 用户说 | 参数 | 说明 |
|---|---|---|
| 动漫壁纸 | --category acg --type pc |
二次元动漫 |
| PC壁纸 | --category acg --type pc |
电脑端动漫 |
| 手机壁纸 | --category acg --type mb |
手机端动漫 |
| 风景壁纸 | --category landscape |
自然风景 |
| 二次元 | --category anime |
混合动漫 |
| AI壁纸 | --category ai_drawing |
AI生成艺术 |
| 4K壁纸 | --category acg --type z4k |
4K高清 |
| 表情包 | --category bq |
搞笑表情 |
使用示例
# 动漫PC壁纸
python scripts/wallpaper.py category --category acg --type pc
# 风景壁纸
python scripts/wallpaper.py category --category landscape
# 4K壁纸
python scripts/wallpaper.py category --category acg --type z4k
模式D:历史壁纸
获取指定日期的必应历史壁纸。
使用方式
python scripts/wallpaper.py bing --date 2025-01-01
模式E:查看与恢复
查看当前壁纸
python scripts/wallpaper.py --current
输出当前壁纸路径、文件大小、真实图片格式,以及已备份的历史壁纸数量。
恢复原壁纸
python scripts/wallpaper.py --restore
每次设置新壁纸之前,脚本会先把注册表中记录的那张壁纸复制到
wallpapers/backup/previous_<时间戳>.<ext>(最多保留 5 份)。
--restore 会取最近一份备份重新应用,用户原来的桌面即可完整还原。
> 为什么必须备份:Windows 壁纸实际指向 %TEMP%\current_wallpaper.*,
> 直接覆盖会让用户原始壁纸永久丢失、无法找回。
通用参数
| 参数 | 说明 |
|---|---|
--no-set |
只下载不设置壁纸 |
--output <路径> |
指定保存路径 |
--keep N |
仅保留最近 N 张壁纸,自动清理更早的 |
--no-convert |
不把 WebP 转成 JPEG,保留原始格式 |
--json |
输出 JSON 结果(含真实格式/大小/是否应用成功),便于程序解析 |
--list-categories |
打印全部分类与子类型速查表 |
--current |
查看当前壁纸信息 |
--restore |
恢复上一张原壁纸 |
图片格式处理(v1.2 重要修复)
必应壁纸接口 bing-daily 实际返回的是 WebP,而非 JPEG。旧版脚本统一写成 .jpg,
导致扩展名与内容不符,Windows 按扩展名选解码器时可能设置失败或显示黑屏。
现在的处理链路:
- 按文件头嗅探真实格式(JPEG/PNG/WebP/GIF/BMP),而不是相信 URL 或扩展名
- WebP 自动转 JPEG:优先 Pillow,未安装则回退 Windows 内置 WIC
(scripts/ConvertImage.ps1,零额外依赖) - 转换失败则保留 WebP,且
%TEMP%中转副本使用与源文件一致的扩展名 - 内容合法性校验:接口返回错误 JSON 时直接报错,不会把文本存成图片
- 下载超时 + 指数退避重试(30s 超时、最多 3 次),避免网络抖动挂死
工作流程
智能体使用流程
- 识别用户意图:根据用户输入判断使用哪个模式
- 执行脚本:运行
python scripts/wallpaper.py <模式> [参数] - 自动设置:脚本自动完成下载和设置,无需用户干预
示例对话
用户:换壁纸
智能体:正在为您获取随机壁纸...
[执行脚本]
智能体:壁纸已切换!已为您设置一张新的随机壁纸。
用户:换必应壁纸
智能体:正在获取今日必应壁纸...
[执行脚本]
智能体:今日必应壁纸已设置成功!
用户:换动漫壁纸
智能体:正在获取动漫壁纸...
[执行脚本]
智能体:动漫壁纸已切换成功!
系统支持
| 系统 | 支持状态 | 说明 |
|---|---|---|
| Windows | ✅ 完全支持 | 三重保障自动设置 |
| Linux (GNOME) | ✅ 完全支持 | gsettings 自动设置 |
| Linux (KDE) | ✅ 完全支持 | qdbus 自动设置 |
| macOS | ✅ 完全支持 | osascript 自动设置 |
注意事项
- 所有 API 均为免费,无需注册
- 壁纸保存到技能目录下的
wallpapers/目录,设置前会自动复制到%TEMP%中转 - Windows 11 24H2 使用
IDesktopWallpaperCOM 接口替代不可靠的SystemParametersInfo - 当用户 Known Folder 被重定向时,必须使用
%TEMP%作为中转目录 - 无需用户手动操作,智能体可直接完成壁纸切换
常见问题
| 问题 | 解决方案 |
|---|---|
| 壁纸未立即更新 | 脚本已自动处理,等待1-2秒即可 |
| 桌面显示黑色 | Win11 24H2 已用 IDesktopWallpaper COM 接口解决此问题;v1.2 还修正了 WebP 存成 .jpg 导致的解码失败 |
| 下载失败 | 已内置 3 次指数退避重试;仍失败请检查网络 |
| 分类不存在 | 运行 --list-categories 查看速查表 |
| Known Folder 重定向导致失败 | 脚本已自动复制到 %TEMP% 绕过此问题 |
| 想换回原来的壁纸 | 运行 --restore |
| 下载的图片打不开 | v1.2 已按文件头保存正确扩展名;用 --current 可查看真实格式 |
wallpapers/ 越来越大 |
加 --keep 10 自动清理历史壁纸 |