使用者介面自動化與使用中輔助功能
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_SLIDER或ROLE_SYSTEM_MENUITEM。 從項目的角色可以了解他所能使用的功能。 使用 IAccessible::accSelect 和 IAccessible::accDoDefaultAction 等固定方法,即可與控件互動。 用戶端應用程式與UI之間的互動僅限於可透過 IAccessible完成的工作。
相反地,使用者介面自動化 將專案的控件類型與預期的功能分離,由IUIAutomationElement::CurrentControlType (或 IUIAutomationElement::CachedControlType) 屬性所描述。 功能是由提供者透過其特定介面實作所支援的控制項模式來判斷。 控制項模式可以結合來描述特定UI元素所支援的完整功能集。 某些提供者需要支援特定控制項模式。 例如,複選框的提供者必須支援 切換 控件模式。 需要其他提供者才能支援一或多個控件模式。 例如,按鈕必須支援切換或 叫 用控件模式。 其他仍不支援控制項模式。 例如,無法移動、重設大小或停駐的窗格沒有控件模式。
使用者介面自動化 支援由識別的自定義控制項UIA_CustomControlTypeId常數,而且可由 IUIAutomationElement::CurrentLocalizedControlType (或 IUIAutomationElement::CachedLocalizedControlType) 属性來描述。
下表Microsoft Active Accessibility 物件角色對應至 使用者介面自動化 控件類型。
狀態和屬性
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 | 僅適用於支援 IUIAutomationValuePattern 或 IUIAutomationRangeValuePattern 的控件類型。 範圍值會正規化為 0-100,以符合 Microsoft Active Accessibility 行為。 值會以字串表示。 |
get_accHelp | UIA_HelpTextPropertyId | |
accLocation | UIA_BoundingRectanglePropertyId | |
get_accDescription | 不支援。 | accDescription 在 Microsoft Active Accessibility 中沒有明確的規格,導致伺服器將不同的資訊放在此屬性中。 |
get_accHelpTopic | 不支援。 |
下表顯示對應至 Microsoft Active Accessibility 對象狀態常數 使用者介面自動化 屬性標識符。
如需屬性識別碼的完整清單,請參閱 屬性識別碼。
事件
不同於Microsoft Active Accessibility,使用者介面自動化 中的事件機制不會依賴 Windows 事件路由,而 Windows 事件路由會緊密系結至視窗句柄,而且不需要用戶端應用程式設定勾點。 事件的訂閱可以微調到樹狀結構的特定部分,而不只是針對特定事件。 提供者也可以追蹤正在接聽的事件,以微調引發事件。
用戶端也更容易擷取引發事件的元素,因為這些專案會直接傳遞至事件回呼。 如果客戶端訂閱事件時提供快取要求,則會自動擷取元素的屬性。
下表顯示Microsoft Active Accessibility 事件常數和 使用者介面自動化 事件標識符的對應。
從 使用者介面自動化 存取使用中輔助功能屬性和物件
Microsoft Active Accessibility 中無法使用 使用者介面自動化 的主要功能,是能夠透過單一跨進程作業擷取多個屬性。
現有的Microsoft Active Accessibility 用戶端可以使用 IUIAutomationLegacyIAccessiblePattern 介面來利用這項功能。 這個介面代表一種 控件模式,該模式 會在 UI 元素上公開Microsoft Active Accessibility 屬性和方法。 擷取元素時,應用程式可以要求快取此控件模式及其屬性。
IUIAutomationLegacyIAccessiblePattern 也可讓用戶端從沒有 IAccessible 原生支援的專案取得Microsoft Active Accessibility 屬性。
IUIAutomationLegacyIAccessiblePattern 屬性中的變更不會引發 使用者介面自動化 事件。