Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Detectar ALT-TAB antes de perder el foco (Win32)

Iniciado por senior wapo, 27 de Febrero de 2007, 09:08:31 PM

« anterior - próximo »

senior wapo

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.

Titonus

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/

senior wapo

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).






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.