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?
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. –