ShowWindow() 立即SW_HIDE窗口,没有效果

ShowWindow() SW_HIDE window instantly, without effect

本文关键字:窗口 有效果 HIDE 立即 SW ShowWindow      更新时间:2023-10-16

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

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

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

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

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

您可能需要枚举监视器以查找超出所有监视器范围的坐标,这将需要一些工作。 据推测,您的屏幕截图代码正在计算要快照的坐标,因此您可以重复使用该计算来找到一个安全的地方来停放窗户。

什么对我有用:

    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