如何用几行代码实现自己的WallpaperEngine动态壁纸软件

时间:2024-03-05 21:28:41

WallpaperEngine 是一款非常受欢迎的动态壁纸软件。有着非常丰富且好看的壁纸库,尤其受各位LSP的欢迎(狗头)。
但是对于如何定制化自己的壁纸,或者如何制作自己喜欢的壁纸,甚至魔改壁纸软件,都是非常麻烦的事情。
如何自己实现一个类似功能的壁纸软件呢?


动态壁纸软件的原理

通过对windows10的桌面窗口分析可以找到一个位于桌面与图标之间的窗口,对它下手就可以达到目的!
具体原理分析 请参考这里!
原文中使用了QT的 WebEngine,这里我们使用CEF来完成,这样会更方便!

思路分析

  1. 发送一条神奇的windows窗口消息
  2. 得到WorkerW窗口,并取到句柄
  3. 将HTML页面通过CEF渲染在WorkerW窗口上

代码与踩坑

神奇的windows窗口消息

这个message似乎会变,上文中的message已经不再适用。
到我写这篇文章时,消息值变成了发送一次 1324,13,0 和一次 1324,13,1 才行。

CEF的使用

虽然我使用的是cefpython3来完成的,但是应该适用于cef的其他语言版本。
官方编译的CEF并不支持MP4解码,需要你重新编译或者使用别人编译的支持MP4版本的CEF(需要相同版本、位数),替换对应的libcef.dll
关于CEF的编译有很多文章,但是建议大家采用替换的方式来完成,自己编译太耗时了。
CEF74.1.19+gb62bacf+chromium-74.0.3729.157 libcef.dll 64位
这里是一个我编译过的版本的dll下载地址。

代码与效果

Python代码

from cefpython3 import cefpython as cef
import sys

# 替换python预定义异常处理逻辑,为保证异常发生时能够结束所有进程
sys.excepthook = cef.ExceptHook

# 创建浏览器
info = cef.WindowInfo()
# info.SetAsChild(hwnd) 这里要写你的 WorkerW窗口句柄
setting = {
    "default_encoding":"utf8"
}
cef.Initialize()
cef.CreateBrowserSync(url=r"E:\Python\wapper\index.html", window_info=info)
# 消息循环:监听信号和处理事件
cef.MessageLoop()

# 结束进程
cef.Shutdown()

用来渲染的HTML代码



<img src="1.jpg" width="1920px" height="1080px" style="position: absolute;left: 0;top: 0; display: block;">
<img src="2.jpg" width="1920px" height="1080px" style="position: absolute;left: 0;top: 0; display: none;">
<img src="3.jpg" width="1920px" height="1080px" style="position: absolute;left: 0;top: 0; display: none;">
<script src="./jquery.min.js"></script>
<script>
    var i = 0
    var img_array = $(\'img\')
    setInterval(function () {
        if (i < img_array.length - 1) {
            img_array.eq(i).fadeOut(2000);
            img_array.eq(i + 1).fadeIn(2000);
            i++;
        } else {
            img_array.eq(i).fadeOut(2000);
            img_array.eq(0).fadeIn(2000);
            i = 0;
        }
    }, 4000);
</script>


代码说明

过程是 HTML代码通过CEF来渲染到桌面上
HTML中是3张图片的轮播,可以换成视频也没关系,理论上只要能正常解析的网页就没关系
Python使用的是Python3.8,cefPython3的库

效果展示

上文的代码只是简易版,这里我写了一个稍复杂的版本。

下载地址

链接: https://pan.baidu.com/s/1VupBoVJIUeCyGJljQZ_qqw
提取码: rkvb