Benutzeroberflächenautomatisierung und Microsoft Active Accessibility
Hinweis |
---|
Diese Dokumentation ist für .NET Framework-Entwickler vorgesehen, die die verwalteten UI Automation-Klassen verwenden möchten, die im System.Windows.Automation-Namespace definiert sind.Aktuelle Informationen zu UI Automation finden Sie unter Windows Automation API: UI Automation. |
Microsoft Active Accessibility war die frühere Lösung für den leichteren Zugriff auf Anwendungen. Microsoft UI Automation ist das neue Barrierefreiheitsmodell für Microsoft Windows. Es wurde für die Anforderungen von Hilfstechnologieprodukten und automatisierten Testtools entwickelt. UI Automation bietet gegenüber Active Accessibility viele Verbesserungen.
In diesem Thema werden die wesentlichen Features von UI Automation dargestellt und erläutert, wie diese sich von Active Accessibility unterscheiden.
Dieses Thema enthält folgende Abschnitte.
- Programmiersprachen
- Unterstützung in Windows Presentation Foundation
- Server und Clients
- Benutzeroberflächenelemente
- Strukturansichten und Navigation
- Rollen und Steuerelementtypen
- Zustände und Eigenschaften
- Ereignisse
- Sicherheit
- Verwandte Abschnitte
Programmiersprachen
Active Accessibility basiert auf Component Object Model (COM) mit Unterstützung für duale Schnittstellen und ist daher in C/C++, Microsoft Visual Basic 6.0 und Skriptsprachen programmierbar. UI Automation (einschließlich der clientseitigen Anbieterbibliothek für Standardsteuerelemente) ist in verwaltetem Code geschrieben, und Benutzeroberflächenautomatisierungs-Client-Anwendungen werden am einfachsten mit Microsoft Visual C# oder Microsoft Visual Basic .NET programmiert. Benutzeroberflächenautomatisierungs-Anbieter, also Schnittstellenimplementierungen, können in verwaltetem Code oder C/C++ geschrieben werden.
Unterstützung in Windows Presentation Foundation
Windows Presentation Foundation (WPF) ist das neue Modell zum Erstellen von Benutzeroberflächen. WPF-Elemente bieten keine systemeigene Unterstützung für Active Accessibility. Stattdessen wird UI Automation unterstützt, wodurch eine überbrückende Unterstützung für Active Accessibility-Clients besteht. Nur Clients, die speziell für UI Automation geschrieben sind, können die Barrierefreiheitsfeatures von WPF, wie z. B. die umfangreiche Unterstützung für Text, voll ausschöpfen.
Server und Clients
In Active Accessibility kommunizieren Server und Clients direkt miteinander, hauptsächlich durch die serverseitige Implementierung von IAccessible.
In UI Automation befindet sich zwischen dem Server (Anbieter genannt) und dem Client ein Basisdienst. Der Basisdienst führt Aufrufe an die von Anbietern implementierten Schnittstellen durch und bietet zusätzliche Dienste, wie das Generieren eindeutiger Laufzeitbezeichner für Elemente. Clientanwendungen verwenden Bibliotheksfunktionen, um den UI Automation-Dienst aufzurufen.
Benutzeroberflächenautomatisierungs-Anbieter können für Active Accessibility-Clients Informationen bereitstellen, und Active Accessibility-Server können für Benutzeroberflächenautomatisierungs-Client-Anwendungen Informationen bereitstellen. Da Active Accessibility jedoch nicht so viele Informationen wie UI Automation verfügbar macht, sind die beiden Modelle nur eingeschränkt kompatibel.
Benutzeroberflächenelemente
Active Accessibility stellt UI-Elemente entweder als IAccessible-Schnittstelle oder als untergeordneten Bezeichner dar. Es ist schwierig, zwei IAccessible-Zeiger miteinander zu vergleichen, um zu bestimmen, ob sie auf dasselbe Element verweisen.
In UI Automation wird jedes Element als AutomationElement-Objekt dargestellt. Der Vergleich wird mithilfe des Gleichheitsoperators oder der Equals-Methode durchgeführt. Dabei wird jeweils der eindeutige Laufzeitbezeichner der Elemente verglichen.
Strukturansichten und Navigation
Die user interface (UI)-Elemente auf dem Bildschirm werden als Baumstruktur angezeigt, mit dem Desktop als Stamm, Anwendungsfenstern als unmittelbar untergeordnete Elemente sowie Elementen innerhalb von Anwendungen auf den Ebenen darunter.
In Active Accessibility werden viele Automatisierungselemente in der Struktur verfügbar gemacht, die für Endbenutzer nicht relevant sind. Clientanwendungen müssen alle Elemente überprüfen, um zu bestimmen, welche benötigt werden.
Benutzeroberflächenautomatisierungs-Client-Anwendungen sehen die UI über eine gefilterte Ansicht. Die Ansicht enthält nur Elemente, die von Interesse sind, also diejenigen, die Informationen für den Benutzer enthalten oder Interaktion ermöglichen. Vordefinierte Ansichten nur von Steuerelementen und Inhaltselementen stehen zur Verfügung. Zusätzlich können durch Anwendungen benutzerdefinierte Ansichten definiert werden. UI Automation vereinfacht die Aufgabe, dem Benutzer die UI zu beschreiben und die Interaktion mit der Anwendung zu erleichtern.
Die Navigation zwischen Elementen in Active Accessibility ist entweder räumlich (z. B. Wechseln zum Element, das auf der linken Seite des Bildschirms liegt), logisch (z. B. Wechseln zum nächsten Menüelement oder zum nächsten Element in der Aktivierreihenfolge innerhalb eines Dialogfelds) oder hierarchisch (z. B. Wechseln zum ersten übergeordneten Element in einem Container oder vom übergeordneten zum untergeordneten Element). Die hierarchische Navigation wird dadurch kompliziert, dass es sich bei untergeordneten Elementen nicht immer um Objekte handelt, die IAccessible implementieren.
In UI Automation sind alle UI-Elemente AutomationElement-Objekte, die die gleiche grundlegende Funktionalität unterstützen. (Aus Sicht des Anbieters sind sie Objekte, die eine von IRawElementProviderSimple geerbte Schnittstelle implementieren.) Die Navigation ist hauptsächlich hierarchisch: von übergeordneten zu untergeordneten Elementen und von einem nebengeordneten Element zum nächsten. (Die Navigation zwischen nebengeordneten Elementen hat ein logisches Element, da sie sich eventuell nach der Aktivierreihenfolge richtet.) Mithilfe der TreeWalker-Klasse können Sie von jedem Startpunkt aus in einer beliebigen gefilterten Ansicht der Struktur navigieren. Mithilfe von FindFirst und FindAll können Sie außerdem zu bestimmten untergeordneten oder Nachfolgerelementen navigieren. Beispielsweise ist es sehr einfach, alle Elemente in einem Dialogfeld abzurufen, die ein bestimmtes Steuerelementmuster unterstützen.
Die Navigation in UI Automation ist konsistenter als in Active Accessibility. Einige Elemente wie Dropdownlisten und Popupfenster werden in der Active Accessibility-Struktur doppelt angezeigt, und die Navigation kann zu unerwarteten Ergebnissen führen. Es ist eigentlich nicht möglich, Active Accessibility für ein Grundleisten-Steuerelement ordnungsgemäß zu implementieren. UI Automation ermöglicht ein erneutes Zuweisen zu übergeordneten Elementen und eine erneute Positionierung, sodass ein Element ungeachtet der Hierarchie, die auf dem Besitz von Fenstern beruht, überall in der Struktur platziert werden kann.
Rollen und Steuerelementtypen
Active Accessibility verwendet die accRole-Eigenschaft (IAccessible::get_actRole), um eine Beschreibung der Rolle des Elements in UI abzurufen, wie z. B. ROLE_SYSTEM_SLIDER oder ROLE_SYSTEM_MENUITEM. Die Rolle eines Elements ist der Hauptanhaltspunkt für seine verfügbare Funktionalität. Die Interaktion mit einem Steuerelement wird mithilfe fester Methoden wie IAccessible::accSelect und IAccessible::accDoDefaultAction erreicht. Die Interaktion zwischen der Clientanwendung und UI ist auf die Funktionsweise von IAccessible beschränkt.
Im Gegensatz dazu entkoppelt UI Automation den Steuerelementtyp des Elements (beschrieben durch die ControlType-Eigenschaft) weitgehend von seiner zu erwartenden Funktionalität. Die Funktionalität wird durch die Steuerelementmuster festgelegt, die vom Anbieter durch Implementieren spezieller Schnittstellen unterstützt werden. Steuerelementmuster können miteinander kombiniert werden, um den vollständigen Funktionssatz zu beschreiben, der von einem bestimmten UI-Element unterstützt wird. Einige Anbieter müssen ein bestimmtes Steuerelementmuster unterstützen. Beispielsweise muss der Anbieter für ein Kontrollkästchen das Toggle-Steuerelementmuster unterstützen. Andere Anbieter müssen von mehreren Steuerelementmustern mindestens eines unterstützen. Beispielsweise muss eine Schaltfläche entweder Toggle oder Invoke unterstützen. Wieder andere Anbieter unterstützen gar keine Steuerelementmuster. Beispielsweise verfügt ein Bereich, der nicht verschoben, in der Größe geändert oder angedockt werden kann, über keine Steuerelementmuster.
UI Automation unterstützt benutzerdefinierte Steuerelemente, die durch die Custom-Eigenschaft festgelegt werden und durch die LocalizedControlTypeProperty-Eigenschaft beschrieben werden können.
Die folgende Tabelle enthält die Zuordnung von Active Accessibility-Rollen zu UI Automation-Steuerelementtypen.
Active Accessibility-Rolle |
UI Automation-Steuerelementtyp |
---|---|
ROLE_SYSTEM_PUSHBUTTON |
Button |
ROLE_SYSTEM_CLIENT |
Calendar |
ROLE_SYSTEM_CHECKBUTTON |
Kontrollkästchen |
ROLE_SYSTEM_COMBOBOX |
Kombinationsfeld |
ROLE_SYSTEM_CLIENT |
Benutzerdefiniert |
ROLE_SYSTEM_LIST |
Datenraster |
ROLE_SYSTEM_LISTITEM |
Datenelement |
ROLE_SYSTEM_DOCUMENT |
Dokument |
ROLE_SYSTEM_TEXT |
Edit |
ROLE_SYSTEM_GROUPING |
Gruppe |
ROLE_SYSTEM_LIST |
Header |
ROLE_SYSTEM_COLUMNHEADER |
Headerelement |
ROLE_SYSTEM_LINK |
Link |
ROLE_SYSTEM_GRAPHIC |
Bild |
ROLE_SYSTEM_LIST |
Liste |
ROLE_SYSTEM_LISTITEM |
Listenelement |
ROLE_SYSTEM_MENUPOPUP |
Menü |
ROLE_SYSTEM_MENUBAR |
Menüleiste |
ROLE_SYSTEM_MENUITEM |
Menüelement |
ROLE_SYSTEM_PANE |
Bereich |
ROLE_SYSTEM_PROGRESSBAR |
Statusanzeige |
ROLE_SYSTEM_RADIOBUTTON |
Optionsfeld |
ROLE_SYSTEM_SCROLLBAR |
Bildlaufleiste |
ROLE_SYSTEM_SEPARATOR |
Trennzeichen |
ROLE_SYSTEM_SLIDER |
Schieberegler |
ROLE_SYSTEM_SPINBUTTON |
Drehfeld |
ROLE_SYSTEM_SPLITBUTTON |
Trennschaltfläche |
ROLE_SYSTEM_STATUSBAR |
Statusleiste |
ROLE_SYSTEM_PAGETABLIST |
Registerkarte |
ROLE_SYSTEM_PAGETAB |
Registerkartenelement |
ROLE_SYSTEM_TABLE |
Tabelle |
ROLE_SYSTEM_STATICTEXT |
Text |
ROLE_SYSTEM_INDICATOR |
Ziehpunkt |
ROLE_SYSTEM_TITLEBAR |
Titelleiste |
ROLE_SYSTEM_TOOLBAR |
Symbolleiste |
ROLE_SYSTEM_TOOLTIP |
ToolTip |
ROLE_SYSTEM_OUTLINE |
Strukturansicht |
ROLE_SYSTEM_OUTLINEITEM |
Strukturelement |
ROLE_SYSTEM_WINDOW |
Fenster |
Weitere Informationen zu den unterschiedlichen Steuerelementtypen finden Sie unter Steuerelementtypen der Benutzeroberflächenautomatisierung.
Zustände und Eigenschaften
In Active Accessibility unterstützen Elemente einen allgemeinen Eigenschaftensatz, und manche Eigenschaften (wie z. B. accState) müssen je nach Rolle des Elements sehr unterschiedliche Dinge beschreiben. Server müssen alle Methoden von IAccessible implementieren, die eine Eigenschaft zurückgeben. Dies gilt auch für diejenigen, die für das Element nicht relevant sind.
Mit UI Automation werden wesentlich mehr Eigenschaften definiert, von denen einige Zuständen in Active Accessibility entsprechen. Manche beziehen sich auf alle Elemente, andere dagegen nur auf Steuerelementtypen und Steuerelementmuster. Eigenschaften werden durch eindeutige Bezeichner unterschieden, und die meisten Eigenschaften können mithilfe einer einzelnen Methode, GetCurrentPropertyValue oder GetCachedPropertyValue, abgerufen werden. Viele Eigenschaften können auch leicht über die Eigenschaftenaccessoren Current und Cached abgerufen werden.
Nicht relevante Eigenschaften müssen von einem Benutzeroberflächenautomatisierungs-Anbieter nicht implementiert werden. Für nicht unterstützte Eigenschaften kann jedoch einfach ein null-Wert zurückgegeben werden. Auch der UI Automation-Basisdienst kann einige Eigenschaften vom Standardfensteranbieter abrufen. Diese werden dann mit Eigenschaften zusammengeführt, die vom Anbieter explizit implementiert werden.
Neben den vielen weiteren unterstützten Eigenschaften bietet UI Automation eine bessere Leistung, indem mehrere Eigenschaften mit einem einzigen prozessübergreifenden Aufruf abgefragt werden können.
In der folgenden Tabelle wird die Entsprechung zwischen Eigenschaften der beiden Modelle dargestellt.
Active Accessibility-Eigenschaftenaccessor |
UI Automation-Eigenschaften-ID |
Hinweise |
---|---|---|
get_accKeyboardShortcut |
Wenn beide Attribute vorhanden sind, hat AccessKeyProperty Vorrang. |
|
get_accName |
|
|
get_accRole |
Die Zuordnung von Rollen zu Steuerelementtypen finden Sie in der vorherigen Tabelle. |
|
get_accValue |
Gültig nur für Steuerelementtypen, die ValuePattern oder RangeValuePattern unterstützen. RangeValue-Werte werden auf 0-100 normalisiert, um mit dem MSAA-Verhalten konsistent zu sein. Für Wertelemente wird eine Zeichenfolge verwendet. |
|
get_accHelp |
||
accLocation |
||
get_accDescription |
Nicht unterstützt in UI Automation |
accDescription hatte keine eindeutige Spezifikation in MSAA. Dadurch platzierten Anbieter verschiedene Arten von Informationen in dieser Eigenschaft. |
get_accHelpTopic |
Nicht unterstützt in UI Automation |
In der folgenden Tabelle wird dargestellt, welche UI Automation-Eigenschaften Active Accessibility-Zustandskonstanten entsprechen.
Active Accessibility-Zustand |
UI Automation-Eigenschaft |
Löst Zustandsänderung aus? |
---|---|---|
STATE_SYSTEM_CHECKED |
Für Kontrollkästchen, ToggleStateProperty Für Optionsfeld, IsSelectedProperty |
J |
STATE_SYSTEM_COLLAPSED |
J |
|
STATE_SYSTEM_EXPANDED |
J |
|
STATE_SYSTEM_FOCUSABLE |
N |
|
STATE_SYSTEM_FOCUSED |
N |
|
STATE_SYSTEM_HASPOPUP |
ExpandCollapsePattern für Menüelemente |
N |
STATE_SYSTEM_INVISIBLE |
IsOffscreenProperty = True und GetClickablePoint verursacht NoClickablePointException |
N |
STATE_SYSTEM_LINKED |
N |
|
STATE_SYSTEM_MIXED |
N |
|
STATE_SYSTEM_MOVEABLE |
N |
|
STATE_SYSTEM_MUTLISELECTABLE |
N |
|
STATE_SYSTEM_OFFSCREEN |
IsOffscreenProperty = True |
N |
STATE_SYSTEM_PROTECTED |
N |
|
STATE_SYSTEM_READONLY |
RangeValuePattern.IsReadOnlyProperty und ValuePattern.IsReadOnlyProperty |
N |
STATE_SYSTEM_SELECTABLE |
SelectionItemPattern wird unterstützt |
N |
STATE_SYSTEM_SELECTED |
N |
|
STATE_SYSTEM_SIZEABLE |
N |
|
STATE_SYSTEM_UNAVAILABLE |
J |
Die folgenden Zustände wurden von den meisten Active Accessibility-Steuerelementservern nicht implementiert oder haben in UI Automation keine Entsprechung.
Active Accessibility-Zustand |
Hinweise |
---|---|
STATE_SYSTEM_BUSY |
In UI Automation nicht verfügbar |
STATE_SYSTEM_DEFAULT |
In UI Automation nicht verfügbar |
STATE_SYSTEM_ANIMATED |
In UI Automation nicht verfügbar |
STATE_SYSTEM_EXTSELECTABLE |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_MARQUEED |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_SELFVOICING |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_TRAVERSED |
In UI Automation nicht verfügbar |
STATE_SYSTEM_ALERT_HIGH |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_ALERT_MEDIUM |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_ALERT_LOW |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_FLOATING |
Im Allgemeinen nicht durch Active Accessibility-Server implementiert |
STATE_SYSTEM_HOTTRACKED |
In UI Automation nicht verfügbar |
STATE_SYSTEM_PRESSED |
In UI Automation nicht verfügbar |
Eine vollständige Liste der UI Automation-Eigenschaftenbezeichner finden Sie unter Übersicht über die Benutzeroberflächenautomatisierungs-Eigenschaften.
Ereignisse
Der Ereignismechanismus in UI Automation ist im Gegensatz zu dem in Active Accessibility nicht vom Windows-Ereignisrouting abhängig (welches eng mit Fensterhandles verbunden ist) und erfordert keine Einrichtung von Hooks durch die Clientanwendung. Abonnements für Ereignisse können nicht nur für spezielle Ereignisse optimiert werden, sondern für bestimmte Teile der Struktur. Anbieter können außerdem das Auslösen von Ereignissen optimieren, indem nachverfolgt wird, welche Ereignisse überwacht werden.
Darüber hinaus ist es für Clients leichter die Elemente abzurufen, welche Ereignisse auslösen, da diese direkt an den Ereignisrückruf übergeben werden. Eigenschaften des Elements werden automatisch vorab abgerufen, wenn eine Cacheanforderung aktiv war, während das Ereignis vom Client abonniert wurde.
In der folgenden Tabelle wird die Entsprechung von Active Accessibility-WinEvents und UI Automation-Ereignissen dargestellt.
WinEvent |
UI Automation-Ereignisbezeichner |
---|---|
EVENT_OBJECT_ACCELERATORCHANGE |
AcceleratorKeyProperty-Eigenschaftenänderung |
EVENT_OBJECT_CONTENTSCROLLED |
Änderung der Eigenschaft VerticalScrollPercentProperty oder HorizontalScrollPercentProperty für die entsprechenden Bildlaufleisten |
EVENT_OBJECT_CREATE |
|
EVENT_OBJECT_DEFACTIONCHANGE |
Keine Entsprechung |
EVENT_OBJECT_DESCRIPTIONCHANGE |
Keine genaue Entsprechung; eventuell Änderung der Eigenschaft HelpTextProperty oder LocalizedControlTypeProperty |
EVENT_OBJECT_DESTROY |
|
EVENT_OBJECT_FOCUS |
|
EVENT_OBJECT_HELPCHANGE |
HelpTextProperty-Änderung |
EVENT_OBJECT_HIDE |
|
EVENT_OBJECT_LOCATIONCHANGE |
BoundingRectangleProperty-Eigenschaftenänderung |
EVENT_OBJECT_NAMECHANGE |
NameProperty-Eigenschaftenänderung |
EVENT_OBJECT_PARENTCHANGE |
|
EVENT_OBJECT_REORDER |
In Active Accessibility nicht einheitlich verwendet. In UI Automation ist kein direkt entsprechendes Ereignis definiert. |
EVENT_OBJECT_SELECTION |
|
EVENT_OBJECT_SELECTIONADD |
|
EVENT_OBJECT_SELECTIONREMOVE |
|
EVENT_OBJECT_SELECTIONWITHIN |
Keine Entsprechung |
EVENT_OBJECT_SHOW |
|
EVENT_OBJECT_STATECHANGE |
Verschiedene durch geänderte Eigenschaften ausgelöste Ereignisse |
EVENT_OBJECT_VALUECHANGE |
RangeValuePattern.ValueProperty und ValuePattern.ValueProperty geändert |
EVENT_SYSTEM_ALERT |
Keine Entsprechung |
EVENT_SYSTEM_CAPTUREEND |
Keine Entsprechung |
EVENT_SYSTEM_CAPTURESTART |
Keine Entsprechung |
EVENT_SYSTEM_CONTEXTHELPEND |
Keine Entsprechung |
EVENT_SYSTEM_CONTEXTHELPSTART |
Keine Entsprechung |
EVENT_SYSTEM_DIALOGEND |
|
EVENT_SYSTEM_DIALOGSTART |
|
EVENT_SYSTEM_DRAGDROPEND |
Keine Entsprechung |
EVENT_SYSTEM_DRAGDROPSTART |
Keine Entsprechung |
EVENT_SYSTEM_FOREGROUND |
|
EVENT_SYSTEM_MENUEND |
|
EVENT_SYSTEM_MENUPOPUPEND |
|
EVENT_SYSTEM_MENUPOPUPSTART |
|
EVENT_SYSTEM_MENUSTART |
|
EVENT_SYSTEM_MINIMIZEEND |
WindowVisualStateProperty-Eigenschaftenänderung |
EVENT_SYSTEM_MINIMIZESTART |
WindowVisualStateProperty-Eigenschaftenänderung |
EVENT_SYSTEM_MOVESIZEEND |
BoundingRectangleProperty-Eigenschaftenänderung |
EVENT_SYSTEM_MOVESIZESTART |
BoundingRectangleProperty-Eigenschaftenänderung |
EVENT_SYSTEM_SCROLLINGEND |
Änderung der Eigenschaft VerticalScrollPercentProperty oder HorizontalScrollPercentProperty |
EVENT_SYSTEM_SCROLLINGSTART |
Änderung der Eigenschaft VerticalScrollPercentProperty oder HorizontalScrollPercentProperty |
EVENT_SYSTEM_SOUND |
Keine Entsprechung |
EVENT_SYSTEM_SWITCHEND |
Keine Entsprechung, ein AutomationFocusChangedEvent-Ereignis signalisiert jedoch, dass eine neue Anwendung den Fokus übernommen hat. |
EVENT_SYSTEM_SWITCHSTART |
Keine Entsprechung |
Keine Entsprechung |
Änderung der CurrentViewProperty-Eigenschaft |
Keine Entsprechung |
Änderung der HorizontallyScrollableProperty-Eigenschaft |
Keine Entsprechung |
Änderung der VerticallyScrollableProperty-Eigenschaft |
Keine Entsprechung |
Änderung der HorizontalScrollPercentProperty-Eigenschaft |
Keine Entsprechung |
Änderung der VerticalScrollPercentProperty-Eigenschaft |
Keine Entsprechung |
Änderung der HorizontalViewSizeProperty-Eigenschaft |
Keine Entsprechung |
Änderung der VerticalViewSizeProperty-Eigenschaft |
Keine Entsprechung |
Änderung der ToggleStateProperty-Eigenschaft |
Keine Entsprechung |
Änderung der WindowVisualStateProperty-Eigenschaft |
Keine Entsprechung |
AsyncContentLoadedEvent-Ereignis |
Keine Entsprechung |
Sicherheit
Einige IAccessible-Anpassungsszenarien erfordern, dass ein grundlegendes IAccessible umschlossen wird, über das dann die Aufrufe erfolgen. Dies hat Auswirkungen auf die Sicherheit, da eine teilweise vertrauenswürdige Komponente keinen Vermittler auf einem Codepfad darstellen sollte.
Mit dem UI Automation-Modell müssen Anbieter Aufrufe nicht mehr über anderen Anbietercode ausführen. Die gesamte notwendige Aggregation wird vom UI Automation-Basisdienst durchgeführt.