gpt4 book ai didi

c++ - 检查窗口是否在屏幕上可见的功能在 Windows 7 上不起作用

转载 作者:行者123 更新时间:2023-11-30 05:32:09 25 4
gpt4 key购买 nike

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

我目前正在使用此代码:

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 效果,但即使我禁用它,它仍然会发生。我得到了这个方法here在 StackOverflow 上并将其改编为 C++。

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

最佳答案

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

关于c++ - 检查窗口是否在屏幕上可见的功能在 Windows 7 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35240177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com