如何用幾行代碼實現自己的WallpaperEngine動態壁紙軟件


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM