如何判断我的窗口是否是当前活动窗口? 我目前的猜测是做GetForegroundWindow并将HWND与我的窗口进行比较。 有比这更好的方法吗?
我正在使用Win32 API / MFC。
答案 0 :(得分:11)
是的,这是我所知道的唯一方式。
但是你必须处理GFW可以返回NULL的事实。通常,当另一个桌面(例如屏幕保护程序桌面)处于活动状态时会发生这种情况。请注意,使用保护程序密码会影响是否使用其他桌面(这取决于Windows版本,我不记得不同版本的工作原理)。
此代码在Visual Studio下的调试模式下也无法正常工作,因为您将获得VS的窗口句柄。
除此之外一切都是桃子: - )
答案 1 :(得分:1)
是的,你是正确的,除非你想要检查每个线程的活动窗口。
答案 2 :(得分:1)
我假设您指的是当您说“活动窗口”时具有输入焦点的窗口?
在这种情况下,请忘记GetForegroundWindow()API。这将返回最顶层的窗口 - 并不总是具有输入焦点的窗口。
请改用GetFocus()。
答案 3 :(得分:1)
您可以尝试使用WM_ACTIVATEAPP消息
首先定义一个bool变量bool wActive = false
,在WndProc过程中,这是下一段代码:
case WM_ACTIVATEAPP:
wActive = (bool)wParam;
return 0;
您可以转到MSDN查找有关WM_ACTIVATEAPP
答案 4 :(得分:0)
是的,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;