IAccessible 代理

IAccessible 代理为标准 UI 元素提供默认辅助功能信息:用户控件、用户菜单以及 COMCTL 和 COMCTL32 中的常见控件。 此默认支持通过 Oleacc.dll 创建的 IAccessible 对象公开,并且无需额外的服务器开发工作即可提供 Microsoft Active Accessibility 支持。 然后,服务器可以使用 动态注释 API 修改Oleacc.dll公开的大部分信息,但它没有完全的控制。

创建代理

若要确定 UI 元素是否本机支持 IAccessible 接口,Oleacc.dll向它发送 WM_GETOBJECT 消息。 非零返回值表示元素本身支持 Microsoft Active Accessibility 并提供自己的 IAccessible 支持。 但是,如果返回值为零,Oleacc.dll为 UI 元素提供代理对象,并尝试代表它返回有意义的信息。 有关 WM_GETOBJECT的详细信息,请参阅 WM_GETOBJECT的工作原理

公开的信息

Oleacc.dll使用 UI 元素的 Windows 类名来确定应为其每个 IAccessible 属性公开哪些信息以及如何收集该信息。 例如,Oleacc.dll调用 GetWindowText 函数来检索标准按钮的 Name 属性,但调用同一函数来检索标准编辑控件的 Value 属性。 实际上,Oleacc.dll将每个 IAccessible 方法映射到相应的 Microsoft Win32 或特定于控件的消息或函数调用。 通过使用此类基于名称的特殊大小写,它可以通过 IAccessible 代理返回有意义的信息,而无需在服务器中提供任何 Microsoft Active Accessibility 支持。

使用标准 UI 元素构建的应用程序通常无需额外的开发工作即可获得完整的 Microsoft Active Accessibility 支持。 此规则的例外情况是已子类化、不存储自己的字符串 (没有 HASSTRINGS 样式) 或所有者绘制的控件。 在这些情况下,Oleacc.dll无法收集所需的信息,因为信息存储在控件外部。 但是,在许多情况下,已建立的解决方法或使用动态批注允许服务器与Oleacc.dll提供的代理合作。

泛型代理对象

如果Oleacc.dll无法识别 UI 元素的类名,它将创建一个泛型代理,该代理公开尽可能多的信息。 这最多包括对象的边框、父对象、来自 WM_GETTEXT) 的名称 (,以及窗口层次结构中的任何子级。