2013年1月28日 星期一

Windows shell and desktop windows layer

Linux 原生是文字界面 它的 shell 是文字介面的例如 bash shell
Windows 是原生支援圖形介面的系統 它的 shell 也是圖形介面的 就是 explorer.exe

在螢幕上看到的東西都是屬於 explorer 創造出來的 window
下圖可以顯示 explorer 的階層



progman 就是 explorer 創建出來的頂層視窗 用 GetShellWindow API 可以取得它的 Handle
它的 class name 就是 "progman"

但是其實在 progman 之上還有一個最頂層 window 它被 progman 覆蓋所以看不到
這個 window 就是 desktop window 它是一個特殊的 系統定義的視窗 是所有其他視窗的祖先
GetDesktopWindow API 可以取得它的 Handle
這個 window 是被 csrss.exe 創造出來的
它的 class name 是 "#32769"

系統中一些重要元件例如 taskbar or desktop 都是被 explorer 創建出來的 window
是 progman 的後代

reference:
http://stackoverflow.com/questions/1669111/how-do-i-get-the-window-handle-of-the-desktop
http://blogs.microsoft.co.il/blogs/pavely/archive/2011/06/18/getshellwindow-vs-getdesktopwindow.aspx
http://technet.microsoft.com/en-us/magazine/gg213851.aspx
http://www.k8w.net/technology/develop/200710/67.html

沒有留言:

張貼留言