.NET / Win32 - событие для определения, когда окно, принадлежащее другому приложению, получает фокус

У меня есть приложение .NET, которое должно уметь определять, когда конкретное окно получает и теряет фокус. Конкретное окно, которое меня интересует, принадлежит другому приложению, которое я не контролирую, хотя у меня есть дескриптор окна.

Я действительно ищу лучший способ решить эту проблему. Пока что я вижу 2 возможности:

  1. Использование вызова Win32 по таймеру для отслеживания любых изменений состояния. Не очень хорошо, так как есть риск пропустить изменения состояния, например. если окно становится активным, то неактивным в течение интервала таймера
  2. Использование хуков (SetWindowsHookEx) для перехвата сообщений в окно. Похоже, это должно работать, но обеспокоены тем, что а) хуки глобального уровня не будут работать из кода .NET, поэтому они должны быть родными и б) может ли это считаться активностью типа вируса / кейлоггера, заблокированной ОС?

Я уверен, что есть и другие варианты, если так, я бы хотел их услышать!

6
задан Paul Nearney 22 August 2011 в 17:02
поделиться