В Delphi XE я пытаюсь использовать GetForegroundWindow, чтобы обнаружить окно, которое было активным непосредственно перед активацией моего приложения. «Активировано» означает, что приложение, возможно, было восстановлено из пиктограммы, или оно было переключено на вкладку alt +, или вызвано горячей клавишей активации и т. Д.
Проблема в том, что все доступные события приложения (OnActivate, OnRestore) приходят слишком поздно, поэтому GetForegroundWindow возвращает дескриптор моей собственной формы. События главной формы еще менее полезны. Обработка WM_ACTIVATEAPP в основной форме тоже происходит слишком поздно.
Один из способов - продолжать проверять активное окно по таймеру, пока мое приложение не активно, но это кажется довольно расточительным. Гораздо лучшим решением было бы создание подкласса TApplication.WndProc и выполнение моей работы до обработки WM_ACTIVATEAPP, но я не думаю, что TApplication можно разделить на подклассы.
Есть ли лучший способ?