Necesito detectar la pulsación de ALT-TAB en windows. No necesito bloquearlo, solo detectarlo y ejecutar una rutina antes de perder el foco de la aplicación.
Cosas que he probado:
1. SetWindowsHookEx con WH_KEYBOARD_LL: no me permite interceptar directamente sin usar una DLL externa.
2. Mensaje WM_ACTIVATEAPP: no me vale porque cuando pulsas ALT-TAB aparece la lista de tareas pero la aplicación no pierde el foco hasta que soltamos ALT-TAB (y siempre que la selección sea otra ventana).
Gracias.
El problema es que Windows siempre se te va adelantar a detectar ALT-TAB por el proceso task-switching (ALT-TAB) que consume de forma preferente/prioritaria los mensajes que provoca ALT-TAB, y para poder comprobarlo/usarlo deberías desactivar dicho proceso temporalmente.
En Windows 95/98 es más facil que en 2000/XP. Vamos lo que tu comentas en 1 tendrás que hacer prácticamente.
Se documenta el problema y la solución en este enlace:
http://msdn.microsoft.com/msdnmag/issues/02/09/CQA/
Gracias por el mensaje.
Aunque se supone que no se puede sin usar DLLs externas, he descubierto una cosa.
En mi Windows XP (sin SP) coincide que al pulsar ALT-TAB primero envía a la aplicación un mensaje WM_CANCELMODE y a continuación salta la lista de tareas.
Lo que hago es procesar el mensaje WM_CANCELMODE y detectar si estan pulsadas ALT y TAB con GetAsyncKeyState().
Lo he descubierto por pura casualidad volcando a un log todos los mensajes que recibo y probando cosas.
El problema es que no parece muy fiable. No se si dicho comportamiento se da en todos los XPs, y si va en windows 2000 o NT.
Lo que si he comprobado es que no funciona en win9X (aunque en 9x puedo usar el truco ya documentado del salvapantallas).