2011-01-26 15 views
5

En Delphi XE, intento usar GetForegroundWindow para detectar la ventana que estaba activa inmediatamente antes de que se activara mi aplicación. "Activado" significa que la aplicación puede haberse restaurado desde un estado icónico, o se cambió a través de alt + tabulación, o se activó mediante una tecla de acceso directo, etc.Detectar qué ventana estaba activa justo antes de que mi aplicación se active

El problema es que todos los eventos de aplicación disponibles (OnActivate, OnRestore) llegan demasiado tarde, de modo que GetForegroundWindow devuelve el identificador de mi propio formulario. Los eventos de la forma principal son aún menos útiles. Procesar WM_ACTIVATEAPP en el formulario principal pasa demasiado tarde también.

Una forma sería seguir comprobando la ventana activa en el temporizador mientras mi aplicación no está activa, pero esto parece un desperdicio. Una solución mucho mejor sería subclasificar TApplication.WndProc y hacer lo propio antes de procesar WM_ACTIVATEAPP, pero no creo que TApplication pueda ser subclasificada.

¿Hay una manera mejor?

+4

que puede manejar cualquier mensaje que recibe TApplication.WndProc' '' Application.HookMainWindow' llamando. Los procedimientos de enlace se llaman antes de que 'TApplication' haga su propio procesamiento. Sin embargo, no tengo idea de si 'wm_ActivateApp' te dirá de manera confiable si crees que debes saberlo. –

Respuesta

5

Cuando se activa su aplicación, se convierte en la ventana superior. IOW, salta a la posición superior de orden Z.

Con esto, la ventana superior anterior se degrada a la posición "justo debajo de la nueva ventana superior". IOW, se convierte en el segundo en la posición de orden Z.

Llamando GetNextWindow y pasando el control de su formulario y GW_HWNDNEXT puede darle el resultado que necesita.

0

Todas las ventanas tienen un orden z, que es un número que Windows usa para determinar qué ventana debe pintarse encima de la cual.

Cuando activa un programa, su aplicación se coloca en la parte superior de la lista z.

Al presionar alt-tab, Windows recorre esa lista. Así que presione alt-tab y manténgala presionada, para ver cómo se ordenan las cosas.

mira esto para ver cómo simular alt-tab: http://www.swissdelphicenter.ch/torry/showcode.php?id=2103

Cuestiones relacionadas