客户端 UI 自动化提供程序的实现

注释

本文档适用于想要使用 System.Windows.Automation 命名空间中定义的托管 UI 自动化类的 .NET Framework 开发人员。 有关 UI 自动化的最新信息,请参阅 Windows 自动化 API:UI 自动化

Microsoft作系统中使用了多个不同的用户界面(UI)框架,包括 Win32、Windows 窗体和 Windows Presentation Foundation(WPF)。 Microsoft UI 自动化向客户端公开有关 UI 元素的信息。 但是,UI 自动化本身并不了解这些框架中存在的不同类型的控件以及从这些框架中提取信息所需的技术。 而是将此任务留给称为提供者的对象。 提供程序从特定控件中提取信息,并将该信息交给 UI 自动化,然后以一致的方式将其呈现给客户端。

提供者可以存在于服务器端或客户端。 服务器端提供程序由控件本身实现。 WPF 元素实现提供程序,正如可以在考虑到 UI 自动化的情况下写入第三方控件一样。

但是,Win32 和 Windows 窗体中的较旧控件不直接支持 UI 自动化。 这些控件由存在于客户端进程中的提供程序提供,并通过跨进程通信获取有关控件的信息;例如,通过监视与控件之间往返的 Windows 消息。 此类客户端提供程序有时称为代理。

Windows Vista 为标准 Win32 和 Windows 窗体控件提供了提供程序。 此外,回退提供程序为任何不由另一个服务器端提供程序或代理提供、但具有 Microsoft Active Accessibility 实现的控件提供部分 UI 自动化支持。 所有这些提供程序都会自动加载并可供客户端应用程序使用。

有关对 Win32 和 Windows 窗体控件的支持的详细信息,请参阅 UI 自动化对标准控件的支持

应用程序还可以注册其他客户端提供程序。

分布客户端提供程序

UI 自动化预期在托管代码程序集中查找客户端提供程序。 此程序集中的命名空间应与程序集具有相同的名称。 例如,名为 ContosoProxies.dll 的程序集将包含 ContosoProxies 命名空间。 在命名空间中,创建一个 UIAutomationClientSideProviders 类。 在静态 ClientSideProviderDescriptionTable 字段的实现中,创建一个描述提供程序的 ClientSideProviderDescription 结构数组。

注册并配置客户端提供程序

动态链接库 (DLL) 中的客户端提供程序通过调用 RegisterClientSideProviderAssembly来加载。 客户端应用程序无需执行进一步操作即可使用服务提供者。

在客户端自己的代码中实现的提供程序通过使用 RegisterClientSideProviders注册。 此方法采用结构数组 ClientSideProviderDescription 作为参数,每个结构都指定以下属性:

  • 创建提供程序对象的回调函数。

  • 提供程序将提供的控件的类名。

  • 提供程序将提供的应用程序(通常为可执行文件的完整名称)的映像名称。

  • 用于控制类名称如何与目标应用程序中找到的窗口类匹配的标志。

最后两个参数是可选的。 当客户端希望为不同的应用程序使用不同的提供程序时,可能会指定目标应用程序的映像名称。 例如,客户端可能对支持多视图模式的已知应用程序中的 Win32 列表视图控件使用一个提供程序,另一个提供程序用于另一个不支持的已知应用程序中的类似控件。

另请参阅