Что такое WinEvents?

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

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

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

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

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

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

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

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

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

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