IAccessibleEx 实现指南

Microsoft UI 自动化核心可以检索服务器通过 IAccessible 接口公开的任何可访问对象的所有 Microsoft Active Accessibility 属性。 实现 IAccessibleEx 时,必须仅公开无法通过现有 Microsoft Active Accessibility 属性公开的 UI 功能的那些方面。 本主题介绍UI 自动化属性和控件模式,这些属性和控件模式表示在 Microsoft Active Accessibility 中没有对应项的 UI 功能,它们是可以在 IAccessibleEx 实现中公开的属性和控件模式。

本主题包含以下各节:

属性

以下UI 自动化属性不与 Microsoft Active Accessibility 功能重叠。 可以在 IAccessibleEx 实现中使用它们:

  • AriaProperties
  • AriaRole
  • AutomationId
  • ClassName
  • ClickablePoint
  • ControllerFor
  • culture
  • DescribedBy
  • FlowTo
  • FrameworkId
  • IsContentElement
  • IsControlElement
  • IsDataValidForForm
  • IsRequiredForForm
  • ItemStatus
  • ItemType
  • LabeledBy
  • LocalizedControlType
  • 方向

尽管 AcceleratorKey 和 AccessKey UI 自动化属性确实与 accKeyboardShortcut Microsoft Active Accessibility 属性重叠,但你仍然可以在 IAccessibleEx 实现中用于同时具有访问键和加速器的控件。 同样,ControlType UI 自动化 属性与 Microsoft Active Accessibility accRole 属性重叠,但你仍然可以在 IAccessibleEx 实现中使用它来为控件定义更具体的角色。

由于 Microsoft Active Accessibility 属性已涵盖以下UI 自动化元素属性,因此无需在 IAccessibleEx 实现中使用它们。

UI 自动化属性 Microsoft Active Accessibility 等效项
BoundingRectangle accLocation
HasKeyboardFocus accState, STATE_SYSTEM_FOCUSED
IsEnabled accState, STATE_SYSTEM_UNAVAILABLE
IsKeyboardFocusable accState, STATE_SYSTEM_FOCUSABLE
IsPassword accState, STATE_SYSTEM_PROTECTED
HelpText accHelp
“属性” accName
NativeWindowHandle WindowFromAccessibleObject
IsOffscreen accState, STATE_SYSTEM_INVISIBLE/STATE_SYSTEM_OFFSCREEN
ProcessId 由 UI 自动化 核心提供

 

对于任何不支持的 UI 自动化 属性,IRawElementProviderSimple::GetPropertyValue 方法的实现应将 pRetVal 参数设置为 VT_EMPTY,并返回S_OK。 返回 UIA_E_NOTSUPPORTED 可能会导致 MSAA 到 UIA 代理删除相应属性的默认映射。

控件模式

以下UI 自动化控件模式不与 Microsoft Active Accessibility 功能重叠。 可以在 IAccessibleEx 实现中使用它们:

  • 靠接
  • 展开/折叠
  • 网格
  • GridItem
  • MultipleView
  • RangeValue
  • 滚动
  • ScrollItem
  • SynchronizedInput
  • TableItem
  • 转换

对于 RangeValue 和 Transform 控件模式,某些方法在 UI 自动化 控件模式和 Microsoft Active Accessibility 方法之间重叠。 在这些情况下,必须实现两者。 例如,Microsoft Active Accessibility 的 IAccessible::get_accValueIAccessible::p ut_accValue 方法都必须实现,UI 自动化IRangeValueProvider::ValueIRangeValueProvider::SetValue 方法也必须实现。 在内部,实现可以共享这些代码。 实现这两个集的要求可避免部分实现模式接口,同时使 IAccessible 接口可由现有 Microsoft Active Accessibility 客户端使用。

当控件具有下面概述的角色之一时,不需要以下UI 自动化控件模式;否则,应显式支持它们(如果相关)。

UI 自动化控件模式 Microsoft 主动辅助功能角色
InvokePattern ROLE_SYSTEM_PUSHBUTTONROLE_SYSTEM_MENUITEMROLE_SYSTEM_BUTTONDROPDOWNROLE_SYSTEM_SPLITBUTTON,以及 accDefaultAction 属性的值不为 NULL 的任何其他角色。
SelectionItemPattern ROLE_SYSTEM_LISTITEMROLE_SYSTEM_RADIOBUTTON
SelectionPattern ROLE_SYSTEM_LIST
TogglePattern ROLE_SYSTEM_CHECKBUTTON
ValuePattern 如果 accValue 属性的值不是 NULL,则当它不是只读) 、ROLE_SYSTEM_PROGRESSBAR、ROLE_SYSTEM_COMBOBOX和任何其他角色时,ROLE_SYSTEM_TEXT (。
WindowPattern 在顶级 Microsoft Win32 HWND上自动受支持。

 

UI 自动化 属性更改事件的 WinEvents

除了为 IAccessible 定义的事件外,还定义了以下事件标识符,并且可以与 IAccessibleEx 实现一起使用,作为相应UI 自动化属性的属性更改事件。 它们使用与为 IAccessible 定义的事件相同的机制。 有关详细信息,请参阅 WinEvents

IAccessibleEx 实现的 WinEvent ID Microsoft Active Accessibility 中的相关 WinEvent ID
UIA_AriaPropertiesPropertyId
UIA_AriaRolePropertyId
UIA_ControllerForPropertyId
UIA_DescribedByPropertyId
UIA_ExpandCollapseExpandCollapseStatePropertyId EVENT_OBJECT_STATECHANGE
UIA_FlowsToPropertyId
UIA_InputDiscardedEventId
UIA_InputReachedOtherElementEventId
UIA_InputReachedTargetEventId
UIA_IsDataValidForFormPropertyId
UIA_IsEnabledPropertyId EVENT_OBJECT_STATECHANGE
UIA_ItemStatusPropertyId
UIA_MultipleViewCurrentViewPropertyId
UIA_ScrollHorizontallyScrollablePropertyId
UIA_ScrollHorizontalScrollPercentPropertyId EVENT_OBJECT_CONTENTSCROLLED
UIA_ScrollHorizontalViewSizePropertyId
UIA_ScrollVerticallyScrollablePropertyId
UIA_ScrollVerticalScrollPercentPropertyId EVENT_OBJECT_CONTENTSCROLLED
UIA_ScrollVerticalViewSizePropertyId
UIA_ToggleToggleStatePropertyId EVENT_OBJECT_STATECHANGE

 

对于上面具有EVENT_OBJECT_值后列出的事件,除了列出的已更改事件外, IAccessibleEx 实现还应触发此事件。 这使现有的 IAccessibleEx 客户端代码能够继续工作,同时向感兴趣的客户端传达更精细的事件信息。

WinEvent

IAccessibleEx 接口