ShowWindow()SW_HIDE窗口瞬间,没有效果

时间:2016-02-28 18:48:18

标签: c++ winapi

在我的C ++应用程序中,我有以下代码:

ShowWindow(hDlg, SW_HIDE);
MakeScreenshot();
ShowWindow(hDlg, SW_SHOW);

这应该捕获屏幕截图,不包括当前应用程序窗口。但是有一个问题。 SW_HIDE需要一些时间,因为我的Windows 8.1配置为使用动画效果。因此隐藏窗口大约需要400毫秒,如果在此间隔期间捕获屏幕截图(它是),它还将包含应用程序本身的窗口,这是我不喜欢的。

有没有办法立即隐藏当前窗口,所以它不会被包含在创建截屏函数中,后面会立即调用它?如果没有,除了应用程序本身之外,还有其他任何首选方法如何截取Windows桌面的屏幕截图吗?在MakeScreenshot之前添加延迟不是任何好的解决方案。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用MoveWindow(或SetWindowsPos)将不需要的窗口移动到虚拟桌面的可见区域之外,然后将其移回。

您可能需要枚举监视器以找到超出所有监视器范围的坐标,这将是一些工作。据推测,您的截图代码是计算快照的坐标,因此您可以重新使用该计算来找到一个安全的窗口停放位置。

答案 1 :(得分:0)

对我有用的是什么:

    this->ModifyStyleEx(0, WS_EX_LAYERED | WS_EX_TOPMOST); //just a backup


    COLORREF c;
    BYTE b;
    DWORD flags;
    this->GetLayeredWindowAttributes(&c, &b, &flags); //just a backup

    this->SetLayeredWindowAttributes(0, 0, LWA_ALPHA);


    //CODE TO TAKE A SCREENSHOT


    this->SetLayeredWindowAttributes(c, b, flags); //just a restore

    this->ModifyStyleEx(WS_EX_LAYERED | WS_EX_TOPMOST, 0); //just a restore