2011-05-03 15 views
6

Sé que usando la función GetForegroundWindow puedo obtener el manejador de ventana activo actual, pero ahora i want to detect when the active window (of any application) changes (become active). la primera solución que me viene a la mente esDetecta cuando la ventana de primer plano cambia

  1. almacenar el valor actual (identificador) devuelto por la función GetForegroundWindow.
  2. utilizando un componente de temporizador compruebe de nuevo el valor devuelto por GetForegroundWindow y compare con el valor anterior.

Me pregunto si existe una mejor manera de hacer esto tal vez usando un mensaje de Windows u otra cosa.

+0

Recuerdo que había un truco para escuchar la cola de mensajes para una ventana en Windows 3.x, no estoy seguro de si ese truco aún funciona en Win32 – Johan

+2

Espero que no estés tratando de asegurarte de que tu ventana esté siempre en la parte superior de cada otra ventana. http://blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx –

+0

@Jim no se preocupe, no estoy haciendo eso. – Salvador

Respuesta

7

Utilice SetWindowsHookEx para instalar un gancho CBT. MSDN describe el callback function usted proveerá:

El sistema llama a esta función antes de activar, crear, destruir, minimizar, maximizar, mover o dimensionamiento de una ventana; antes de completar un comando del sistema; antes de eliminar un evento de mouse o teclado de la cola de mensajes del sistema; antes de configurar el foco del teclado; o antes de sincronizar con la cola de mensajes del sistema. Una aplicación de capacitación basada en computadora (CBT) utiliza este procedimiento de enlace para recibir notificaciones útiles del sistema.

Las llamadas que le interesan son aquellas en las que el primer parámetro es HCBT_Activate. El parámetro wParam le dirá el identificador de ventana.

Cuestiones relacionadas