【发布时间】: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