In Delphi XE, sto cercando di utilizzare GetForegroundWindow per rilevare la finestra che era attiva immediatamente prima che la mia applicazione fosse attivata. "Attivato" significa che l'app potrebbe essere stata ripristinata da uno stato iconico, oppure è stata attivata tramite alt + tab o attivata da hotkey activaton, ecc.Rileva quale finestra era attiva poco prima che la mia app si attivasse
Il problema è che tutti gli eventi dell'applicazione disponibili (OnActivate, OnRestore) arrivato troppo tardi, in modo che GetForegroundWindow restituisca l'handle del mio stesso modulo. Gli eventi della forma principale sono ancora meno utili. Anche l'elaborazione di WM_ACTIVATEAPP nella forma principale avviene troppo tardi.
Un modo sarebbe quello di continuare a controllare la finestra attiva sul timer mentre la mia applicazione non è attiva, ma questo sembra piuttosto dispendioso. Una soluzione molto migliore sarebbe quella di sottoclasse TApplication.WndProc e fare le mie cose prima che WM_ACTIVATEAPP sia elaborato, ma non penso che TApplication possa essere sottoclasse.
C'è un modo migliore?
è possibile gestire qualsiasi messaggio che 'TApplication.WndProc' riceve chiamando' Application.HookMainWindow'. Le procedure di hook vengono richiamate prima che 'TApplication' esegua la propria elaborazione. Non ho idea se 'wm_ActivateApp' ti dirà in modo affidabile che tu pensi che tu debba sapere, comunque. –