【发布时间】:2016-02-28 18:48:17
【问题描述】:
在我的 C++ 应用程序中,我有以下代码:
ShowWindow(hDlg, SW_HIDE);
MakeScreenshot();
ShowWindow(hDlg, SW_SHOW);
这应该在没有当前应用程序窗口的情况下捕获屏幕截图。然而有一个问题。 SW_HIDE 需要一些时间,因为我的 windows 8.1 配置为使用动画效果。所以窗口的隐藏大约需要 400 毫秒,如果在这个时间间隔内(确实如此)捕获了屏幕截图,它还将包含应用程序本身的窗口,我不喜欢。
有什么办法可以立即隐藏当前窗口,使其不包含在紧随其后调用的create screenshot函数中?如果没有,是否有任何其他首选方式如何截取 Windows 桌面的屏幕截图,不包括应用程序本身?在 MakeScreenshot 之前添加延迟不是任何好的解决方案。谢谢。
【问题讨论】:
-
@HansPassant:你在想
DWMWA_CLOAK属性吗? -
@Tomas:尝试使用
SystemParametersInfo()在隐藏窗口之前禁用动画,并在显示窗口后重新启用动画。或者在窗口上启用WS_EX_LAYERED样式,然后将其不透明度设置为0,然后再设置回255。或者,只需将窗口移出屏幕,然后再将其移回。 -
使用 DWMWA_TRANSITIONS_FORCEDISABLED 禁用帧动画。另一种非常体面的方法是使用 WS_EX_LAYERED + SetLayeredWindowAttributes() 使窗口立即变得透明和不透明。
-
我从来不知道
SW_HIDE会触发动画。显示我知道多少!