客户端 UI 自动化提供程序的实现
注意 |
---|
本文档的目标读者是欲使用 System.Windows.Automation 命名空间中定义的托管 UI Automation类的 .NET Framework 开发人员。有关 UI Automation的最新信息,请参见 Windows Automation API: UI Automation(Windows 自动化 API:UI 自动化)。 |
Microsoft 操作系统中使用了多个不同的user interface (UI) 框架,包括 Win32、Windows Forms和 Windows Presentation Foundation (WPF)。 Microsoft UI Automation向客户端公开有关 UI 元素的信息。 但是,UI Automation本身并不识别这些框架中存在的不同类型控件,以及从这些控件中提取信息时所需的技术, 而是将这种任务留给称为提供程序的对象。 提供程序从特定控件提取信息并将这些信息提交到 UI Automation,后者将以一致的方式提交到客户端。
提供程序可以存在于服务器端或客户端。 服务器端提供程序由控件自身实现。 WPF 元素实现提供程序,在编写任何第三方控件时,还可以考虑 UI Automation。
但是,较早期的控件(如 Win32 和 Windows Forms中的那些控件)不直接支持 UI Automation。 这些控件是由客户端进程中的提供程序支持的,并使用跨进程通信(例如,通过监控与控件之间的传送的窗口消息)来获取有关控件的信息。 此类客户端提供程序有时称为代理。
Windows Vista 为标准的 Win32 和 Windows Forms控件提供了提供程序。 此外,回退提供程序对任何不是由另一个服务器端提供程序或代理支持但具有 Microsoft Active Accessibility 实现的控件提供部分 UI Automation支持。 所有这些提供程序都可自动加载,并可用于客户端应用程序。
有关对 Win32 和 Windows Forms控件的支持的更多信息,请参见 UI 自动化对标准控件的支持。
应用程序还可以注册其他客户端提供程序。
本主题包括下列各节。
- 分发客户端提供程序
- 注册和配置客户端提供程序
- 相关主题
分发客户端提供程序
UI Automation应在托管代码程序集中查找客户端提供程序。 该程序集中的命名空间应与该程序集同名。 例如,称为 ContosoProxies.dll 的程序集应包含 ContosoProxies 命名空间。 在该命名空间内创建 UIAutomationClientSideProviders 类。 在静态 ClientSideProviderDescriptionTable 字段的实现中,创建用于描述该提供程序的 ClientSideProviderDescription 结构数组。
注册和配置客户端提供程序
dynamic-link library (DLL) 中的客户端提供程序通过调用 RegisterClientSideProviderAssembly 进行加载。 无需进一步的操作,客户端应用程序便可以使用这些提供程序。
在客户端自己的代码中实现的提供程序通过使用 RegisterClientSideProviders 进行注册。 此方法将 ClientSideProviderDescription 结构数组用作参数,其中的每个结构都将指定以下属性:
一个回调函数,用于创建提供程序对象。
提供程序支持的控件的类名。
提供程序支持的应用程序的映像名(通常是可执行文件的全名)。
控制如何根据目标应用程序中的窗口类对类名进行匹配的标志。
最后两个参数是可选的。 如果客户端希望对不同的应用程序使用不同的提供程序,则可以指定目标应用程序的映像名。 例如,客户端可以对支持多视图模式的已知应用程序中的 Win32 列表视图控件使用一个提供程序,而对不支持多视图模式的另一个已知应用程序中的类似控件使用另一个提供程序。