Posted on 2008-12-08 08:50
S.l.e!ep.¢% 閱讀(292)
評論(0) 編輯 收藏 引用 所屬分類:
VC
? 最近開發的一個軟件的功能模塊, 需要使用桌面作為舞臺, 在上面繪制一些東西, 輸出一些文字, 作為研究這個課題的副產品. 我寫了一個簡陋的"媒體播放器", 就使用到了這個技術.
?? 如果 shell (也就是資源管理器) 正在運行, 則桌面的頂層窗口是 "Progman" 類的窗口, 其擁有的子窗口是 "SHELLDLL_DefView" 類的窗口, 再下一級的子窗口是一個標準的 ListView. 如果資源管理器沒有運行, 則頂層窗口是由 GetTopWindow() 函數返回的窗口, 它屬于 csrss.exe 進程. 我們這里只討論資源管理器運行時的情景, 因為 GetTopWindow 窗口只有唯一窗口, 操作簡單; 而 shell 桌面窗口有三層, 而且我們還要在桌面圖標之后操作.
?? 大致的細節是, (1). 設置播放窗口的擁有者窗口是 "SHELLDLL_DefView" 類的窗口; (2). 設置桌面壁紙為顏色值為 RGB < 16, 0, 16 > 的純色壁紙, 這個顏色是 DX 視頻設置的 Key Color 色, 不是隨隨便便指定的; (3) 重新設置桌面的 ListView 的父窗口是 "SHELLDLL_DefView" 類的窗口, (這看起來有點脫褲子放屁, 但在這里卻是必要的), 這將重新排列幾個桌面窗口的顯示順序.
?? 到此為止, 原理就差不多了. 最后還有個問題, 就是當有人在播放期間, 重新設置了壁紙, 就必須要響應 WM_SETTINGCHANGE 消息等, 將前述的流程再走一遍, 否則正在播放的視頻將消失.
?? 下面是
源代碼和可執行二進制文件參考資料:
?? (1). 某網站的某哥們的一個簡易播放器, 用 VB6 開發, 我的東東就是基于它的.
?? (2). http://www.videolan.org/vlc/?? 一個開源的媒體播放器.