【问题标题】:Function to check if a window is visible on screen does not work on Windows 7检查屏幕上是否可见窗口的功能在 Windows 7 上不起作用
【发布时间】:2016-05-16 09:01:51
【问题描述】:

对于我的程序,我需要知道屏幕上是否至少可以看到窗口的一个像素。

我目前正在使用此代码:

BOOL isWindowVisible(HWND hwnd) {
    RECT r1;
    GetWindowRect(hwnd, &r1);
    HRGN x = CreateRectRgnIndirect(&r1);

    HWND s = GetTopWindow(0);

    do {
        if (IsWindowVisible(s)) {
            RECT r2;
            GetWindowRect(s, &r2);
            HRGN y = CreateRectRgnIndirect(&r2);

            int res = CombineRgn(x, x, y, RGN_DIFF);
            DeleteObject(y);
            if (res == NULLREGION) {
                DeleteObject(x);
                return FALSE;
            }
        }
    } while ((s = GetNextWindow(s, GW_HWNDNEXT)) && s != hwnd);

    DeleteObject(x);
    return TRUE;
}

这确实适用于 Windows 8.1 和 Windows 10,但不适用于 Windows 7。在 Windows 7 上,它每次都返回 FALSE

我认为这是因为 Aero 效果,但即使我禁用它,它仍然会发生。我在 StackOverflow 上得到了这个方法 here 并将其改编为 C++。

有人知道为什么会这样吗?

【问题讨论】:

    标签: c++ windows visual-c++ windows-7


    【解决方案1】:

    好的,我自己想出来的。它不检查 z 顺序顶部的窗口是否与要检查的窗口相同。如果窗口仍在顶部,则该函数将自身减去,然后返回FALSE。我不知道为什么这个错误只发生在 Windows 7 上,但至少现在已经修复了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      相关资源
      最近更新 更多