小林的VB6動態壁紙模擬程序

本項目參考了以下資料[這可能對你理解程序運行有幫助]:

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, 0&, "SHELLDLL_DefView", "") <> 0& 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, 0&, "TXMiniSkin", "桌面整理")
If Tx <> 0 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對它進行安裝。

另外,其實你也可以使用別的播放組件來實現播放。

posted @ 2019-07-31 12:56  风陵  阅读(314)  评论(0编辑  收藏  举报