#winapi
#winapi
Вопрос:
Я знаю, с помощью GetForegroundWindow
функции я могу получить дескриптор текущего активного окна, но сейчас i want to detect when the active window (of any application) changes (become active)
. первое решение, которое приходит мне на ум, это
- сохраните текущее значение (дескриптор), возвращаемое функцией GetForegroundWindow.
- используя компонент таймера, проверьте еще раз значение, возвращаемое GetForegroundWindow, и сравните со старым значением.
Мне интересно, существует ли лучший способ сделать это, возможно, используя сообщение Windows или что-то еще.
Комментарии:
1. Я помню, что был трюк для прослушивания очереди сообщений для окна в Windows 3.x, не уверен, что этот трюк все еще работает в Win32
2. Я надеюсь, вы не пытаетесь убедиться, что ваше окно всегда находится поверх любого другого окна. blogs.msdn.com/b/oldnewthing/archive/2011/03/10/10138969.aspx
3. @Jim не волнуйся, я этого не делаю.
Ответ №1:
Используется SetWindowsHookEx
для установки перехвата CBT. MSDN описывает функцию обратного вызова, которую вы предоставите:
Система вызывает эту функцию перед активацией, созданием, уничтожением, минимизацией, разворачиванием, перемещением или изменением размера окна; перед выполнением системной команды; перед удалением события мыши или клавиатуры из очереди системных сообщений; перед установкой фокуса клавиатуры; или перед синхронизацией с очередью системных сообщений. Приложение для компьютерного обучения (CBT) использует эту процедуру перехвата для получения полезных уведомлений от системы.
Вас заинтересуют вызовы, в которых первым параметром является HCBT_Activate
. wParam
Параметр укажет вам дескриптор окна.