UI 自动化提供程序概述
更新:2007 年 11 月
UI 自动化提供程序使控件能够与 UI 自动化客户端应用程序进行通信。通常,用户界面 (UI) 中的每个控件或其他不同的元素都由一个提供程序表示。该提供程序公开有关元素的信息,并根据需要实现使客户端应用程序能够与控件交互的控件模式。
客户端应用程序通常不必直接使用提供程序。应用程序中使用 Win32、Windows 窗体 或 Windows Presentation Foundation (WPF) 框架的大多数标准控件都会自动向 UI 自动化系统公开。实现自定义控件的应用程序还可以为这些控件实现 UI 自动化提供程序,并且,客户端应用程序不必执行任何特殊步骤即可访问它们。
本主题概述控件开发人员实现 UI 自动化提供程序的方式,特别是为 Windows 窗体 和 Win32 窗口中的控件实现提供程序的方式。
本主题包括下列各节。
- 提供程序类型
- UI 自动化提供程序概念
- 相关主题
提供程序类型
UI 自动化提供程序分为两种类别:客户端提供程序和服务器端提供程序。
客户端提供程序
客户端提供程序由 UI 自动化客户端实现,用于与不支持(或不完全支持)UI 自动化的应用程序进行通信。客户端提供程序通常通过发送和接收 Windows 消息跨进程边界与服务器通信。
由于 Win32、Windows 窗体 或 WPF 应用程序中控件的 UI 自动化提供程序是作为操作系统的一部分提供的,因此客户端应用程序只有在很少情况下才必须实现自己的提供程序,本概述也不再进一步讨论这些提供程序。
服务器端提供程序
服务器端提供程序是由基于 UI 框架(而不是 Win32、Windows 窗体 或 WPF)的自定义控件或应用程序实现的。
服务器端提供程序通过向 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 中包含诸如组合框等组件。
片段
片段是特定框架中元素的完整子树。位于子树根节点处的元素称为片段根元素。片段根元素没有父项,但寄宿在某个其他框架(通常是 Win32 窗口 (HWND))内。
宿主
每个片段的根节点都必须承载于元素(通常是 Win32 窗口 (HWND))中。但桌面例外,它不寄宿在任何其他元素中。自定义控件的宿主是控件本身的 HWND,而不是应用程序窗口或可能包含顶级控件组的任何其他窗口。
片段的宿主在提供 UI 自动化服务方面扮演着重要的角色。它允许导航到片段根元素,并提供一些默认属性,这样自定义提供程序就不必实现这些属性。