Benutzeroberflächenautomatisierung und aktive Barrierefreiheit
Microsoft Active Accessibility ist die Legacy-API, die in Windows 95 eingeführt wurde, und wurde entwickelt, um Windows-Anwendungen barrierefrei zu machen. Microsoft UI Automation ist das neue Zugriffsmodell für Windows und richtet sich an die Bedürfnisse von Hilfstechnologieprodukten und automatisierte Testtools. Die Benutzeroberflächenautomatisierung bietet viele Verbesserungen gegenüber Microsoft Active Accessibility. In diesem Thema werden die Unterschiede zwischen den beiden Technologien erläutert.
Dieses Thema enthält folgende Abschnitte:
- Programmiersprachen
- Server und Clients
- UI Elements
- Strukturansichten und Navigation
- Rollen und Steuerelementtypen
- Zustände und Eigenschaften
- Ereignisse
- Zugriff auf aktive Barrierefreiheitseigenschaften und -objekte aus der Benutzeroberflächenautomatisierung
- Verwandte Themen
Programmiersprachen
Microsoft Active Accessibility basiert auf dem Component Object Model (COM) mit Unterstützung für duale Schnittstellen und kann daher in C/C++ und Skriptsprachen programmiert werden.
Als Benutzeroberflächenautomatisierung eingeführt wurde, war die Client-API auf verwalteten Code beschränkt, während die Anbieter-API sowohl verwaltete als auch nicht verwaltete Implementierungen enthält. Mit Windows 7 wurde eine neue COM-basierte Client-API eingeführt, um die Programmierung der Clientanwendungen in C/C++ für die Benutzeroberflächenautomatisierung zu vereinfachen.
Server und Clients
In Microsoft Active Accessibility kommunizieren Server und Clients direkt, hauptsächlich über die Serverimplementierung der IAccessible-Schnittstelle.
In der Benutzeroberflächenautomatisierung liegt ein Kerndienst zwischen Server (Anbieter) und Client. Der Kerndienst führt Aufrufe an die von Anbietern implementierten Schnittstellen aus und bietet zusätzliche Dienste, z. B. das Generieren eindeutiger Laufzeitbezeichner für Benutzeroberflächenelemente. Clientanwendungen erhalten Zugriff auf diesen Kerndienst, indem ein CUIAutomation-Objekt erstellt wird. Dieses Objekt unterstützt eine Reihe von Clientschnittstellen, die von den Anbieterschnittstellen getrennt sind. Weitere Informationen finden Sie unter Erstellen des CUIAutomation-Objekts.
Benutzeroberflächenautomatisierungs-Anbieter können Informationen zu Microsoft Active Accessibility-Clients bereitstellen, während Microsoft Active Accessibility-Server Informationen zu Clientanwendungen für die Automatisierung der Benutzeroberfläche bereitstellen können. Da Microsoft Active Accessibility jedoch nicht so viele Informationen wie UI Automation bereitstellt, sind die beiden Modelle nicht vollständig kompatibel.
UI Elements
Microsoft Active Accessibility stellt ein UI-Element als IAccessible-Schnittstelle dar, die mit einem untergeordneten Bezeichner gekoppelt ist. Es ist schwierig, zwei IAccessible-Zeiger zu vergleichen, um festzustellen, ob sie auf dasselbe Element verweisen.
In UI Automation wird jedes Element als Objekt dargestellt, das die IUIAutomationElement-Schnittstelle für Clients verfügbar macht. Elemente können anhand ihrer Laufzeitbezeichner verglichen werden, die mithilfe von IUIAutomationElement::GetRuntimeId abgerufen werden.
Strukturansichten und Navigation
Die Benutzeroberflächenelemente auf dem Bildschirm können als Baumstruktur betrachtet werden, wobei der Desktop als Stamm, die Anwendungsfenster als direkt untergeordnete Elemente und Elemente innerhalb von Anwendungen als weitere Nachfolger betrachtet werden können.
In Microsoft Active Accessibility werden viele Benutzeroberflächenelemente, die für Endbenutzer irrelevant sind, in der Baumstruktur verfügbar gemacht. Clientanwendungen müssen alle Elemente in der Struktur untersuchen, um zu bestimmen, welche Elemente sinnvoll sind.
Benutzeroberflächenautomatisierungs-Clientanwendungen betrachten die Benutzeroberfläche über eine gefilterte Ansicht. Die Ansicht enthält nur Elemente, die dem Benutzer Informationen geben oder mit denen der Benutzer interagieren kann. Es stehen vordefinierte Ansichten zur Verfügung, die nur Steuerelemente und nur Inhaltselemente enthalten. Clientanwendungen können benutzerdefinierte Ansichten definieren. Benutzeroberflächenautomatisierung erleichtert die Beschreibung der Benutzeroberfläche für den Benutzer und die Interaktion des Benutzers mit Anwendungen.
In Microsoft Active Accessibility erfolgt die Navigation zwischen Elementen räumlich, beispielsweise beim Wechseln zum Element, das sich links auf dem Bildschirm befindet, logisch, z. B. beim Wechseln zum nächsten Menüelement oder zum nächsten Element in der Tabulatorreihenfolge in einem Dialogfeld, oder hierarchisch, beispielsweise beim Wechseln zum ersten untergeordneten Element in einem Container oder von einem untergeordneten Element zu seinem übergeordneten Element. Die hierarchische Navigation erweist sich durch die Tatsache als kompliziert, dass untergeordnete Elemente nicht immer Objekte sind, die IAccessible implementieren.
In der Benutzeroberflächenautomatisierung sind alle Benutzeroberflächenelemente COM-Objekte, die die IUIAutomationElement-Schnittstelle verfügbar machen und die gleichen grundlegenden Funktionen unterstützen. Aus Sicht des Anbieters implementieren COM-Objekte eine Schnittstelle, die von IRawElementProviderSimple geerbt wird. Die Navigation ist hauptsächlich hierarchisch; das heißt, von untergeordneten zu übergeordneten Elementen und von einem gleichgeordneten Element zum nächsten. Die Navigation zwischen gleichgeordneten Elementen weist jedoch ein logisches Element auf, da sie der Aktivierreihenfolge folgen kann. Ein Client kann von jedem beliebigen Startpunkt aus navigieren und dabei jede beliebige gefilterte Ansicht des Baums verwenden, indem er IUIAutomationTreeWalker verwendet. Ein Client kann auch zu bestimmten untergeordneten oder gleichgeordneten Elementen durch Verwendung von IUIAutomationElement::FindFirst und IUIAutomationElement::FindAll navigieren. Beispielsweise ist es einfach, alle Elemente in einem Dialogfeld abzurufen, die ein angegebenes Steuerelementmuster unterstützen.
Die Navigation in der Benutzeroberflächenautomatisierung ist konsistenter als in Microsoft Active Accessibility. Einige Elemente wie Dropdownlisten und Popupfenster werden in der Microsoft Active Accessibility-Struktur zweimal angezeigt und die Navigation dieser Elemente kann möglicherweise zu unerwarteten Ergebnissen führen. Es ist schwierig, Microsoft Active Accessibility für ein rebar-Steuerelement ordnungsgemäß zu implementieren. Die Benutzeroberflächenautomatisierung ermöglicht die erneute Zuordnung zu übergeordneten Elementen und die Neupositionierung, sodass ein Element ungeachtet der Hierarchie, die sich durch den Besitz von Fenstern ergibt, an eine beliebige Stelle in der Struktur platziert werden kann.
Rollen und Steuerelementtypen
Microsoft Active Accessibility verwendet die accRole-Eigenschaft (IAccessible::get_accRole), um eine Beschreibung der Elementrolle in der Benutzeroberfläche abzurufen, z. B. ROLE_SYSTEM_SLIDER oder ROLE_SYSTEM_MENUITEM. Die Rolle eines Elements ist der wichtigste Anhaltspunkt für seine verfügbaren Funktionen. Die Interaktion mit einem Steuerelement wird mit festen Methoden wie IAccessible::accSelect und IAccessible::accDoDefaultAction erreicht. Die Interaktion zwischen der Clientanwendung und der Benutzeroberfläche ist durch die Möglichkeiten von IAccessible beschränkt.
Im Gegensatz dazu entkoppelt die Benutzeroberflächenautomatisierung den Steuerelementtyp des Elements, das von der Eigenschaft IUIAutomationElement::CurrentControlType (oder IUIAutomationElement::CachedControlType) beschrieben wird, von der erwarteten Funktionalität. Die Funktionalität wird durch die Steuerelementmuster bestimmt, die vom Anbieter durch Implementieren spezieller Schnittstellen unterstützt werden. Steuerelementmuster können kombiniert werden, um sämtliche Funktionen zu beschreiben, die von einem bestimmten Benutzeroberflächenelement unterstützt werden. Einige Anbieter müssen ein bestimmtes Steuerelementmuster unterstützen. Beispielsweise muss der Anbieter für ein Kontrollkästchen das Umschalt-Steuerelementmuster unterstützen. Andere Anbieter müssen ein oder mehrere Steuerungsmuster unterstützen. Beispielsweise muss eine Schaltfläche entweder das Umschalt- oder das Aufruf-Steuerelementmuster unterstützen. Wieder andere unterstützen keine Steuerelementmuster. Beispielsweise weist ein Bereich, der nicht verschoben, geändert oder angedockt werden kann, keine Steuerelementmuster auf.
Die Benutzeroberflächenautomatisierung unterstützt benutzerdefinierte Steuerelemente, die durch die UIA_CustomControlTypeId-Konstante identifiziert und durch die Eigenschaft IUIAutomationElement::CurrentLocalizedControlType (oder IUIAutomationElement::CachedLocalizedControlType) beschrieben werden können.
In der folgenden Tabelle werden Microsoft Active Accessibility-Objektrollen den Steuerelementtypen für die Benutzeroberflächenautomatisierung zugeordnet.
Zustände und Eigenschaften
Microsoft Active Accessibility-Elemente unterstützen einen allgemeinen Satz von Eigenschaften. Einige Eigenschaften, z. B. accState, müssen je nach Elementrolle unterschiedliche Bedingungen beschreiben. Server müssen alle Methoden von IAccessible implementieren, die eine Eigenschaft zurückgeben, auch solche Eigenschaften, die für das Element nicht relevant sind.
Die Benutzeroberflächenautomatisierung definiert zusätzliche Eigenschaften, von denen einige den Zuständen in Microsoft Active Accessibility entsprechen. Einige Eigenschaften beziehen sich auf alle Elemente, während andere Eigenschaften nur für Steuerelementtypen und Steuerelementmuster gelten. Ein Benutzeroberflächenautomatisierungs-Anbieter muss keine irrelevanten Eigenschaften implementieren, sondern kann einfach einen Null-Wert für alle nicht unterstützten Eigenschaften zurückgeben. Der Benutzeroberflächenautomatisierungs-Kerndienst kann einige Eigenschaften aus dem Standardfenster abrufen. Diese werden dann mit Eigenschaften zusammengeführt, die vom Anbieter explizit implementiert wurden.
Neben der Unterstützung vieler weiterer Eigenschaften ermöglicht die Benutzeroberflächenautomatisierung eine bessere Leistung, indem Eigenschaften zwischengespeichert werden können.
Die folgende Tabelle zeigt die Übereinstimmung zwischen einigen Eigenschaften der beiden Modelle. Beschreibungen der Eigenschafts-IDs der Benutzeroberflächenautomatisierung finden Sie unter Automatisierungselement-Eigenschaftenbezeichner.
Active Accessibility-Eigenschaftenaccessor | Eigenschafts-ID der Benutzeroberflächenautomatisierung | Hinweise |
---|---|---|
get_accKeyboardShortcut | UIA_AccessKeyPropertyId oder UIA_AcceleratorKeyPropertyId | UIA_AccessKeyPropertyId hat Vorrang, wenn beide vorhanden sind. |
get_accName | UIA_NamePropertyId | |
get_accRole | UIA_ControlTypePropertyId | Informationen zur Zuordnung von Rollen zu Steuerelementtypen finden Sie in der vorherigen Tabelle. |
get_accValue | UIA_ValueValuePropertyId oder UIA_RangeValueValuePropertyId | Gilt nur für Steuerelementtypen, die IUIAutomationValuePattern oder IUIAutomationRangeValuePattern unterstützen. Bereichswerte werden auf 0–100 normalisiert, um mit dem Microsoft Active Accessibility-Verhalten konsistent zu sein. Die Werte werden als Zeichenfolgen dargestellt. |
get_accHelp | UIA_HelpTextPropertyId | |
accLocation | UIA_BoundingRectanglePropertyId | |
get_accDescription | Nicht unterstützt. | accDescription hat in Microsoft Active Accessibility keine klare Spezifikation, was dazu geführt hat, dass Server unterschiedliche Informationselemente in dieser Eigenschaft platziert haben. |
get_accHelpTopic | Nicht unterstützt. |
In der folgenden Tabelle sind die Eigenschafts-IDs für die Benutzeroberflächenautomatisierung aufgeführt, die den Objekt-Zustandskonstanten von Microsoft Active Accessibility entsprechen.
Eine vollständige Liste der Eigenschafts-IDs finden Sie unter Eigenschaftenbezeichner.
Ereignisse
Anders als bei Microsoft Active Accessibility basiert der Ereignismechanismus in der Benutzeroberflächenautomatisierung nicht auf der Windows-Ereignisweiterleitung, die eng an Fensterhandles gebunden ist, und erfordert nicht, dass die Clientanwendung Hooks einrichtet. Abonnements für Ereignisse können auf bestimmte Teile der Struktur und nicht nur auf bestimmte Ereignisse abgestimmt werden. Anbieter können zudem das Auslösen von Ereignissen optimieren, indem sie verfolgen, welche Ereignisse aufgeführt werden.
Es ist für Clients außerdem einfacher, die Elemente abzurufen, die Ereignisse auslösen, da diese direkt an den Ereignisrückruf übergeben werden. Eigenschaften des Elements werden automatisch vorab abgerufen, wenn beim Abonnieren des Ereignisses durch den Client eine Cache-Anforderung bereitgestellt wurde.
Die folgende Tabelle zeigt die Entsprechung von Microsoft Active Accessibility-Ereigniskonstanten und Ereignis-IDs der Benutzeroberflächenautomatisierung.
Zugriff auf aktive Barrierefreiheitseigenschaften und -objekte aus der Benutzeroberflächenautomatisierung
Ein wichtiges Feature der Benutzeroberflächenautomatisierung, das in Microsoft Active Accessibility nicht verfügbar ist, ist die Möglichkeit, mehrere Eigenschaften mit einem einzigen prozessübergreifenden Vorgang abzurufen.
Vorhandene Microsoft Active Accessibility-Clients können diese Möglichkeit mithilfe der IUIAutomationLegacyIAccessiblePattern-Schnittstelle nutzen. Diese Schnittstelle stellt ein Steuerelementmuster dar, das Microsoft Active Accessibility-Eigenschaften und -Methoden für Benutzeroberflächenelemente verfügbar macht. Beim Abrufen von Elementen kann eine Anwendung anfordern, dass dieses Steuerelementmuster und seine Eigenschaften zwischengespeichert werden.
IUIAutomationLegacyIAccessiblePattern ermöglicht Clients auch das Abrufen von Microsoft Active Accessibility-Eigenschaften von Elementen, die keine systemeigene Unterstützung für IAccessible haben.
Änderungen an den Eigenschaften von IUIAutomationLegacyIAccessiblePattern lösen keine Ereignisse der Benutzeroberflächenautomatisierung aus.
Zugehörige Themen
-
Hinzufügen von Benutzeroberflächenautomatisierungsfunktionen zu aktiven Barrierefreiheitsservern
-
Übersicht über die Benutzeroberflächenautomatisierungs-Struktur
-
Übersicht über die Benutzeroberflächenautomatisierungs-Eigenschaften
-
Übersicht über Steuerelementtypen für Benutzeroberflächenautomatisierung
-
Übersicht über Benutzeroberflächenautomatisierungs-Ereignisse