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