Определить, какое окно было активным непосредственно перед активацией моего приложения

В Delphi XE я пытаюсь использовать GetForegroundWindow для обнаружения окна, которое было активным непосредственно перед тем, как мое приложение было активировано. «Активировано» означает, что приложение могло быть восстановлено из иконического состояния, или оно было переключено с помощью alt + tab, или вызвано горячей клавишей активации и т. Д.

Проблема в том, что все доступные события приложения (OnActivate, OnRestore) приходят слишком поздно, поэтому GetForegroundWindow возвращает дескриптор моей собственной формы. События главной формы еще менее полезны. Обработка WM_ACTIVATEAPP в основной форме тоже происходит слишком поздно.

Один из способов - продолжать проверять активное окно по таймеру, пока мое приложение не активно, но это кажется довольно расточительным. Гораздо лучшим решением было бы создать подкласс TApplication.WndProc и сделать свое дело до обработки WM_ACTIVATEAPP, но я не думаю, что TApplication можно разделить на подклассы.

Есть ли способ лучше?

5
задан tshepang 15 September 2014 в 19:53
поделиться