DwmIsCompositionEnabled在Windows 8中还有用吗?

5
根据启用和控制DWM组合

注意 从Windows 8开始,本节中的信息不再有效。无法通过编程方式禁用DWM,当应用程序尝试绘制到主显示表面时,它也不会被禁用。以下信息仅适用于Windows 7和早期系统。

好的。所以我们不能再通过编程方式禁用DWM了。但是它仍然可以被禁用吗?在Windows 8上,DwmIsCompositionEnabledpfEnabled是否始终设置为TRUE?
如果某种方式可以禁用组合,那么DwmIsCompositionEnabled是否仍然有用?

没有 DWM,就不可能有任何 Store 应用程序。我不明白这个问题的意义,你要编写的代码只能在 Win8 上运行而不能在 Win7 上运行吗?那有点不明智。 - Hans Passant
2
你为什么这样想?我的应用程序在Vista/7上进行自定义绘画,取决于DWM状态,因此我只想知道在Windows >= 8上,DwmIsCompositionEnabled是否总是返回true。 - Jake Petroules
2个回答

8
根据MSDN上的 桌面窗口管理器始终处于开启状态(Windows) :
在Windows 8中,桌面窗口管理器(DWM)始终处于开启状态且无法被用户和应用程序禁用。在Windows 8中,DWM桌面组合是核心操作系统组件,不能被禁用。除了一些例外情况,桌面组合总是开启的;它在用户登录之前启动,并在整个会话期间保持活动状态。所有在Windows 7中禁用桌面组合的选项都已被删除。应用程序无法使用DwmEnableComposition来禁用桌面组合。为了保持向后兼容性,对此API的调用将返回成功;然而,桌面组合不会被禁用
这是一个相当明确的答案。但是,“除了一些例外情况”指的是什么呢?如果您知道,请添加评论 :)

3
与人们所说的(“他们删除了代码”,“Basic主题不再存在”等)相反,在Windows 8中,旧的视觉风格仍然存在且运行良好。
唯一的问题是如何将其用于普通应用程序并不是很清楚!
这并不是完全禁用DWM,但肯定是禁用了组合:只需在Windows XP上下载PowerToy计算器并尝试在Windows 8中以兼容模式运行它,您就会看到旧的主题仍然存在:


1
从技术上讲,任何应用程序都可以使用DwmSetWindowAttribute方法将DWM非客户端渲染策略设置为禁用,然后基本主题会重新出现而不是玻璃效果。但是,据我所知,这并不会改变IsCompositionEnabled返回的内容,因为它是全局系统状态,而不是应用程序的状态。 - Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接