本項目參考了以下資料[這可能對你理解程序運行有幫助]:
https://github.com/Yinmany/WinWallpaper
https://blog.csdn.net/breaksoftware/article/details/4332371
https://tieba.baidu.com/p/5015219921?red_tag=0411291965
引用了迅雷的Aplayer引擎:
http://aplayer.open.xunlei.com/index.html
本項目地址:https://github.com/Tyningling/Dynamicwallpaper
——————————————————————————————
使用示例:
1.創建壁紙窗體:
使用win32api.SendMessageTimeOut向Program Manager 發送0x52c [這個步驟將使SysListView32与Program Manager分離。]
之後將我們的窗體Form2,設置為Program Manager的子窗體 [管它三七二十一]
這樣我們的窗體就成爲了壁紙之前的窗體。
2.關於TXMiniSkin__這個窗體是騰訊桌面整理組件
在測試環境中,360桌面助手能與壁紙窗體共存,是因爲,它是一個獨立窗體,用類似于創建壁紙窗體的方法,設置了透明的收納格,這個程序的實現也十分簡單。
但是,在騰訊的桌面整理中,它就沒有這麽友善了,請看大屏幕:
(圖爲使用SetParent將其父窗體設置為Form1)
沒錯,它建立一了個 TxMiniSkin窗體,然後繪製了圖標,并且不斷的刷新自己為壁紙窗體,最後我的解決方法是:
在EnumWindowsProcA()的回調函數中,找到它,并設置它為隱藏窗體。
Public Workerw As Long, Tx As Long, Tx_B As Boolean
Public Function EnumWindowsProcA(ByVal hWnd As Long, ByVal lParam As Long) As Boolean
If win32api.FindWindowExA(hWnd, &, "SHELLDLL_DefView", "") <> & Then
Workerw = win32api.FindWindowExA(&O0, hWnd, "WorkerW", "")
'Call win32api.ShowWindow(Workerw, SW_SHOW)
Call win32api.ShowWindow(Workerw, SW_HIDE)
End If
'特殊处理:
'__________关于腾讯桌面整理导致的问题
If Not Tx_B Then
Tx = win32api.FindWindowExA(hWnd, &, "TXMiniSkin", "桌面整理")
If Tx <> Then Call win32api.ShowWindow(Tx, SW_HIDE): Tx_B = True
End If
EnumWindowsProcA = True
End Function
3.動態壁紙組件
我所使用的是迅雷的Aplayer,由于解碼庫比較大,所以請自行從官網下載并放置到 【Bin\Codecs】 中。
爲什麽使用Aplayer? 大概是因爲比較方便,VB6可以直接調用ActiveX控件,但是你必須先使用install.bat對它進行安裝。
另外,其實你也可以使用別的播放組件來實現播放。