Benutzeroberflächenautomatisierung und Active Accessibility
Microsoft Active Accessibility ist die Legacy-API, die in Windows 95 eingeführt wurde und darauf ausgelegt ist, Windows Anwendungen zugänglich zu machen. Microsoft Benutzeroberflächenautomatisierung ist das neue Barrierefreiheitsmodell für Windows und soll die Anforderungen von Hilfstechnologieprodukten und automatisierten Testtools erfüllen. 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
- Benutzeroberflächenelemente
- Strukturansichten und Navigation
- Rollen und Steuerelementtypen
- Zustände und Eigenschaften
- Ereignisse
- Zugreifen auf Active Accessibility Eigenschaften und Objekte über Benutzeroberflächenautomatisierung
- Zugehörige Themen
Programmiersprachen
Microsoft Active Accessibility basiert auf der Component Object Model (COM) mit Unterstützung für duale Schnittstellen und ist daher in C/C++ und Skriptsprachen programmierbar.
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 enthielt. Mit Windows 7 wurde eine neue COM-basierte Client-API eingeführt, um das Programmieren Benutzeroberflächenautomatisierung Clientanwendungen in C/C++ zu vereinfachen.
Server und Clients
In Microsoft Active Accessibility kommunizieren Server und Clients direkt, größtenteils über die Serverimplementierungen der IAccessible-Schnittstelle.
In Benutzeroberflächenautomatisierung befindet sich ein Kerndienst zwischen dem Server (Anbieter) und dem Client. Der Kerndienst ruft die von Anbietern implementierten Schnittstellen auf und stellt zusätzliche Dienste bereit, z. B. das Generieren eindeutiger Laufzeitbezeichner für Benutzeroberflächenelemente. Clientanwendungen erhalten Zugriff auf diesen Kerndienst, indem sie ein CUIAutomation-Objekt erstellen. Dieses Objekt unterstützt eine Reihe von Clientschnittstellen, die von den Anbieterschnittstellen getrennt sind. Weitere Informationen finden Sie unter Erstellen des CUIAutomation-Objekts.
Benutzeroberflächenautomatisierung Anbieter können Informationen für Microsoft Active Accessibility Clients bereitstellen, und Microsoft Active Accessibility Server können Informationen für Benutzeroberflächenautomatisierung Clientanwendungen bereitstellen. Da Microsoft Active Accessibility jedoch nicht so viele Informationen verfügbar macht wie Benutzeroberflächenautomatisierung, sind die beiden Modelle nicht vollständig kompatibel.
Benutzeroberflächenelemente
Microsoft Active Accessibility stellt ein Benutzeroberflächenelement als IAccessible-Schnittstelle dar, die mit einem untergeordneten Bezeichner gekoppelt ist. Es ist schwierig, zwei IAccessible-Zeiger zu vergleichen, um zu bestimmen, ob sie auf das gleiche Element verweisen.
In Benutzeroberflächenautomatisierung 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 mit IUIAutomationElement::GetRuntimeIdabgerufen werden.
Strukturansichten und Navigation
Die Benutzeroberflächenelemente auf dem Bildschirm können als Struktur mit dem Desktop als Stamm, Anwendungsfenstern als unmittelbar untergeordnete Elemente und Elemente in Anwendungen als weitere Nachfolger angezeigt werden.
In Microsoft Active Accessibility werden viele Benutzeroberflächenelemente, die für Endbenutzer irrelevant sind, in der Struktur verfügbar gemacht. Clientanwendungen müssen alle Elemente in der Struktur untersuchen, um zu bestimmen, welche Elemente sinnvoll sind.
Benutzeroberflächenautomatisierung Clientanwendungen wird die Benutzeroberfläche über eine gefilterte Ansicht angezeigt. Die Ansicht enthält nur Elemente, die dem Benutzer Informationen geben oder mit denen der Benutzer interagieren kann. Vordefinierte Ansichten, die nur Steuerelementelemente und nur Inhaltselemente enthalten, sind verfügbar, und Clientanwendungen können benutzerdefinierte Ansichten definieren. Benutzeroberflächenautomatisierung erleichtert es dem Benutzer, die Benutzeroberfläche zu beschreiben und den Benutzer bei der Interaktion mit Anwendungen zu unterstützen.
In Microsoft Active Accessibility ist die Navigation zwischen Elementen räumlich, z. B. das Verschieben zu dem Element, das sich links auf dem Bildschirm befindet, logisch, z. B. zum nächsten Menüelement oder dem nächsten Element in der Registerkartenreihenfolge in einem Dialogfeld, oder hierarchisch, z. B. zum ersten untergeordneten Element in einem Container oder von einem untergeordneten Element zum übergeordneten Element. Die hierarchische Navigation wird durch die Tatsache kompliziert, dass untergeordnete Elemente nicht immer Objekte sind, die IAccessibleimplementieren.
In Benutzeroberflächenautomatisierung sind alle Benutzeroberflächenelemente COM-Objekte, die die IUIAutomationElement-Schnittstelle verfügbar machen und die gleiche grundlegende Funktionalität unterstützen. Aus Sicht des Anbieters implementieren COM-Objekte eine Schnittstelle, die von IRawElementProviderSimplegeerbt wird. Die Navigation ist hauptsächlich hierarchisch. das heißt, von den Eltern bis zu den Untergeordneten und von einem Gleichgeordneten zum nächsten. Die Navigation zwischen gleichgeordneten Elementen weist jedoch ein logisches Element auf, da sie möglicherweise der Reihenfolge der Registerkarten folgt. Ein Client kann mithilfe von IUIAutomationTreeWalkervon jedem Startpunkt aus mit einer beliebigen gefilterten Ansicht der Struktur navigieren. Ein Client kann auch mit IUIAutomationElement::FindFirst und IUIAutomationElement::FindAllzu bestimmten untergeordneten Oder Nachfolgern navigieren. Beispielsweise ist es einfach, alle Elemente in einem Dialogfeld abzurufen, die ein angegebenes Steuerelementmuster unterstützen.
Die Navigation in Benutzeroberflächenautomatisierung ist konsistenter als in Microsoft Active Accessibility. Einige Elemente, z. B. Dropdownlisten und Popupfenster, werden zweimal in der Microsoft Active Accessibility-Struktur angezeigt, und die Navigation über diese Elemente kann unerwartete Ergebnisse haben. Es ist schwierig, Microsoft Active Accessibility ordnungsgemäß für ein Rebar-Steuerelement zu implementieren. Benutzeroberflächenautomatisierung ermöglicht die Neuparensierung und Neupositionierung, sodass ein Element trotz der Hierarchie, die durch den Besitz von Fenstern vorgegeben wird, an einer beliebigen 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 auf 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 mithilfe fester Methoden wie IAccessible::accSelect und IAccessible::accDoDefaultActionerreicht. Die Interaktion zwischen der Clientanwendung und der Benutzeroberfläche ist auf die Möglichkeiten beschränkt, die über IAccessibleausgeführt werden können.
Im Gegensatz dazu entkoppelt Benutzeroberflächenautomatisierung den Steuerelementtyp des Elements, der von der IUIAutomationElement::CurrentControlType (oder IUIAutomationElement::CachedControlType)-Eigenschaft 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 den vollständigen Satz von Funktionen zu beschreiben, die von einem bestimmten Benutzeroberflächenelement unterstützt werden. Einige Anbieter sind erforderlich, um ein bestimmtes Steuerelementmuster zu unterstützen. Beispielsweise muss der Anbieter für ein Kontrollkästchen das Umschaltsteuerelementmuster unterstützen. Andere Anbieter müssen ein oder mehrere Steuerelementmuster unterstützen. Beispielsweise muss eine Schaltfläche entweder das Umschalten oder das Invoke-Steuerelementmuster unterstützen. Wieder andere unterstützen keine Steuerelementmuster. Beispielsweise verfügt ein Bereich, der nicht verschoben, geändert oder angedockt werden kann, über keine Steuerelementmuster.
Benutzeroberflächenautomatisierung unterstützt benutzerdefinierte Steuerelemente, die durch die UIA _ CustomControlTypeId-Konstante identifiziert werden und durch die IUIAutomationElement::CurrentLocalizedControlType (oder IUIAutomationElement::CachedLocalizedControlType)-Eigenschaft beschrieben werden können.
In der folgenden Tabelle werden Microsoft Active AccessibilityObjektrollen Benutzeroberflächenautomatisierung Steuerelementtypen zugeordnet.
Zustände und Eigenschaften
Microsoft Active Accessibility Elemente unterstützen einen gemeinsamen 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 die Eigenschaften, die für das Element nicht relevant sind.
Benutzeroberflächenautomatisierung definiert zusätzliche Eigenschaften, von denen einige zuständen in Microsoft Active Accessibility entsprechen. Einige Eigenschaften sind für alle Elemente gleich, aber andere Eigenschaften sind spezifisch für Steuerelementtypen und Steuerelementmuster. Ein Benutzeroberflächenautomatisierung Anbieter muss keine irrelevanten Eigenschaften implementieren, kann aber einen NULL-Wert für alle Eigenschaften zurückgeben, die er nicht unterstützt. Der Benutzeroberflächenautomatisierung-Kerndienst kann einige Eigenschaften vom Standardfensteranbieter abrufen, und diese werden mit Eigenschaften zusammengeführt, die explizit vom Anbieter implementiert werden.
Neben der Unterstützung vieler weiterer Eigenschaften ermöglicht Benutzeroberflächenautomatisierung eine bessere Leistung, da Eigenschaften zwischengespeichert werden können.
Die folgende Tabelle zeigt die Entsprechung zwischen einigen Eigenschaften in den beiden Modellen. Beschreibungen der Benutzeroberflächenautomatisierung Eigenschaften-IDs finden Sie unter Automation-Elementeigenschaftenbezeichner.
| Active Accessibility-Eigenschaftenaccessor | Benutzeroberflächenautomatisierung-Eigenschaften-ID | Bemerkungen |
|---|---|---|
| get _ accKeyboardShortcut | UIA _ AccessKeyPropertyId oder UIA _ AcceleratorKeyPropertyId | UIA _ AccessKeyPropertyId hat Vorrang, wenn beide vorhanden sind. |
| get _ accName | _UIA-NamePropertyId | |
| get _ accRole | UIA _ ControlTypePropertyId | Informationen zum Zuordnen 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 IUIAutomationRangeValuePatternunterstützen. Bereichswerte werden auf 0 bis 100 normalisiert, um mit Microsoft Active Accessibility Verhalten konsistent zu sein. Werte werden als Zeichenfolgen dargestellt. |
| get _ accHelp | UIA _ HelpTextPropertyId | |
| accLocation | UIA _ BoundingRectanglePropertyId | |
| get _ accDescription | Wird nicht unterstützt. | accDescription hatte keine klare Spezifikation in Microsoft Active Accessibility, was dazu führte, dass Server verschiedene Informationen in dieser Eigenschaft platzierten. |
| get _ accHelpTopic | Wird nicht unterstützt. |
Die folgende Tabelle zeigt die Benutzeroberflächenautomatisierung Eigenschaften-IDs, die Microsoft Active Accessibility Objektzustandskonstantenentsprechen.
Eine vollständige Liste der Eigenschaften-IDs finden Sie unter Eigenschaftenbezeichner.
Events
Im Gegensatz zu Microsoft Active Accessibility basiert der Ereignismechanismus in Benutzeroberflächenautomatisierung nicht auf Windows Ereignisrouting, das eng an Fensterhandles gebunden ist und die Clientanwendung keine Hooks einrichten muss. Abonnements für Ereignisse können auf bestimmte Teile der Struktur optimiert werden, nicht nur auf bestimmte Ereignisse. Anbieter können auch das Auslösen von Ereignissen optimieren, indem sie nachverfolgen, auf welche Ereignisse gelescht wird.
Außerdem ist es für Clients 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 Cacheanforderung bereitgestellt wurde.
Die folgende Tabelle zeigt die Entsprechung von Microsoft Active Accessibility Ereigniskonstanten und Benutzeroberflächenautomatisierung Ereignis-IDs.
Zugreifen auf Active Accessibility Eigenschaften und Objekte über Benutzeroberflächenautomatisierung
Ein wichtiges Feature von Benutzeroberflächenautomatisierung, das in Microsoft Active Accessibility nicht verfügbar ist, ist die Möglichkeit, mehrere Eigenschaften mit einem einzelnen 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, Microsoft Active Accessibility Eigenschaften von Elementen abzurufen, die keine native Unterstützung für IAccessiblehaben.
Änderungen an den Eigenschaften eines IUIAutomationLegacyIAccessiblePattern-Ereignisses werden nicht Benutzeroberflächenautomatisierung Ereignisse auslösen.
Zugehörige Themen
-
Hinzufügen Benutzeroberflächenautomatisierung Funktionalität zu Active Accessibility Servern
-
Übersicht über die Benutzeroberflächenautomatisierungs-Struktur
-
Übersicht über die Benutzeroberflächenautomatisierungs-Eigenschaften
-
Übersicht über Steuerelementtypen für Benutzeroberflächenautomatisierung
-
Übersicht über Benutzeroberflächenautomatisierungs-Ereignisse