
用 Lively Wallpaper 换上动态壁纸,第一眼就会注意到一件事:
桌面图标还在最上面。
视频在图标后面播放,图标清清楚楚浮在上面——点得动、能拖拽、不影响使用。
但它不是"桌面背景"吗? 系统怎么知道哪些内容该压在图标下面?
这背后是 Windows 桌面的一套窗口层级机制。
多数人以为桌面就是一张背景图。实际上它是一组嵌套的窗口。
用窗口查看工具能看到这样的结构:
Progman └── SHELLDLL_DefView └── SysListView32对照着看:
关键点来了:SysListView32 才是画图标的地方,而它嵌在另外两层里。
你想在图标后面放东西,就得想办法挤进这个层级。
Windows 里有种窗口叫 WorkerW,可以理解成一个工作区容器。
动态壁纸工具用的就是这个。
流程大致是:
第一步:发一条消息
向 Progman 发送一个特定消息:
0x052C这条消息会让系统分离出一个 WorkerW 窗口。
第二步:调整层级
系统随后会做一次结构重组:
第三步:把自己塞进去
工具把自己的渲染窗口通过 SetParent 挂到那个背景容器上。
最终形成的层级是:
WorkerW(图标层) └── WorkerW(你的动态壁纸)上面那层是图标,下面那层是壁纸——所以图标永远压在上面。
这就是"动态壁纸不会盖住图标"的答案:不是工具做了什么特殊处理,是它主动把自己放到了图标层下面。
窗口层级管的是逻辑关系——谁在谁上面。
但真正把画面合成出来的,是 DWM(桌面窗口管理器)。
DWM 把所有窗口的内容渲染到离屏缓冲区,统一混合后再输出到屏幕。
顺带一提,这也解释了为什么"静态壁纸也占一点 GPU"——只要窗口叠着,DWM 就得做图层混合。
动态壁纸只是让这个负担变重了。
因为依赖 Explorer 的内部实现,它并不是稳定接口。
Windows 大版本更新时,桌面层级可能被重构。
比如某些较新的 Windows 版本调整了桌面窗口逻辑,导致传统那条 0x052C 消息不再能可靠地分离出 WorkerW。
结果就是动态壁纸显示异常——壁纸盖住了图标,或者干脆不显示。
这不是工具写得不好,是它依赖的东西变了。
所以这类工具的开发者通常会做兼容处理:不硬编码去找某个特定的 WorkerW,而是遍历窗口、找到包含图标层的那一个。
说回工具本身。
Lively Wallpaper 是开源的,它自己不做渲染引擎。
它的做法是——把成熟组件拼起来:
这样做的好处是格式支持广:视频能播、网页能跑、甚至 Shader 类内容也支持,因为它复用了现成的引擎。
代价是没法对每个引擎做深度定制。
明白这一点,就能理解它的性能表现了——资源占用主要取决于你选的壁纸用了哪个引擎、以及那个引擎的负载。
一个 1080p 视频壁纸和一个满屏粒子特效的网页壁纸,开销完全不是一回事。
这是动态壁纸最重要的一个设置。
在 Lively Wallpaper 的设置里,把"应用程序全屏时"改为暂停。
理由很简单:
动态壁纸是个持续运行的渲染任务。 它一直在解码、一直在绘制。
而游戏和视频播放对 GPU 的需求本来就高。
两者同时跑,GPU 要同时处理壁纸渲染和游戏画面——结果就是掉帧。
暂停之后,壁纸不再渲染,GPU 的资源全部让给前台应用。
同理还有几个场景值得配:
尤其是最后一条——动态壁纸是持续工作负载,笔记本靠电池跑的时候,它会明显吃掉续航。
除了暂停策略,还跟这些有关。
Lively Wallpaper 托盘图标里有性能监控,能看当前的 CPU 和 GPU 占用。
如果占用持续很高,说明这个壁纸对你的硬件来说太重了。
典型的重量级壁纸:
轻量级的:简单 GIF、低分辨率视频、静态图的轻微动效。
这一步容易被忽略。
去 Windows 的图形设置里,把 Lively Wallpaper 的主程序指定为"高性能"。
如果系统把它判给了核显,解码和渲染的压力会落到更弱的硬件上——表现就是卡、而且 CPU 占用还高。
壁纸不需要 60 帧。
大多数场景下 30 帧看起来完全够用,但 GPU 占用能降下来不少。
每个显示器都跑一个动态壁纸,开销是叠加的。
而且如果两个显示器接在不同的显卡上(比如一个接核显、一个接独显),Windows 合成时还要跨卡传输数据,性能会更差。
实际做法:主屏用高质量壁纸,副屏用轻量级的。
动态壁纸能在图标后面播放,是因为工具把窗口挂进了桌面的层级结构里。
图标层在上、壁纸层在下——这个顺序是系统窗口树决定的,不是渲染技巧。
理解了这一点,它的两个特点就都说得通了:
为什么它不干扰操作——因为它在图标层下面,压根不参与交互。
为什么它吃资源——因为它是个一直在跑的渲染任务,和你的游戏抢同一块 GPU。
安装包:
https://dubapkg.cmcmcdn.com/cs/257def/Lively%20Wallpaper.exe
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。