Определять, когда изменяется windows переднего плана

#winapi

#winapi

Вопрос:

Я знаю, с помощью GetForegroundWindow функции я могу получить дескриптор текущего активного окна, но сейчас i want to detect when the active window (of any application) changes (become active) . первое решение, которое приходит мне на ум, это

  1. сохраните текущее значение (дескриптор), возвращаемое функцией GetForegroundWindow.
  2. используя компонент таймера, проверьте еще раз значение, возвращаемое 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 Параметр укажет вам дескриптор окна.