共用方式為


使用者介面自動化與使用中輔助功能

Microsoft Active Accessibility 是 Windows 95 中引進的舊版 API,其設計目的是讓 Windows 應用程式可供存取。 Microsoft 使用者介面自動化是 Windows 的新輔助功能模型,旨在解決輔助技術產品和自動化測試工具的需求。 使用者介面自動化 提供許多改善Microsoft Active Accessibility。 本主題說明這兩種技術之間的差異。

本主題包含下列各節。

程式語言:

Microsoft Active Accessibility 是以支援雙重介面的元件物件模型 (COM) 為基礎,因此,可透過 C/C++ 和腳本語言進行程式化。

引進 使用者介面自動化 時,用戶端 API 僅限於 Managed 程式代碼,而提供者 API 則同時包含 Managed 和 Unmanaged 實作。 使用 Windows 7 時,引進了新的 COM 型用戶端 API,可讓您更輕鬆地在 C/C++ 中設計 使用者介面自動化 用戶端應用程式。

Servers 與 Clients

在 Microsoft Active Accessibility 中,伺服器和用戶端會直接通訊,主要是透過 IAccessible 介面的伺服器實作進行通訊。

在 使用者介面自動化 中,核心服務位於伺服器(提供者)與客戶端之間。 核心服務會呼叫提供者所實作的介面,並提供其他服務,例如產生UI元素的唯一運行時間標識碼。 用戶端應用程式可藉由建立 CUIAutomation 物件來存取此核心服務。 這個物件支援一組與提供者介面分開的用戶端介面。 如需詳細資訊,請參閱 建立 CUIAutomation 物件

使用者介面自動化 提供者可以提供資訊給 Microsoft Active Accessibility 用戶端,Microsoft Active Accessibility 伺服器可以提供 使用者介面自動化 用戶端應用程式的資訊。 不過,由於Microsoft Active Accessibility 不會公開與 使用者介面自動化 一樣多的資訊,因此這兩個模型並不完全相容。

UI 項目

Microsoft Active Accessibility 會將 UI 元素呈現為 與子標識碼配對的 IAccessible 介面。 很難比較兩個 IAccessible 指標,以判斷它們是否參考相同的元素。

在 使用者介面自動化 中,每個元素都會以物件表示,該物件會將IUIAutomationElement介面公開給用戶端。 元素可由其運行時間標識符進行比較,這些標識符是使用 IUIAutomationElement::GetRuntimeId 擷取的。

樹狀檢視和導覽

畫面上的UI元素可以視為樹狀結構,桌面做為根目錄、應用程式視窗做為直接子系,以及應用程式內的元素作為進一步子系。

在 Microsoft Active Accessibility 中,許多與終端用戶無關的 UI 元素都會在樹狀結構中公開。 用戶端應用程式必須檢查樹狀結構中的所有專案,以判斷哪些元素有意義。

UI 自動化用戶端應用程式會透過篩選的檢視來查看 UI。 檢視只包含提供資訊給用戶或使用者可以與之互動的專案。 只包含控制元件元素和內容元素的預先定義檢視可供使用,用戶端應用程式可以定義自定義檢視。 使用者介面自動化 可讓使用者更輕鬆地描述UI,並協助使用者與應用程式互動。

在 Microsoft Active Accessibility 中,元素之間的瀏覽是空間的,例如,移至位於畫面左邊的專案,例如,移至對話框中定位順序中的下一個功能表項或下一個專案,例如,移至容器中的第一個子專案,或從子元素移至其父元素。 階層式導覽很複雜,因為子元素不一定是實 作 IAccessible 的物件。

在 使用者介面自動化 中,所有UI元素都是公開IUIAutomationElement介面並支援相同基本功能的 COM 物件。 從提供者的觀點來看,COM 物件會實作繼承自 IRawElementProviderSimple的介面。 流覽主要是階層式;也就是說,從父母到子系,以及從一個兄弟姐妹到另一個兄弟姐妹。 不過,同層級之間的流覽具有邏輯元素,因為它可能遵循定位順序。 用戶端可以使用 IUIAutomationTreeWalker,從任何起點巡覽,使用樹狀結構的任何篩選檢視。 用戶端也可以使用 IUIAutomationElement::FindFirst IUIAutomationElement::FindAll 來巡覽至特定的子系或子系。 例如,很容易擷取對話框中支援指定控件模式的所有元素。

使用者介面自動化 中的流覽比使用中輔助功能Microsoft更一致。 某些元素,例如下拉式清單和彈出視窗,會出現在Microsoft作用中輔助功能樹狀結構中兩次,而從這些項目流覽可能會有非預期的結果。 很難為 Rebar 控件正確實作 Microsoft Active Accessibility。 使用者介面自動化 啟用重新父代和重新定位,因此元素可以放置在樹狀結構中的任何位置,儘管窗口擁有權強加階層。

角色和控制項類型

Microsoft Active Accessibility 會使用 accRole 屬性 (IAccessible::get_accRole) 來擷取 UI 中元素角色的描述,例如ROLE_SYSTEM_SLIDERROLE_SYSTEM_MENUITEM。 從項目的角色可以了解他所能使用的功能。 使用 IAccessible::accSelectIAccessible::accDoDefaultAction固定方法,即可與控件互動。 用戶端應用程式與UI之間的互動僅限於可透過 IAccessible完成的工作。

相反地,使用者介面自動化 將元素的控件類型與預期的功能分離,由IUIAutomationElement::CurrentControlType (或 IUIAutomationElement::CachedControlType) 屬性所描述。 功能是由提供者透過其特定介面實作所支援的控制項模式來判斷。 控制項模式可以結合來描述特定UI元素所支援的完整功能集。 某些提供者需要支援特定控制項模式。 例如,複選框的提供者必須支援 切換 控件模式。 需要其他提供者才能支援一或多個控件模式。 例如,按鈕必須支援切換或 用控件模式。 其他仍不支援控制項模式。 例如,無法移動、重設大小或停駐的窗格沒有控件模式。

使用者介面自動化 支援由識別的自定義控制項UIA_CustomControlTypeId常數,而且可由 IUIAutomationElement::CurrentLocalizedControlType (或 IUIAutomationElement::CachedLocalizedControlType) 属性來描述。

下表Microsoft Active Accessibility 物件角色對應至 使用者介面自動化 控件類型。

Active Accessibility 角色 UI 自動化控制項類型
ROLE_SYSTEM_PUSHBUTTON 按鈕
ROLE_SYSTEM_CLIENT Calendar
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT 請參閱 自定義控制項類型
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Document
ROLE_SYSTEM_TEXT 編輯
ROLE_SYSTEM_GROUPING 群組
ROLE_SYSTEM_LIST 頁首
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK 超連結
ROLE_SYSTEM_GRAPHIC 映像
ROLE_SYSTEM_LIST 清單​​
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP 功能表
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE 窗格
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR ScrollBar
ROLE_SYSTEM_SEPARATOR Separator
ROLE_SYSTEM_SLIDER 滑桿
ROLE_SYSTEM_SPINBUTTON 微調按鈕
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST 定位字元
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Table
ROLE_SYSTEM_STATICTEXT Text
ROLE_SYSTEM_INDICATOR Thumb
ROLE_SYSTEM_TITLEBAR TitleBar
ROLE_SYSTEM_TOOLBAR ToolBar
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Window

 

狀態和屬性

Microsoft Active Accessibility 元素支援一組常見的屬性。 某些屬性,例如 accState,必須根據元素角色來描述不同的條件。 伺服器必須實作 IAccessible 的所有方法,以傳回屬性,即使是與專案無關的屬性也一定如此。

使用者介面自動化 會定義其他屬性,其中一些屬性會對應至 Microsoft Active Accessibility 中的狀態。 某些屬性適用於所有元素,但其他屬性是控件類型和控件模式特有的屬性。 使用者介面自動化 提供者不需要實作不相關的屬性,但可以為不支援的任何屬性傳回 Null 值。 使用者介面自動化 核心服務可以從預設視窗提供者取得一些屬性,而這些屬性會與提供者明確實作的屬性合併。

除了支援更多屬性,使用者介面自動化 允許快取屬性來提升效能。

下表顯示兩個模型中某些屬性之間的對應。 如需 使用者介面自動化 屬性標識符的描述,請參閱 Automation Element 屬性標識符

Active Accessibility 屬性存取子 UI 自動化屬性 ID 備註
get_accKeyboardShortcut UIA_AccessKeyPropertyId或UIA_AcceleratorKeyPropertyId 如果兩者都存在,則UIA_AccessKeyPropertyId優先。
get_accName UIA_NamePropertyId
get_accRole UIA_ControlTypePropertyId 如需將角色對應至控件類型,請參閱上表。
get_accValue UIA_ValueValuePropertyId或UIA_RangeValueValuePropertyId 僅適用於支援 IUIAutomationValuePatternIUIAutomationRangeValuePattern 的控件類型。 範圍值會正規化為 0-100,以符合 Microsoft Active Accessibility 行為。 值會以字串表示。
get_accHelp UIA_HelpTextPropertyId
accLocation UIA_BoundingRectanglePropertyId
get_accDescription 不支援。 accDescription 在 Microsoft Active Accessibility 中沒有明確的規格,導致伺服器將不同的資訊放在此屬性中。
get_accHelpTopic 不支援。

 

下表顯示對應至 Microsoft Active Accessibility 對象狀態常數 使用者介面自動化 屬性標識符

Active Accessibility 狀態 UI 自動化屬性 觸發 WinEvent 狀態變更?
STATE_SYSTEM_CHECKED UIA_ToggleToggleStatePropertyId複選框。 單選按鈕UIA_SelectionItemIsSelectedPropertyId。 Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (value = ExpandCollapseState_Collapsed)。 Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (value = ExpandCollapseState_Expanded 或 ExpandCollapseState_PartiallyExpanded)。 Y
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId。
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId
STATE_SYSTEM_HASPOPUP 功能表項UIA_ExpandCollapseExpandCollapseStatePropertyId
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (value = True 和 IUIAutomationElement::GetClickablePoint 失敗)。
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (value = UIA_HyperlinkControlTypeId)。
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (value = ToggleState_Indeterminate
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId。
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId。
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId。
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId。
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyId和UIA_ValueIsReadOnlyPropertyId
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId Y

 

如需屬性識別碼的完整清單,請參閱 屬性識別碼

事件

不同於 Microsoft Active Accessibility,使用者介面自動化 中的事件機制不會依賴 Windows 事件路由,而 Windows 事件路由會緊密系結至視窗句柄,而且不需要用戶端應用程式設定勾點。 事件的訂閱可以微調到樹狀結構的特定部分,而不只是針對特定事件。 提供者也可以追蹤正在接聽的事件,以微調引發事件。

用戶端也更容易擷取引發事件的元素,因為這些專案會直接傳遞至事件回呼。 如果客戶端訂閱事件時提供快取要求,則會自動擷取元素的屬性。

下表顯示Microsoft Active Accessibility 事件常數和 使用者介面自動化 事件標識符的對應。

WinEvent 使用者介面自動化 事件標識碼
EVENT_OBJECT_ACCELERATORCHANGE UIA_AcceleratorKeyPropertyId屬性變更。
EVENT_OBJECT_CONTENTSCROLLED 相關聯滾動條上的UIA_ScrollVerticalScrollPercentPropertyIdUIA_ScrollHorizontalScrollPercentPropertyId 屬性變更。
EVENT_OBJECT_CREATE UIA_StructureChangedEventId
EVENT_OBJECT_DEFACTIONCHANGE 沒有同等項目。
EVENT_OBJECT_DESCRIPTIONCHANGE 沒有確切的對等專案;也許UIA_HelpTextPropertyIdUIA_LocalizedControlTypePropertyId屬性變更。
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId變更。
EVENT_OBJECT_HIDE UIA_StructureChangedEventId
EVENT_OBJECT_LOCATIONCHANGE UIA_BoundingRectanglePropertyId屬性變更。
EVENT_OBJECT_NAMECHANGE UIA_NamePropertyId屬性變更。
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId
EVENT_OBJECT_REORDER 不一致地用於 Microsoft Active Accessibility。 沒有任何直接對應的事件定義在 UI 自動化中。
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId。
EVENT_OBJECT_SELECTIONWITHIN 沒有同等項目。
EVENT_OBJECT_SHOW UIA_StructureChangedEventId
EVENT_OBJECT_STATECHANGE 各種屬性變更的事件。
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyId和UIA_ValueValuePropertyId已變更。
EVENT_SYSTEM_ALERT 沒有同等項目。
EVENT_SYSTEM_CAPTUREEND 沒有同等項目。
EVENT_SYSTEM_CAPTURESTART 沒有同等項目。
EVENT_SYSTEM_CONTEXTHELPEND 沒有同等項目。
EVENT_SYSTEM_CONTEXTHELPSTART 沒有同等項目。
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId
EVENT_SYSTEM_DRAGDROPEND 沒有同等項目。
EVENT_SYSTEM_DRAGDROPSTART 沒有同等項目。
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId。
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId。
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId。
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId
EVENT_SYSTEM_MINIMIZEEND UIA_WindowWindowVisualStatePropertyId屬性變更。
EVENT_SYSTEM_MINIMIZESTART UIA_WindowWindowVisualStatePropertyId屬性變更。
EVENT_SYSTEM_MOVESIZEEND UIA_BoundingRectanglePropertyId屬性變更。
EVENT_SYSTEM_MOVESIZESTART UIA_BoundingRectanglePropertyId屬性變更。
EVENT_SYSTEM_SCROLLINGEND UIA_ScrollVerticalScrollPercentPropertyId或UIA_ScrollHorizontalScrollPercentPropertyId屬性變更。
EVENT_SYSTEM_SCROLLINGSTART UIA_ScrollVerticalScrollPercentPropertyId或UIA_ScrollHorizontalScrollPercentPropertyId屬性變更。
EVENT_SYSTEM_SOUND 沒有同等項目。
EVENT_SYSTEM_SWITCHEND 沒有對等專案,但 UIA_AutomationFocusChangedEventId 事件表示新應用程式已收到焦點。
EVENT_SYSTEM_SWITCHSTART 沒有同等項目。
沒有同等項目。 UIA_MultipleViewCurrentViewPropertyId屬性變更。
沒有同等項目。 UIA_ScrollHorizontallyScrollablePropertyId屬性變更。
沒有同等項目。 UIA_ScrollVerticallyScrollablePropertyId屬性變更。
沒有同等項目。 UIA_ScrollHorizontalScrollPercentPropertyId屬性變更。
沒有同等項目。 UIA_ScrollVerticalScrollPercentPropertyId屬性變更。
沒有同等項目。 UIA_ScrollHorizontalViewSizePropertyId屬性變更。
沒有同等項目。 UIA_ScrollVerticalViewSizePropertyId屬性變更。
沒有同等項目。 UIA_ToggleToggleStatePropertyId屬性變更。
沒有同等項目。 UIA_WindowWindowVisualStatePropertyId屬性變更
沒有同等項目。 UIA_AsyncContentLoadedEventId事件。
沒有同等項目。 UIA_ToolTipOpenedEventId事件。

 

從 使用者介面自動化 存取使用中輔助功能屬性和物件

Microsoft Active Accessibility 中無法使用 使用者介面自動化 的主要功能,是能夠使用單一跨進程作業擷取多個屬性。

現有的Microsoft Active Accessibility 用戶端可以使用 IUIAutomationLegacyIAccessiblePattern 介面來利用這項功能 這個介面代表一種 控件模式,該模式 會在 UI 元素上公開Microsoft Active Accessibility 屬性和方法。 擷取元素時,應用程式可以要求快取此控件模式及其屬性。

IUIAutomationLegacyIAccessiblePattern 也可讓用戶端從沒有 IAccessible 原生支援的專案取得Microsoft Active Accessibility 屬性。

IUIAutomationLegacyIAccessiblePattern 屬性中的變更不會引發 使用者介面自動化 事件。

將 使用者介面自動化 功能新增至使用中輔助功能伺服器

UI 自動化樹狀目錄概觀

UI 自動化屬性概觀

UI 自動化控制項類型概觀

UI 自動化事件概觀

Microsoft使用中輔助功能