Я написал приложение на c #, которое автоматизирует экземпляр IE. Я хотел бы знать, когда Internet Explorer получает фокус и когда он теряет фокус.
Из объекта SHDocVw.InternetExplorer я могу получить его HWND. Оттуда, как я могу создать перехват сообщений для получения событий WM_KILLFOCUS и WM_FOCUS (при условии, что это правильные события для прослушивания:))?
Спасибо всем !!
ОБНОВЛЕНИЕ: я нашел способ, которым я мог бы использовать для достижения вышеуказанной цели, не используя хуков (которые я пока не совсем понял, как это сделать в c #), используя .NET Framework в этом вопросе .
Проблема с этим кодом
AutomationFocusChangedEventHandler focusHandler
= new AutomationFocusChangedEventHandler(OnFocusChanged);
Automation.AddAutomationFocusChangedEventHandler(focusHandler);
означает, что окну легко быть окном переднего плана, и это событие не будет срабатывать при переключении на это окно, поскольку оно ожидает, когда конкретный элемент пользовательского интерфейса будет в фокусе. (Чтобы проверить это, вы можете использовать функцию, которая использует этот код и печатает сообщение каждый раз, когда фокусируется новое окно, например образец TrackFocus MSDN, а затем нажимает на веб-браузер. Когда большинство веб-страниц или пустая страница отображаются в в браузере событие не будет запускаться до тех пор, пока не будет выбрана адресная строка или какой-либо другой элемент.) Вероятно, это может сработать, если есть способ изменить его так, чтобы он мог генерировать событие, если в фокусе нет элемента пользовательского интерфейса или каждый раз, когда элемент теряется фокус (вместо того, чтобы быть брошенным, когда он становится сфокусированным). У кого-нибудь есть идеи о том, как я могу исправить приведенный выше код, чтобы решить мою проблему?
Обновление 2: я только что натолкнулся на это (статья утверждает, что вы можете подключить мышь и клавиатуру только с c #) , что может означать, что я вообще не могу использовать ловушки для того, что мне нужно делать.