Что такое 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.