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


Подписка на события автоматизации пользовательского интерфейса

Служба автоматизации пользовательского интерфейса Майкрософт позволяет клиентам подписываться на интересующие события. Эта возможность повышает производительность, устраняя необходимость постоянного опроса элементов пользовательского интерфейса в системе, чтобы узнать, изменилась ли какая-либо информация, структура или состояние.

Эффективность также улучшается благодаря возможности прослушивания событий только в определенной области. Например, клиент может прослушивать изменения выбора элемента в списке, в самом списке или в целом диалоговом окне.

Заметка

Не предполагайте, что все возможные события создаются поставщиком автоматизации пользовательского интерфейса. Например, не все изменения свойств становятся причиной возникновения событий, создаваемых стандартными поставщиками прокси для элементов управления Windows Forms и Microsoft Win32.

 

Более широкое представление событий автоматизации пользовательского интерфейса см. в обзоре событий автоматизации пользовательского интерфейса.

Заметка

Перед реализацией обработчика событий необходимо ознакомиться с проблемами потоков, описанными в разделе Основные сведения о проблемах потоков.

 

В этом разделе содержатся следующие разделы.

Регистрация обработчиков событий

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

Метод подписки Тип события Интерфейс обратного вызова
AddFocusChangedEventHandler Изменение фокуса IUIAutomationFocusChangedEventHandler
AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray Изменение свойства IUIAutomationPropertyChangedEventHandler
AddStructureChangedEventHandler Изменение структуры IUIAutomationStructureChangedEventHandler
AddNotificationEventHandler Уведомление IUIAutomationNotificationEventHandler
AddAutomationEventHandler Другие события IUIAutomationEventHandler

 

При добавлении обработчика событий для всех потомков (TreeScope_Descendants), автоматизация пользовательского интерфейса добавляет только один обработчик для корня поддерева, и этот обработчик прослушивает всех потомков. Автоматизация пользовательского интерфейса не добавляет обработчики событий рекурсивно.

Когда клиент вызывает метод IUIAutomation::RemoveAllEventHandlers, служба автоматизации пользовательского интерфейса удаляет все обработчики событий из клиентского процесса.

Для получения и обработки событий реализуется объект обработки событий, предоставляющий интерфейс обратного вызова, и необходимо зарегистрировать объект, вызвав метод регистрации событий, например IUIAutomation::AddPropertyChangedEventHandler. Интерфейс обратного вызова имеет один метод; Служба автоматизации пользовательского интерфейса вызывает этот метод при обработке события.

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

Заметка

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

 

Метод Описание
RemoveAutomationEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddAutomationEventHandler.
RemoveFocusChangedEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddFocusChangedEventHandler.
RemovePropertyChangedEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddPropertyChangedEventHandler или AddPropertyChangedEventHandlerNativeArray.
RemoveStructureChangedEventHandler Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddStructureChangedEventHandler.
УдалитьОбработчикСобытияУведомления Отменяет регистрацию обработчика событий, зарегистрированного с помощью AddNotificationEventHandler.
УдалитьВсеОбработчикиСобытий Отменяет регистрацию всех зарегистрированных обработчиков событий.

 

Событие может быть доставлено в обработчик событий после отмены подписки обработчика, если событие получено одновременно с запросом на отмену подписки. Рекомендуется следовать стандарту модели объектов компонента (COM) и не уничтожать объект обработчика событий до тех пор, пока его число ссылок не достигнет нуля. Удаление обработчика событий сразу после отмены подписки на события может привести к нарушению доступа, если событие доставлено поздно.

Примеры

Примеры кода, демонстрирующие обработку событий автоматизации пользовательского интерфейса, см. в разделе Реализации обработчиков событий.

концептуальные

Обзор событий автоматизации пользовательского интерфейса

Понимание проблем потоковой обработки