Как определить активность окна в операционной системе

31.07.2025 | Категория: Двери и окна

Для определения активного окна в операционной системе используйте встроенные функции и API. Это позволяет отслеживать, какое окно в данный момент взаимодействует с пользователем, и выполнять нужные действия на его основе.

Использование Windows API

Функция GetForegroundWindow

Эта функция возвращает дескриптор окна, которое в данный момент находится на переднем плане и активно. Используйте ее в сочетании с функцией GetWindowText, чтобы получить название окна.


HWND hWnd = GetForegroundWindow(); // Получение активного окна
char windowTitle[256];
GetWindowText(hWnd, windowTitle, sizeof(windowTitle)); // Получение названия окна

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

Сравните полученный дескриптор с дескриптором вашего окна, чтобы удостовериться, что активное окно – именно ваше, или выполнить другие проверки по названию или классу.

Обработка событий переключения окон

Использование хуков

  • Установите глобальный хук SetWindowsHookEx с типом WH_CALLWNDPROCRET или WH_GETMESSAGE.
  • Обрабатывайте сообщения WM_ACTIVATE, WM_SETFOCUS, чтобы узнавать о смене активного окна.

Пример кода получения уведомлений


LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode >= 0) {
CWPSTRUCT* pCwp = (CWPSTRUCT*)lParam;
if (pCwp->message == WM_ACTIVATE || pCwp->message == WM_SETFOCUS) {
// Обработать изменение активности
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}

Рекомендации по использованию

Для получения точных данных о текущем активном окне регулярными интервалами вызывайте GetForegroundWindow. Для реагирования на смену активности внедрите хуки, чтобы не пропускать важные события. Проверяйте название или класс окна для фильтрации нужных элементов, особенно при создании автоматизированных сценариев или мониторинга.