Zwischenspeichern Benutzeroberflächenautomatisierung Eigenschaften und Steuerelementmustern

Bei Verwendung von Microsoft Benutzeroberflächenautomatisierung müssen Clients häufig mehrere Eigenschaften für mehrere Automatisierungselemente abrufen. Ein Client kann einzelne Eigenschaften nacheinander mithilfe der Methoden zum Abrufen von Eigenschaften wie IUIAutomationElement::CurrentName oder CurrentAccessKey abrufen. Diese Methode ist jedoch langsam und ineffizient, da sie einen prozessübergreifenden Aufruf für jede abgerufene Eigenschaft erfordert. Um die Leistung zu verbessern, können Clients die Zwischenspeicherungsfunktionen (auch als Massenabruf bezeichnet) von Benutzeroberflächenautomatisierung verwenden. Zwischenspeichern ermöglicht es einem Client, alle gewünschten Eigenschaften für alle gewünschten Elemente mit einem einzelnen Methodenaufruf abzurufen. Der Client kann dann die einzelnen Eigenschaften nach Bedarf aus dem Cache abrufen und in regelmäßigen Abständen eine neue Momentaufnahme des Caches abrufen, in der Regel als Reaktion auf Ereignisse, die Änderungen an der Benutzeroberfläche bedeuten.

Die Anwendung kann die Zwischenspeicherung anfordern, wenn sie ein Benutzeroberflächenautomatisierung-Element mithilfe einer Methode abruft, z. B. IUIAutomation::ElementFromPointBuildCache, IUIAutomationTreeWalker::GetFirstChildElementBuildCache oder IUIAutomationElement::FindFirstBuildCache.

Die Zwischenspeicherung erfolgt auch, wenn Sie beim Abonnieren von Ereignissen eine Cacheanforderung angeben. Das Benutzeroberflächenautomatisierung-Element, das als Quelle eines Ereignisses an Ihren Ereignishandler übergeben wird, enthält die zwischengespeicherten Eigenschaften und Steuerelementmuster, die von der Cacheanforderung angegeben werden. Alle Änderungen, die an der Cacheanforderung vorgenommen werden, nachdem Sie das Ereignis abonniert haben, haben keine Auswirkungen.

Dieses Thema enthält folgende Abschnitte:

Cacheanforderungen

Zwischenspeichern umfasst das Bestimmen, welche Eigenschaften abgerufen werden sollen und aus welchen Elementen sie abgerufen werden sollen, und anschließend die Verwendung dieser Informationen zum Erstellen einer Cacheanforderung. Wenn der Client eine IUIAutomationElement-Schnittstelle für ui-Elemente abruft, speichert Benutzeroberflächenautomatisierung die in der Cacheanforderung angegebenen Informationen zwischen.

Um eine Cacheanforderung zu erstellen, verwenden Sie zunächst die IUIAutomation::CreateCacheRequest-Methode , um einen IUIAutomationCacheRequest-Schnittstellenzeiger abzurufen. Konfigurieren Sie als Nächstes die Cacheanforderung mithilfe der Methoden von IUIAutomationCacheRequest.

Angeben von Eigenschaften- und Steuerelementmustern für den Cache

Sie können zwischengespeicherte Eigenschaften angeben, indem Sie IUIAutomationCacheRequest::AddProperty aufrufen. Sie können Steuerelementmuster angeben, die zwischengespeichert werden sollen, indem Sie IUIAutomationCacheRequest::AddPattern aufrufen. Wenn ein Steuerelementmuster zwischengespeichert wird, werden seine Eigenschaften nicht automatisch zwischengespeichert. Sie müssen die Eigenschaften angeben, die Sie zwischenspeichern möchten, indem Sie AddProperty verwenden.

Sie können eine Steuerelementmustereigenschaft (z. B. die Value-Eigenschaft des Value-Steuerelementmusters ) abrufen, ohne das gesamte Steuerelementmuster in den Cache abrufen zu müssen. Sie müssen das Steuerelementmuster nur abrufen, wenn Sie eine Steuerelementmustermethode verwenden müssen.

Angeben des Bereichs und Filterns einer Cacheanforderung

Sie können die Elemente angeben, deren Eigenschaften und Steuerelementmuster Sie zwischenspeichern möchten, indem Sie die IUIAutomationCacheRequest::TreeScope-Eigenschaft festlegen, bevor Sie die Anforderung verwenden. Der Bereich ist relativ zu den Elementen, die von der Methode abgerufen werden, an die die Cacheanforderung übergeben wird. Wenn Sie beispielsweise nur TreeScope_Children festlegen und dann ein Benutzeroberflächenautomatisierung-Element abrufen, werden die Eigenschaften und Steuerelementmuster der untergeordneten Elemente dieses Elements zwischengespeichert, aber die Eigenschaften und Steuerelementmuster des Elements selbst werden nicht zwischengespeichert. Um sicherzustellen, dass die Zwischenspeicherung für das abgerufene Element selbst erfolgt, müssen Sie TreeScope_Element in die IUIAutomationCacheRequest::TreeScope-Eigenschaft einschließen. Es ist nicht möglich, den Bereich auf TreeScope_Parent oder TreeScope_Ancestors festzulegen. Ein übergeordnetes Element kann jedoch zwischengespeichert werden, wenn ein untergeordnetes Element zwischengespeichert wird. Weitere Informationen hierzu finden Sie in diesem Thema unter „Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen“.

Der Umfang der Zwischenspeicherung wird auch von der IUIAutomationCacheRequest::TreeFilter-Eigenschaft beeinflusst. Standardmäßig werden nur Elemente zwischengespeichert, die in der Steuerelementansicht der Benutzeroberflächenautomatisierungs-Struktur angezeigt werden. Sie können diese Eigenschaft jedoch ändern, sodass alle Elemente oder nur in der Inhaltsansicht angezeigte Elemente zwischengespeichert werden.

Stärke von Elementverweisen

Wenn Sie ein Automatisierungselement abrufen, haben Sie standardmäßig Zugriff auf alle Eigenschaften und Steuerelementmuster dieses Elements, einschließlich der Eigenschaften und Steuerelementmuster, die nicht zwischengespeichert wurden. Sie können jedoch angeben, dass sich der Verweis auf das Element nur auf zwischengespeicherte Daten bezieht, indem Sie die IUIAutomationCacheRequest::AutomationElementMode-Eigenschaft auf AutomationElementMode_None festlegen. In diesem Fall haben Sie keinen Zugriff auf nicht zwischengespeicherte Eigenschaften und Steuerelementmuster von abgerufenen Elementen. Dies bedeutet, dass Sie nicht auf aktuelle Eigenschaften wie IUIAutomationElement::CurrentIsEnabled zugreifen oder ein Steuerelementmuster mithilfe von IUIAutomationElement::GetCurrentPattern abrufen können. Bei zwischengespeicherten Steuerelementmustern können Sie keine Methoden aufrufen, die Aktionen für das Steuerelement ausführen, z. B. IUIAutomationInvokePattern::Invoke.

Ein Beispiel für eine Anwendung, die möglicherweise keine vollständigen Verweise auf Objekte benötigt, ist eine Sprachausgabe, die die Namen- und Steuerelementtypeigenschaften von Elementen in einem Fenster vorab abruft, ohne dass die Automatisierungselementobjekte selbst benötigt werden.

Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen

Wenn Sie ein Automation-Element abrufen und die Zwischenspeicherung für untergeordnete Elemente dieses Elements über die IUIAutomationCacheRequest::TreeScope-Eigenschaft der Anforderung anfordern, ist es möglich, die untergeordneten Elemente abzurufen, indem Sie IUIAutomationElement::GetCachedChildren für das abgerufene Element aufrufen.

Wenn TreeScope_Element im Bereich der Cacheanforderung enthalten war, kann das Stammelement der Anforderung abgerufen werden, indem IUIAutomationElement::GetCachedParent für eines der untergeordneten Elemente aufgerufen wird.

Hinweis

Sie können keine übergeordneten Elemente des Stammelements der Anforderung zwischenspeichern.

 

Abrufen einer neuen Momentaufnahme des Caches

Der Cache ist nur gültig, solange sich auf der Benutzeroberfläche nichts ändert. Ihre Anwendung ist für das Abrufen einer neuen Momentaufnahme des Caches verantwortlich, in der Regel als Reaktion auf Ereignisse.

Wenn Sie ein Ereignis mit einer Cacheanforderung abonnieren, erhalten Sie bei jedem Aufruf des Ereignishandlers eine neue IUIAutomationElement-Momentaufnahme des Caches als Quelle des Ereignisses. Sie können auch eine neue Momentaufnahme von zwischengespeicherten Informationen für ein Element abrufen, indem Sie IUIAutomationElement::BuildUpdatedCache aufrufen. Sie können die ursprüngliche IUIAutomationCacheRequest übergeben, um eine neue Momentaufnahme aller Zuvor zwischengespeicherten Informationen abzurufen.

Durch das Abrufen einer neuen Momentaufnahme des Caches werden die Eigenschaften vorhandener IUIAutomationElement-Verweise nicht geändert.

Beispiele

Codebeispiele zur Verwendung der Zwischenspeicherungsfunktionen von Benutzeroberflächenautomatisierung finden Sie unter Verwenden der Zwischenspeicherung.

Konzept

Übersicht über Steuerelementmuster für Benutzeroberflächenautomatisierung

Abrufen von Benutzeroberflächenautomatisierungs-Elementen

Übersicht über die Benutzeroberflächenautomatisierungs-Eigenschaften