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 元素提供代理对象,并尝试代表 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 辅助功能支持,而无需执行其他开发工作。 此规则的例外是已子类化的控件,这些控件不存储其自己的字符串, (缺少 HASSTRINGS 样式) 或所有者绘制的字符串。 在这些情况下,Oleacc.dll无法收集所需的信息,因为信息存储在控件外部。 但是,在许多方案中,已建立的解决方法或使用动态批注允许服务器与Oleacc.dll提供的代理合作。
泛型代理对象
如果Oleacc.dll无法识别 UI 元素的类名,它将创建一个公开尽可能多的信息的泛型代理。 这最多包括对象的边界矩形、父对象、来自 WM_GETTEXT) 的名称 (,以及窗口层次结构中的任何子级。