IAccessibleEx 实现指南

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

本主题包含以下各节:

属性

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

  • AriaProperties
  • AriaRole
  • AutomationId
  • ClassName
  • ClickablePoint
  • ControllerFor
  • 环境
  • 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 Equivalent
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 和转换控件模式,某些方法在UI 自动化控件模式和 Microsoft Active 辅助功能方法之间重叠。 在这些情况下,必须实现这两者。 例如,必须同时实现 Microsoft Active Accessibility 的 IAccessible::get_accValueIAccessible::p ut_accValue 方法,UI 自动化IRangeValueProvider::ValueIRangeValueProvider::SetValue 方法也必须实现。 在内部,实现可以共享这些代码。 实现这两个集的要求可避免部分实现模式接口,同时保留现有 Microsoft Active 辅助功能客户端可用的 IAccessible 接口。

当控件具有下面概述的角色之一时,不需要以下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 它不是只读) 、ROLE_SYSTEM_PROGRESSBAR、ROLE_SYSTEM_COMBOBOX,当 accValue 属性的值不为 NULL 时,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 接口