Поделиться через


Что такое WinEvents?

Серверные приложения и операционная система используют WinEvents для уведомления клиентов об изменении в системе или пользовательском интерфейсе.

Поддержка WinEvent — это функция операционной системы Windows, которая предоставляет следующие возможности:

  • Простой способ регистрации уведомлений о событиях клиентами.
  • Механизм внедрения клиентского кода на серверы.
  • Маршрутизация событий с серверов на заинтересованных клиентов.
  • Автоматическое создание событий для большинства элементов управления на основе HWND.

Создание событий для элементов управления на основе HWNDособенно важно для разработчиков серверов. Среда выполнения Microsoft Active Accessibility предоставляет прокси IAccessible для всех стандартных элементов пользовательского интерфейса. Аналогичным образом, система автоматически создает соответствующие элементы WinEvents всякий раз, когда она создает, уничтожает, перемещает, изменяет размер или выполняет другие действия с элементом управления на основе HWND.

Некоторые события WinEvents, включая общие события HWND, автоматически поддерживаются системой. Другие типы WinEvents, такие как изменения состояния или события выбора, относящиеся к определенному элементу управления, поддерживаются серверами Microsoft Active Accessibility.

При возникновении события, влияющего на пользовательский интерфейс, серверы могут передавать уведомление о событии всем заинтересованным клиентам, вызвав функцию NotifyWinEvent. Вызов функции содержит сведения, определяющие тип события, которое произошло, и элемент пользовательского интерфейса, к которому применяется событие. Клиенты могут использовать эту информацию для извлечения объекта IAccessible для элемента интерфейса и получения дополнительной информации.

Например, чтобы уведомить клиентов об изменении имени элемента управления, сервер вызывает NotifyWinEvent и передает EVENT_OBJECT_NAMECHANGE в параметре события. Система отвечает тем, что определяет, какие клиенты зарегистрировались для получения этого конкретного события, и вызывает их зарегистрированную функцию обратного вызова. Если для события нет клиентов, вызов сервера к NotifyWinEvent сравним с "пустой операцией", и влияние на производительность незначительное.

Серверы вызывают NotifyWinEvent, чтобы сообщить о событии системе после возникновения события. Они никогда не должны уведомлять систему события до возникновения события.

Чтобы получать уведомления о событиях, клиенты регистрируют функции обратного вызова-перехватчика, используя SetWinEventHook. Клиенты устанавливают одну функцию перехватчика для всех возможных событий или нескольких функций перехватчика для дискретных диапазонов событий. Дополнительные сведения см. в разделе Регистрация функции перехватчика.

Когда Microsoft Active Accessibility уведомляется о событии, вызываются все функции перехватчика, зарегистрированные для этого события, передавая параметры из NotifyWinEvent.