首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待禁用aero完成

等待禁用aero完成
EN

Stack Overflow用户
提问于 2010-07-22 20:06:37
回答 3查看 1.1K关注 0票数 3

我的应用程序有一个选项,可以在捕获屏幕图像之前调用DwmEnableComposition(0)来禁用aero。正如你所知道的,禁用aero会使屏幕变黑,然后恢复正常。在不同的PC上,这可能需要2到3秒,具体取决于系统的速度。

有没有更好的方法来确定在截屏之前aero是否已经完全禁用而不是Thread.Sleep()?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-22 20:17:18

窗体的Paint事件将运行。这并不意味着所有的窗口都会被完全粉刷,但你可以少睡一会儿。通过覆盖WndProc()来侦听通知消息可能会起作用,但不能确定通知消息的发送时间。WM_DWMCOMPOSITIONCHANGED是消息0x31e。我怀疑它会发送得太快,所有的窗口都可能不得不重新粉刷自己。确保这一点的唯一方法是使用EnumWindows枚举窗口并调用UpdateWindow。访问pinvoke.net获取您需要的P/Invoke声明。Sleep()也会起作用,但无法猜测保证在任何地方都能起作用的数量。

票数 1
EN

Stack Overflow用户

发布于 2010-07-22 20:13:05

您应该可以使用相关的接口函数DwmIsCompositionEnabled来完成此操作。另一种选择可能是侦听WM_DWMCOMPOSITIONCHANGED事件。

票数 2
EN

Stack Overflow用户

发布于 2010-07-22 20:15:07

你调查过DwmIsCompositionEnabled吗?该页面还表示,应用程序可以通过处理WM_DWMCOMPOSITIONCHANGED通知来监听组合状态的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3308614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档