客户端的 UI 自动化事件

注意注意

本文档的目标读者是欲使用 System.Windows.Automation 命名空间中定义的托管 UI Automation类的 .NET Framework 开发人员。有关 UI Automation的最新信息,请参见 Windows Automation API: UI Automation(Windows 自动化 API:UI 自动化)。

本主题介绍 UI 自动化客户端如何使用 Microsoft UI Automation事件。

UI Automation允许客户端订阅关注的事件。 有了此功能,将不再需要频繁地轮询系统中的所有 UI 元素来确定是否更改了任何信息、结构或状态,从而提高了性能。

由于能够只侦听定义范围内的事件,因此效率也得到了提高。 例如,客户端可以在树中的所有 UI Automation元素上侦听焦点更改事件,也可以只在一个元素及其子代上侦听。

注意注意

不要假定所有可能的事件都是由 Microsoft UI Automation提供程序引发的。例如,并非所有属性更改都会导致 Windows Forms 和 Win32 控件的标准代理提供程序引发事件。

要从更广泛的角度查看 UI Automation事件,请参见 UI 自动化事件概述

本主题包括下列各节。

  • 订阅事件
  • 相关主题

订阅事件

客户端应用程序通过使用以下方法之一注册事件处理程序,从而订阅特定种类的事件。

方法

事件类型

事件参数类型

委托类型

AddAutomationFocusChangedEventHandler

焦点更改

AutomationFocusChangedEventArgs

AutomationFocusChangedEventHandler

AddAutomationPropertyChangedEventHandler

属性更改

AutomationPropertyChangedEventArgs

AutomationPropertyChangedEventHandler

AddStructureChangedEventHandler

结构更改

StructureChangedEventArgs

StructureChangedEventHandler

AddAutomationEventHandler

所有其他事件(由 AutomationEvent 标识)

AutomationEventArgsWindowClosedEventArgs

AutomationEventHandler

在调用方法之前,必须创建一个委托方法来处理事件。 如果愿意,您可以在单一方法中处理不同种类的事件,并在多个调用中将此方法传递到表中的某个方法。 例如,可以将单一 AutomationEventHandler 设置为依据 EventId 以不同的方式处理各种事件。

注意注意

若要处理 window-closed 事件,请将传递到事件处理程序的参数类型转换为 WindowClosedEventArgs。由于窗口的 Microsoft UI Automation元素不再有效,因此您无法使用 sender 参数来检索信息;请改用 GetRuntimeId

警告说明警告

如果应用程序可能从自己的 UI 中接收事件,请不要使用应用程序的 UI 线程来订阅或取消订阅事件。这样做可能会导致不可预知的行为。有关更多信息,请参见 UI 自动化线程处理问题

在关机时,或者当应用程序不再关注 UI Automation事件时,UI 自动化客户端应调用以下方法之一。

方法

说明

RemoveAutomationEventHandler

通过使用 AddAutomationEventHandler 取消注册已注册的事件处理程序。

RemoveAutomationFocusChangedEventHandler

通过使用 AddAutomationFocusChangedEventHandler 取消注册已注册的事件处理程序。

RemoveAutomationPropertyChangedEventHandler

通过使用 AddAutomationPropertyChangedEventHandler 取消注册已注册的事件处理程序。

RemoveAllEventHandlers

取消注册所有已注册的事件处理程序。

有关代码示例,请参见订阅 UI 自动化事件

请参见

任务

订阅 UI 自动化事件

TrackFocus Sample

概念

UI 自动化事件概述

UI 自动化属性概述