我怎么知道一个窗口是否有焦点? (Win32 API)

使用Win32 API(在C中,但这是无关紧要的)我怎么知道一个给定的窗口(由HWND标识)是否有焦点? 我挂钩一个应用程序监视一个事件,当这个事件发生时,我想检查应用程序是否已经有焦点。 如果没有,我想闪动窗口,直到他们注意到它。

或者,FlashWindowEx结构标志FLASHW_TIMERNOFG闪烁,直到窗口焦点不闪,如果窗口已经有焦点? 我现在不能testing,因为我不在我的开发环境中,但是我的印象是它会闪烁,这正是我想要避免的。

编辑:此外,如果它很重要,应用程序在此窗口中使用DirectX。

Solutions Collecting From Web of "我怎么知道一个窗口是否有焦点? (Win32 API)"

GetActiveWindow将返回与输入焦点关联的顶级窗口。 GetFocus将返回具有输入焦点的窗口的句柄。

本文可能有所帮助:
http://www.microsoft.com/msj/0397/Win32/Win320397.aspx

除了gkrogers使用GetActiveWindow回答,还可以通过捕获WM_SETFOCUSWM_KILLFOCUS事件或者WM_ACTIVATE来维护一个你想知道的窗口的布尔变量是否有焦点

 WndProc() .. case WM_SETFOCUS: puts( "Got the focus" ) ; break ; case WM_KILLFOCUS: puts( "Lost the focus" ) ; break; case WM_ACTIVATE: if( LOWORD(wparam) == WA_ACTIVE ) puts( "MEGAZORD ACTIVATED kew kew kew (flashy-eyes)" ) ; else puts( "I AM NOW INACTIVE." ) ; break ; 

你的意思是“专注”还是“积极”?

一个窗口的焦点 – 第一个获得键盘事件的窗口。 如果其中一个子窗口具有焦点,则外部窗口(用户可以在屏幕上拖动)是“活动的”,但是它本身可能有或没有焦点。

使用GetForegroundWindow函数获取您正在关注的Hwnd。 那么你只需要将它与应用程序的窗口进行比较来检查它是否包含焦点。