Implementieren eines Client-Side (Proxy) Benutzeroberflächenautomatisierung Anbieters

Microsoft Benutzeroberflächenautomatisierung stellt eine Reihe von Proxys für die meisten Standardsteuerelemente bereit, z. B. für WPF-Anwendungen (Microsoft Win32, Windows Forms und Windows Presentation Foundation). Viele benutzerdefinierte Steuerelemente und Steuerelemente von Drittanbietern implementieren jedoch keine nativen Benutzeroberflächenautomatisierung Anbieter. Damit Benutzeroberflächenautomatisierung Clientanwendungen auf diese Steuerelemente zugreifen können, müssen diese Steuerelemente mit clientseitigen Anbietern bereitgestellt werden, die auch als Proxyanbieter oder Proxys bezeichnet werden.

In diesem Thema wird beschrieben, wie Sie einen Proxyanbieter für ein nicht unterstütztes Steuerelement schreiben und es der Liste der Proxys hinzufügen, die von Clientanwendungen verwendet werden. Es umfasst die folgenden Themen:

Codebeispiele zum Implementieren von Proxyanbietern finden Sie unter How-To Topics for Benutzeroberflächenautomatisierung Providers.

Was ist ein Proxy?

Ein clientseitiger Anbieter oder Proxy ist ein Objekt, das die IRawElementProviderSimple-Schnittstelle im Namen eines Steuerelements implementiert, das keine eigene IRawElementProviderSimple-Implementierung aufweist. Ohne einen Proxy ist ein solches Steuerelement für Benutzeroberflächenautomatisierung weitgehend undurchsichtig, die nur grundlegende Informationen aus dem Fensterhandle (HWND) bereitstellen können, z. B. den Speicherort des Steuerelements.

Was ist eine Proxy Factory?

Jeder Proxy erfordert eine entsprechende Proxyfactory, bei der es sich um ein Objekt handelt, das die IUIAutomationProxyFactory-Schnittstelle verfügbar macht. Benutzeroberflächenautomatisierung verwaltet eine interne Tabelle mit Proxy factory-Einträgen, die jeweils einen Verweis auf die Proxyfactory für jeden Proxy und eine Reihe von Bedingungen enthält. Wenn Benutzeroberflächenautomatisierung auf ein Steuerelement stößt, das nicht über eine native IRawElementProviderSimple-Implementierung verfügt, sucht es nach einem Proxy factory-Eintrag, dessen Bedingungen angeben, dass das Steuerelement unterstützt wird. Benutzeroberflächenautomatisierung die Tabelle von Anfang an durchsucht, und wenn ein übereinstimmender Eintrag gefunden wird, ruft Benutzeroberflächenautomatisierung die IUIAutomationProxyFactory::CreateProvider-Methode der Factory auf. Wenn der übereinstimmende Proxy erfolgreich erstellt wurde, beendet der Benutzeroberflächenautomatisierung die Suche und verwendet das neu erstellte Proxyobjekt, andernfalls Benutzeroberflächenautomatisierung die Suche fort.

Eine Clientanwendung erstellt einen instance eines Proxy factory-Eintrags mithilfe der IUIAutomation::CreateProxyFactoryEntry-Methode, die einen IUIAutomationProxyFactoryEntry-Schnittstellenzeiger zurückgibt. Clients verwenden Methoden, die von IUIAutomationProxyFactoryEntry verfügbar gemacht werden, um den Satz von Bedingungen anzugeben, den die Proxyfactory zum Erstellen des Proxys verwendet.

Wenn IUIAutomationProxyFactory::CreateProvider aufgerufen wird, übergibt Benutzeroberflächenautomatisierung Parameter, die das Proxy factory-Objekt verwenden kann, um zu bestimmen, ob der Proxy das benutzerdefinierte Steuerelement angemessen unterstützt. Wenn ja, erstellt die Proxyfactory eine instance des Proxys und gibt den IRawElementProviderSimple-Schnittstellenzeiger zurück, andernfalls wird ein NULL-Zeiger zurückgegeben.

Proxy Factory-Zuordnung

Standardmäßig durchsucht Benutzeroberflächenautomatisierung die Proxy factory-Tabelle in der folgenden Reihenfolge.

Order Proxy BESCHREIBUNG
1 Microsoft: Nicht steuerfreier Proxy Für Fenster mit dem genauen Klassennamen oder Basisklassennamen "ComboBoxEx32".
2 Microsoft: Nicht steuerfreier Proxy Für Fenster mit dem genauen Klassennamen oder Basisklassennamen "WorkerW".
3 Microsoft: Nicht steuerfreier Proxy Für Fenster mit dem genauen Klassennamen oder Basisklassennamen "SHELLDLL_DefView".
4 Microsoft: Containerproxy Für Fenster mit dem genauen Klassennamen oder Basisklassennamen "#32770".
5 Microsoft: Containerproxy Für Fenster mit einem Klassen- oder Basisklassennamen, der "AfxControlBar" enthält.
6 Microsoft: TreeView-Proxy Für Fenster mit einem Klassennamen oder Basisklassennamen, der "SysTreeView32" enthält.
7 Microsoft: ListView-Proxy Für Fenster mit einem Klassennamen oder Basisklassennamen, der "SysListView32" (1) enthält.
8 Microsoft: ListView-Proxy Für Fenster mit einem Klassen- oder Basisklassennamen, der "SysListView32" (2) enthält.
9 Microsoft: MSAA-Proxy Für jedes Fenster.

 

Proxys 7 und 8 sind doppelte Einträge für das SysListView32-Steuerelement. Ohne Änderungen wird der Proxy 7 immer für das SysListView32-Steuerelement verwendet, und Proxy 8 wird nie verwendet. Proxy 8 wird nur für sichtbare Listenelemente verwendet und wird in der Regel von Clientanwendungen verwendet, die nur mit sichtbaren Elementen arbeiten oder strenge Leistungsanforderungen haben. Diese Clients können Proxy 7 entfernen.

Proxy 9, die Microsoft Active-Barrierefreiheit für Benutzeroberflächenautomatisierung Proxy, sollte immer der letzte Eintrag in der Tabelle sein. Dadurch werden Fallbackfunktionen von Microsoft Active Accessibility für Steuerelemente aktiviert, die Microsoft Active Accessibility implementieren, aber nicht Benutzeroberflächenautomatisierung.

Beim Ändern von Einträgen in der Proxy factory-Tabelle sollten Sie die neue Position der Einträge sorgfältig auswerten. Es wird empfohlen, Einträge für benutzerdefinierte Proxys nach den Nicht-Steuerungs- und Containerproxys, aber vor der Microsoft Active-Barrierefreiheit für Benutzeroberflächenautomatisierung Proxy zu platzieren. Auch wenn es möglich ist, code im Aufruf von CreateProvider zu bestimmen, ob ein bestimmtes Fensterhandle (HWND) unterstützt werden soll, ist es effizienter, Benutzeroberflächenautomatisierung den Proxy basierend auf dem Klassennamen auswählen zu lassen und bedingten Code in der CreateProvider-Methode auf ein Minimum zu beschränken.

Benutzeroberflächenautomatisierung verwaltet für jeden Client eine separate Proxy factory-Tabelle. Wenn ein Client seine Proxytabelle ändert, wirken sich die Änderungen nur auf den Client selbst aus. andere Clients sind nicht betroffen.

Verwalten von Standardproxys

Wenn eine Clientanwendung das CUIAutomation-Objekt erstellt, enthält die Proxy factory-Tabelle zunächst nur Einträge für die Standardproxyanbieter für Standardsteuerelemente. Mithilfe der IUIAutomationProxyFactoryMapping-Schnittstelle können Clients neue Einträge hinzufügen, unerwünschte Einträge entfernen, die Reihenfolge der Einträge ändern usw. Ein Client kann einen IUIAutomationProxyFactoryMapping-Schnittstellenzeiger abrufen, indem er die IUIAutomation::P roxyFactoryMapping-Methode aufruft .

Die Tabelle der verfügbaren Proxys enthält eine IUIAutomationProxyFactoryEntry-Schnittstelle für jeden Proxy. Jede IUIAutomationProxyFactoryEntry gibt die IUIAutomationProxyFactory und die Steuerelementklasse an, die der Proxy bedient, und definiert, wie Ereignisse behandelt werden sollen.

Die Proxytabelle wird durch eine IUIAutomationProxyFactoryMapping-Schnittstelle dargestellt, die von der IUIAutomation::P roxyFactoryMapping-Eigenschaft abgerufen werden kann. Eine Anwendung kann IUIAutomationProxyFactoryMapping-Methoden verwenden, um Proxys hinzuzufügen und zu löschen. Um einen neuen Eintrag zu erstellen, der dieser Tabelle hinzugefügt werden soll, verwenden Sie IUIAutomation::CreateProxyFactoryEntry , um die Schnittstelle abzurufen, und verwenden Sie dann die IUIAutomationProxyFactoryEntry-Methoden , um die anwendbare Steuerelementklasse und das Verhalten des Proxys zu definieren.

Erstellen eines Client-Side (Proxy) Benutzeroberflächenautomatisierung Anbieters

Benutzeroberflächenautomatisierung Anbieterprogrammiererhandbuch