Могу ли я использовать оконные хуки в C #, чтобы определить, получает ли окно фокус или теряет его? - PullRequest
1 голос
/ 08 октября 2010

Я написал приложение на 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 #) , что может означать, что я вообще не могу использовать ловушки для того, что мне нужно делать.

1 Ответ

1 голос
/ 08 октября 2010

Подробные инструкции по настройке хука из C # здесь: http://support.microsoft.com/kb/318804/en-us?fr=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...