UI 自动化提供程序概述

Microsoft UI 自动化提供程序是公开应用程序 UI 元素的软件对象,以便辅助功能客户端应用程序可以检索有关元素的信息并调用其功能。 通常,UI 中的每个控件或其他非重复元素都有一个提供程序。

Microsoft 为随 Microsoft Win32、Windows 窗体 和 Windows Presentation Foundation (WPF) 提供的每个标准控件都包含一个提供程序。 这意味着标准控件会自动向UI 自动化客户端公开;无需为标准控件实现任何辅助功能接口。

如果应用程序包含任何自定义控件,则需要为这些控件实现UI 自动化提供程序,使其可供辅助功能客户端应用程序访问。 还需要为不包含提供程序的任何第三方控件实现提供程序。 可以通过实现UI 自动化提供程序接口和控制模式接口来实现提供程序。

本主题概述了控件开发人员如何实现UI 自动化提供程序。 它包括以下部分。

提供程序类型

UI 自动化提供程序分为两类:服务器端提供程序和客户端 (或代理) 提供程序。

服务器端提供程序是一个对象,如自定义控件,其中包含其自身的相关UI 自动化提供程序接口的本机实现。 服务器端提供程序通过将提供程序接口的实现公开给UI 自动化核心(处理来自客户端的请求)来跨进程边界与客户端应用程序通信。 有关服务器端提供程序的详细信息,请参阅实现Server-Side UI 自动化提供程序

客户端提供程序(或代理)是代表控件实现UI 自动化提供程序接口的对象,该控件不包括其自己的完整提供程序实现。 如果没有代理,此类控件对UI 自动化基本上是不透明的,后者只能提供从窗口句柄 (HWND) 提供的基本信息,例如控件位置。 通常,代理提供程序通过发送和接收 Windows 消息来跨进程边界与应用程序通信。 有关详细信息,请参阅实现Client-Side (代理) UI 自动化提供程序

UI 自动化提供程序概念

本部分简要介绍实现 UI 自动化提供程序所需了解的一些关键概念。

元素

UI 自动化元素是 UI(通常是窗口或控件)的片段,UI 自动化客户端可见。 示例包括应用程序窗口、窗格、按钮、工具提示、列表框和列表项。

UI 自动化元素作为树向客户端公开。 UI 自动化通过从在元素之间进行导航来构造该树。 提供程序为每个元素启用导航。 每个元素可以指向其自己的父元素、其同级元素及其第一个和最后一个子元素。

客户端可以在三个主体视图中查看UI 自动化树,如下表所述:

视图 说明
原始视图 包括所有元素。
控件视图 包括控件元素。
内容视图 包括向用户传达信息的控件元素。

 

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

有关树的客户端视图的详细信息,请参阅 UI 自动化 树概述

框架

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

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

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

Fragments

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

主机

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

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

概念性

实现Client-Side UI 自动化提供程序

实现Server-Side UI 自动化提供程序

UI 自动化树概述