DWM(Desktop Window Manager)是Windows Vista和Windows 7中的一個新組件,負責管理桌面窗口。此外,DWM也是GIMP和Chromium的一部分。DWM的最新版本為6.3,由suckless.org開發,使用c語言編寫,適用于類Unix操作系統,屬于窗口管理器類型,采用MIT License許可。
Windows窗口管理器
桌面窗口管理器是windows Vista及windows 7中的一個新組件:Desktop Window Manager(DWM)。它建立在WPF核心圖形層組件基礎之上。DWM的桌面合成是建立在Composition引擎基礎之上的新特征。它的出現幾乎改變了Windows Vista中應用程序的屏幕象素顯示方式。啟用DWM后,提供的視覺效果有毛玻璃框架、3D窗口變換動畫、窗口翻轉和高分辨率支持。其中最明顯的特征有:任務欄窗口的實時縮略圖;Alt-Tab和Win-Tab組合鍵所看到的效果。
桌面組合
到目前為止Vista最大的改變就是引進桌面組合。這成為一切都由DWM執行的基礎。桌面組合的主要特點 是:應用程序取得屏幕上像素的方法已經本質的改變。
在Windows的各個版本,直到XP,程序通過窗口來paint他們的可見區域,并且它們直接paint到buffer,然后顯示到顯卡。有了Windows Vista,程序通過窗口來paint它們的整個表面到一個離屏(offscreen)的表面(可能叫做位圖,緩沖區或紋理),并且DWM處理所有這些offscreen表面,并且組合在一起放到onscreen緩沖區。
一些例子
訪問窗口
現在程序是render到offscreen,這些offscreen表示能用在其他地方。這就是Flip,Flip3D和小圖片特性怎么樣工作的,并且其他的特性也能利用這個點。
不要在窗口操作中將背景程序牽涉進來
當窗口移動通過XP或以前的屏幕時,背景窗口部分僅僅在背景窗口蘇醒并且開始paint的時候可見(相應WM_PAINT消息,其收到頂級窗口的移動消息)。對于非響應背景程序,或即使是響應的程序但正好是page out的,也會導致很差的用戶體驗。
考慮移動paint程序窗口通過一個IE窗口。在XP或之前的OS中,下面的癥狀是不幸的但也是非常普通的:兩個case中下面的IE程序不能足夠快的repaint它自己來避免由移動Paint窗口留下的尾巴。
在Windows Vista下,就不是這樣的情況了,下面的窗口不會收到WM_PAINT消息,并且不會被請求要render,由于它們的內容已經在DWM中,并且用來組合這個screen的。
Tear free體驗
假定,DWMrender到screen,DirextX提供的典型地用在游戲上最新技術能用來整個桌面體驗。特別的,圖形卡flip前緩沖區能在屏幕上移動,增加了用戶體驗的平滑行和質量。
高分辨率的支持
主要的程序輸出都是對監視器分辨率(DPI)不可知的。隨著高分辨率監視器的增加(120 DPI,144DPI),程序出現在非常小的物理空間會帶來比較壞的體驗。因為DWM有訪問程序窗口的offscreen,DWM是唯一縮放這個DPI無知程序的地方,將其最終展現給用戶,提高高分辨率監視器上的體驗。
內存的使用情況
因為每個窗口都需要在內存中有一個緩沖區來存儲窗口的上下文, 所以這個 dwm.exe 進程所占的內存大小是由打開窗口的個數控制的. 如果打開了大量的窗口, dwm.exe 則會占用更多的內存. 在大多數情況下, 相比占用相對較少的內存, 使用復合窗口管理器是值得的.
關閉 dwm
關掉 dwm.exe 的唯一方法是停止這個服務運行. 在控制面板或者開始菜單中打開"服務", 然后找到列表里的 "Desktop Window Manager Session Manager", 然后點擊"停止"按鈕, 注意在點了"停止"按鈕后你會切換到系統的基本主題(Basic Theme) .
可以以管理員模式運行控制臺然后使用下面的命令:
Stop Service net stop uxsms
Start Service net start uxsms
Disable Service sc config uxsms start= disabled
Enable Service sc config uxsms start= auto
將來可能的topic
桌面組合是DWM提供的最基礎的方面,但我們已經僅僅簡單說了一下表面的主題,那里仍然有許多關于探索和完全理解我們在Windows Vista中正在做什么的topic。這里錯略列了幾個topic:
1.DWM使用 DirextX, GPU和硬件加速
2.Vista顯示驅動模型對DWM的重要性和影響
3.重定向GDI和DirextX程序
4.怎么樣揭示正在使用的WPF概念和技術
5.DWM怎么樣paint窗口邊界和其他非客戶區
6.DWM遠程,顯著和訪問性
7.高DPI支持
8.公共的探索DWM API
9.rener和可視性的優化
10.DWM的內存使用
其他DWM相關的源信息
最技術的理解討論關于DWM的WEB是可能的,確實有其他地方那個有相關的信息和新聞:
1.Kam VedBrat維護的log,常常給DWM內部的描述,特別是DWM的特性和Vista Aero。
2.微軟public.windows.developer.winfxaero新組討論所有Aero相關的東西
X11窗口管理器
dwm - dynamic window manager
dwm是為X11編寫的窗口管理器,是采用MIT許可證的開源軟件、體現極簡風格的窗口管理器,其開發的原則是:代碼不超過2000行,所有配置選項均包含在一個頭文件中。
與傳統窗口管理器的不同點在于,dwm盡量使新窗口不遮擋老窗口的內容,避免過多的鼠標拖動窗口、鼠標改變窗口大小等操作。
極簡風格是電腦軟件開發的一個廣為人知的思想。它對dwm影響很大,同時對其他窗口管理器(比如xmonad、awesome)影響也很大。dwm在外表上酷似wmii,但本質上更簡潔。dwm完全使用c語言編寫,為了保持簡潔,除了修改源代碼外,沒有配置文件可供修改。它的源代碼壓縮包僅60K,能在一秒之內編譯生成可執行文件dwm。
特點
1,支持多工作區;
2,可以使用鼠標來改變窗口大小;
3,通過改變頂欄(默認)的狀態來選擇平鋪還是普通窗口擺放模式;
4,頂欄支持顯示窗口名字(默認窗口無標題欄),頂欄通常作為提示欄顯示系統信息、歌詞等;
5,焦點跟隨鼠標
截圖
分支
xmonad是Haskell 對dwm的重寫擴展。
AWESOME是對dwm的擴展,擴展包括矢量字體支持、帶配置文件、Lua腳本支持、可變主題、多窗口擺放模式。
echinus是對dwm的擴展,擴展包括矢量字體支持、是EWMH的子集、焦點跟隨鼠標點擊、帶配置文件、多窗口擺放模式。
scrotwm使用了部分dwm的代碼,添加配置文件并可以在不丟失原先狀態下重啟以應用配置文件。
參考資料 >