如何判断我的窗口是否是当前活动窗口? 我的猜测是使用 GetForegroundWindow 并将其返回的 HWND 与我的窗口进行比较。 除此之外,还有更好的方法吗?
我正在使用 Win32 API / MFC。
是的,这是我知道的唯一方法。
但你必须处理GFW可能会返回空值的情况。通常情况下,这种情况发生在另一个桌面(例如屏幕保护程序桌面)处于活动状态时。注意使用屏幕保护密码可能会影响是否使用不同的桌面(这取决于Windows版本,我记不清楚各个版本的细节了)。
此外,在Visual Studio的调试模式下,此代码将无法正常工作,因为你会得到VS的窗口句柄。
除此以外,一切都很棒 :-)
bool wActive = false
, 在WndProc过程中,下面是接下来的代码片段:case WM_ACTIVATEAPP:
wActive = (bool)wParam;
return 0;
WM_ACTIVATEAPP
的更多信息。是的,除非您想要检查每个线程的活动窗口,否则您是正确的。
我猜你所说的“活动窗口”是指当前拥有输入焦点的窗口?
如果是这样,那么忘记GetForegroundWindow() API吧。它会返回最顶层的窗口,而不一定是当前拥有输入焦点的窗口。
可以使用GetFocus()代替。
是的,GetForgroundWindow() 是一个很好的检查方式,即使是 "始终在顶部" 的窗口 HWND_TOPMOST 也能正确地处理。
另一种方法是使用 GetActiveWindow()
HWND temp = GetActiveWindow();
if (temp == hWnd) // Then your current window has focus
或者以下信息报告焦点是否已更改
case WM_KILLFOCUS:
// windowHasFocus = false
break;
case WM_SETFOCUS:
// windowHasFocus = true;
break;