处理WM_GETOBJECT消息

Microsoft Active Accessibility 和 Microsoft UI 自动化将WM_GETOBJECT消息发送到服务器或提供程序应用程序,以检索有关服务器或提供程序支持的可访问对象的信息。 客户端从不直接发送 WM_GETOBJECT 。 相反,当客户端调用 AccessibleObjectFromPoint、AccessibleObjectFromEventAccessibleObjectFromWindow 函数时,Microsoft Active Accessibility 会发送此消息。 当客户端调用 IUIAutomation::ElementFromHandleElementFromPointGetFocusedElement 时,以及处理客户端已注册的事件时,UI 自动化发送WM_GETOBJECT。

Microsoft Active Accessibility 或 UI 自动化通过传递名为对象标识符的值以及WM_GETOBJECT消息来指定它需要信息的对象类型。 在收到消息时,服务器或提供程序会检查对象标识符以确定如何响应消息。 响应取决于接收应用程序是否 (服务器) 实现 Microsoft Active Accessibility,UI 自动化 (指定对象的提供程序) 或两者都不实现。

  • 如果接收应用程序是 Microsoft Active Accessibility 服务器, 并且WM_GETOBJECT 消息包含 OBJID_CLIENT的对象标识符,则服务器应返回通过将对象的 IAccessible 接口传递给 LresultFromObject 函数获得的值。
  • 如果接收应用程序是UI 自动化提供程序,并且对象标识符为 UiaRootObjectId,则提供程序应返回对象的 IRawElementProviderSimple 接口。 提供程序通过调用 UiaReturnRawElementProvider 函数获取接口。
  • 如果接收应用程序既不实现 Microsoft Active Accessibility 也不实现UI 自动化,则它应将WM_GETOBJECT消息传递给 DefWindowProc 函数。 传递消息使辅助功能框架能够确定代理是否可用于指定对象。
  • 如果对象标识符既不是 OBJID_CLIENT 也不是 UiaRootObjectId,则接收应用程序应将 WM_GETOBJECT 消息传递给 DefWindowProc 函数。 传递消息可使辅助功能框架使用标准 UI 元素的默认提供程序。

Microsoft Active Accessibility 和 UI 自动化 可以在WM_GETOBJECT消息中传递自定义对象标识符,以从服务器或提供程序检索应用程序定义的值或对象。 OBJID_NATIVEOMOBJID_QUERYCLASSNAMEIDX对象标识符可用于检索本机对象模型接口,或请求Oleacc.dll支持的特定代理对象。

通过处理 OBJID_CLIENTUiaRootObjectId 对象标识符,Microsoft Active Accessibility 服务器实现可以与UI 自动化提供程序实现共存。 由于大多数标准 Windows 控件和通用控件库 (ComCtl32.dll) 实现的通用控件不实现 Microsoft Active Accessibility 或 UI 自动化,因此这些控件通常不处理WM_GETOBJECT消息。 相反,Microsoft Active Accessibility 或 UI 自动化 框架会检查代理对象是否可用于特定 UI 元素。 否则,它会为主机窗口对象提供默认代理对象。