桌面窗口管理器
| Microsoft Windows 的组件 | |
Windows 7 Build 7600.16385 中的 Windows Aero,显示 DWM 的功能 | |
| 推出于 | Windows Longhorn Build 3683 |
|---|---|
桌面窗口管理器(在早期的 Longhorn 版本中称为 Desktop Compositing Engine,即“桌面合成引擎”或“桌面组合引擎”)是 Microsoft Windows 的一个软件组件。它用于呈现 UI 元素、动画和视觉效果(例如 Build 4066 和 4074 中的桌面星形效果以及 Windows Vista 和 Windows 7 中的 Windows Aero 透明度和动画),绘制每个顶级窗口的非工作区。默认情况下,渲染管道将尽可能使用系统的 GPU(通过 DirectX API),但从 Windows 8 Build 7880 开始,当此类加速器不可用时,它还将使用基于软件的 3D 光栅渲染器进行渲染。
历史
Desktop Compositing Engine(桌面合成引擎)
桌面合成引擎从 Build 3683 开始首次出现,但处于 bug 状态,仅呈现窗口透明度。从 Build 3706 到 Build 4005,在最小化或关闭窗口时添加了新的旋转效果,并包含一个用户界面,允许用户在启动时或通过动态控制启用 DCE。
在整个 Milestone 5 中,已知 Lab06 版本(例如在 WinHEC 2003 上使用 DCE 演示的 Build 4015)和 Build 4018 拥有额外的 DCE 效果,包括图形动画和拖动时摆动的窗口。尽管有这些动画,其他实验室只使用窗口透明度效果。同样在 Milestone 5 期间,桌面合成引擎进行了重新设计,以启用半透明的 DCE 窗口框架。但是,Build 4029 到 4033 在 DCE 中存在 bug,导致它无法启用 Direct3D 着色器(DCE 窗口框架所依赖)。此 bug 直到 Build 4038 才得到修复,这是首个具有有效渲染 DCE 窗口框架的 M6 版本。
桌面窗口管理器
最初的合成引擎在 Longhorn 项目的 Milestone 7 中继续开发。对于 Build 4088 至 Build 4093,它将会使用旨在作为服务运行的 .NET 托管代码大量重写,这也允许软件渲染在标准 VGA 驱动程序上运行。
在重置 Longhorn 的开发后,从重置前版本中使用的桌面窗口管理器被废弃,取而代之的是新的、更稳定的本机实现,现在可以真正按预期呈现 Aero 主题。在开发早期就放弃了对允许桌面窗口管理器在 XDDM 驱动程序上运行的支持,从 Build 5098 开始的版本只允许在安装了支持的 LDDM/WDDM 驱动程序时运行 DWM。
DWM 需要 Direct3D 9Ex 和 Pixel Shader 2.0 才能运行。基于 GDI 的应用程序使用 Canonical 显示驱动程序渲染到纹理,而基于 WPF 的应用程序(使用相同的非托管合成器渲染)实际上可以成为合成树的一部分,直到更新使 .NET Framework 与 Windows Vista 不同步。Direct3D 应用程序呈现到由 DWM 合成的纹理的图面。
从 Windows 7 开始,DWM 使用 Direct3D 10.1(如果可用)来提高性能,且 WDDM 1.1 再次支持某些 GDI 硬件加速。在 Windows 8 中,桌面窗口管理器现在始终为“开始”屏幕界面运行,在正常情况下无法禁用。此外,桌面窗口管理器的效果能够从 Build 7880 开始通过软件呈现,而非依赖硬件加速。
启用 Desktop Compositing Engine
需要注意的是,在启动桌面合成引擎之前,必须安装并正确运行具有硬件加速功能的兼容 Direct3D 图形驱动程序;否则,要么什么都不做,要么 Desktop Compositor(桌面合成器)会崩溃或产生主要的图形伪影。[1]在某些版本中,VMware 图形堆栈存在 bug,即启用 DCE 时不支持 alpha 掩码或乘法。

Windows Longhorn Build 3683
在此版本中,没有用于启用 DCE 的用户界面。要启用 DCE,请添加以下注册表项并重新启动:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DesktopComposition]
"StartupOptions"=dword:00000001
StartupOptions 可以设置为 0 禁用 DCE,1 以在启动时启用它,2 以允许通过 rundll32 user32.dll,StartDCE 和 rundll32 user32.dll,StopDCE 命令进行动态控制。
此版本中的 DCE 不渲染桌面背景(尽管仍然可以通过边栏看到背景),非常不稳定,通常会在屏幕上显示主要伪影或在几分钟后完全冻结。它只能在真实硬件上运行,因为大多数虚拟化器(如 VMware)在启动时会立即导致错误检查。
Milestone 3 / 4 的版本
这适用于 Build 3706 到 Build 4005。此时代的版本包含 DCE 的更新版本,其中包含关闭和最小化动画。最小化动画在旋转到任务栏中时淡出,而关闭动画在旋转时淡出。可以通过打开 Display Properties(显示属性),单击 Advanced(高级)并将 DCE 设置配置为启动时启用或通过动态控制启用来启用 DCE。
这些版本中的 DCE 仅在硬件层上渲染图形,而软件层则渲染为黑色或剩余数据,这意味着尝试使用软件捕获方法(如 Print Screen 印屏幕)将无法正确生成屏幕。大多数虚拟机管理程序(包括高于 6.5.x 的 VMware 版本)将仅渲染软件层,从而导致在启动 DCE 时出现黑屏。
Milestone 5 的版本
这适用于 Build 4011 到 Build 4020。
DCE 可以通过 rundll32 uxdesk.dll,DCEStart 命令启用,也可以通过 rundll32 uxdesk.dll,DCEStop 禁用。或者,在导入以下注册表文件并重新启动后,可以采用与 Milestone 3 / 4 版本相同的方式启用 DCE:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Desktop\CompositingEngine]
"EnableShellUI"=dword:00000001
"Startup"=dword:00000002
DCE 与 Milestone 3 / 4 DCE 基本相同,但没有任何动画。然而,与 Milestone 3 / 4 版本不同的是,DCE 可以正确渲染软件层并将在虚拟机管理程序上运行。
这也是第一个可以渲染早期版本的玻璃边框的 DCE 版本,稍后将在未来的版本中看到。启用这些玻璃边框需要在 Build 4015 和 4017 上有一个修补的 dce.dll 文件,并在 Build 4020 的注册表中有一个补丁。
Milestone 6 的版本

这适用于 Build 4038 到 Build 4042.Lab06_n。
可以通过在 C:\Windows\i386 目录中执行 sbctl start 或 sbctl stop 来启动或停止 DCE。
默认情况下,DCE 加载不透明的金属框架,但可以启用玻璃框架。有关启用玻璃边框的说明,请参阅 Windows Aero。
图库
-
Build 4015.Lab06_n 中的 DCE 效果之一
-
Build 4018 中的 DCE