UI 自动化提供程序概述

备注

本文档适用于想要使用 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 自动化树客户端视图的详细信息,请参阅 UI 自动化树概述

提供程序实现负责将元素为定义为内容元素或控件元素。 控件元素可以是也可以不是内容元素,但所有内容元素都是控件元素。

框架

框架是一个组件,用于管理屏幕某一区域中的子控件、命中测试和呈现方式。 例如,Win32 窗口(通常称为 HWND)可作为框架使用,该框架包含多个 UI 自动化元素,例如菜单栏、状态栏和按钮。

Win32 容器控件(例如列表框和树视图)均视为框架,因为它们包含用于呈现子项和对其执行命中测试的代码。 相比之下,WPF 列表框则不是一个框架,因为呈现和命中测试是由包含 WPF 窗口处理的。

应用程序中的 UI 可由不同框架构成。 例如,HWND 应用程序窗口可能包含动态 HTML (DHTML),后者又包含 HWND 中的组合框等组件。

Fragments

片段是特定框架中元素的完整子树。 子树根节点处的元素称为片段根。 片段根没有父级,而是承载在其他框架中,通常是 Win32 窗口 (HWND) 中。

主机

每个片段的根节点必须承载在元素中,通常是 Win32 窗口 (HWND) 中。 例外情况是桌面,它不承载在任何其他元素中。 自定义控件的宿主是该控件本身的 HWND,而非应用程序窗口或可能包含顶级控件组的任何其他窗口。

片段的宿主对于提供 UI 自动化服务中而言非常重要。 它允许导航到片段根,并提供一些默认属性,使自定义提供程序无需实现这些属性。

请参阅