注释
本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化。
UI 自动化提供程序使控件能够与 UI 自动化客户端应用程序通信。 通常,用户界面(UI)中的每个控件或其他不同元素都由提供程序表示。 提供程序公开有关元素的信息,并选择性地实现控件模式,使客户端应用程序能够与控件交互。
客户端应用程序通常不需要直接与提供程序进行互动。 使用 Win32、Windows 窗体或 Windows Presentation Foundation(WPF)框架的应用程序中的大多数标准控件会自动公开给 UI 自动化系统。 实现自定义控件的应用程序还可以为这些控件实现 UI 自动化提供程序,客户端应用程序无需采取任何特殊步骤即可访问它们。
本主题概述控件开发人员如何实现 UI 自动化提供程序,特别是 Windows 窗体和 Win32 窗口中的控件。
服务提供者类型
UI 自动化提供程序分为两类:客户端提供程序和服务器端提供程序。
客户端提供商
客户端提供程序由 UI 自动化客户端实现,以与不支持或不完全支持 UI 自动化的应用程序通信。 客户端提供程序通常通过发送和接收 Windows 消息来跨进程边界与服务器通信。
由于 Win32、Windows 窗体或 WPF 应用程序中的控件的 UI 自动化提供程序作为作系统的一部分提供,因此客户端应用程序很少必须实现自己的提供程序,并且此概述不会进一步介绍它们。
服务器端提供者
服务器端提供程序由自定义控件或基于 Win32、Windows 窗体或 WPF 以外的 UI 框架的应用程序实现。
服务器端提供程序通过向 UI 自动化核心系统公开接口,从而跨进程边界与客户端应用程序通信,而 UI 自动化核心系统又为来自客户端的请求提供服务。
UI 自动化提供程序概念
本部分简要介绍了为了实现 UI 自动化提供程序而需要理解的一些关键概念。
元素
UI 自动化元素是 UI 自动化客户端可见的用户界面(UI)片段。 示例包括应用程序窗口、窗格、按钮、工具提示、列表框和列表项。
导航
UI 自动化元素作为 UI 自动化树向客户端公开。 UI 自动化通过从一个元素导航到另一个元素来构造树。 提供程序为每个元素启用导航,每个导航可能指向一个父级、同级和子级元素。
有关 UI 自动化树的客户端视图的详细信息,请参阅 UI 自动化树概述。
浏览量
客户端可以在三个主要视图中查看 UI 自动化树,如下表所示。
查看 | DESCRIPTION |
---|---|
原始视图 | 包含所有元素。 |
控件视图 | 包含控件元素。 |
内容视图 | 包含具有内容的元素。 |
有关 UI 自动化树的客户端视图的详细信息,请参阅 UI 自动化树概述。
提供程序实现负责将元素定义为内容元素或控件元素。 控件元素可以是内容元素,也可能不是内容元素,但所有内容元素都是控件元素。
框架
框架是一个组件,用于管理屏幕某一区域中的子控件、命中测试和呈现方式。 例如,Win32 窗口(通常称为 HWND)可用作包含多个 UI 自动化元素的框架,例如菜单栏、状态栏和按钮。
Win32 容器控件(如列表框和树视图)被视为框架,因为它们包含自己的代码来呈现子项并对其执行命中测试。 相比之下,WPF 列表框并不是框架,因为渲染和命中测试由其所在的 WPF 窗口处理。
应用程序中的 UI 可以由不同的框架组成。 例如,HWND 应用程序窗口可能包含动态 HTML(DHTML),后者又包含 HWND 中的组合框等组件。
碎片
片段是特定框架中元素的完整子树。 子树根节点的元素称为片段根。 片段根没有父级,而是承载在其他框架中,通常是 Win32 窗口 (HWND) 中。
主机
每个片段的根节点必须托管在元素中,通常是 Win32 窗口(HWND)。 例外情况是桌面,它不承载在任何其他元素中。 自定义控件的宿主是控件本身的 HWND,而不是应用程序窗口或任何其他可能包含顶级控件组的窗口。
片段的主机在提供 UI 自动化服务方面起着重要作用。 它允许导航到片段根目录,并提供一些默认属性,以便自定义提供程序不必实现它们。