windows winapi hwnd

windows - ¿Cómo puedo saber si una ventana tiene foco?(Win32 API)



winapi hwnd (4)

¿Realmente quieres decir "enfoque" o quieres decir "activo"?

Una ventana tiene el foco, la que está primero en la fila para obtener eventos de teclado. La ventana externa (que el usuario puede arrastrar por la pantalla) está "activa" si una de sus subventanas tiene el foco, pero puede o no tener el foco.

Usando la API Win32 (en C, pero eso no tiene importancia) ¿cómo puedo saber si una ventana dada (identificada por HWND) tiene foco? Estoy conectando una aplicación viendo un evento, y cuando ocurre ese evento, quiero verificar si la aplicación ya tiene foco. Si no es así, quiero mostrar la ventana hasta que le den el foco.

Alternativamente, ¿la bandera de estructura de FlashWindowEx FLASHW_TIMERNOFG parpadea hasta que la ventana tiene el foco simplemente no parpadea si la ventana ya tiene foco? No puedo probar esto ahora ya que no estoy en mi entorno de desarrollo, pero tenía la impresión de que parpadearía de todos modos, que es lo que estoy tratando de evitar.

Editar: Además, si es importante, la aplicación usa DirectX en esta ventana.



Además de gkrogers responder usando GetActiveWindow, también puede mantener una variable booleana para la ventana que desea saber si tiene foco o no atrapando los eventos WM_SETFOCUS y WM_KILLFOCUS , o 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 ;


Use la función GetForegroundWindow para obtener el Hwnd que está enfocando en este momento. Entonces solo necesita compararlo con la ventana de su aplicación para verificar si contiene foco o no.