Zwischenspeichern Benutzeroberflächenautomatisierung Eigenschaften und Steuerelementmustern
Wenn Sie Microsoft Benutzeroberflächenautomatisierung verwenden, müssen Clients häufig mehrere Eigenschaften für mehrere Automatisierungselemente abrufen. Ein Client kann einzelne Eigenschaften mithilfe der Methoden zum Abrufen von Eigenschaften wie IUIAutomationElement::CurrentName oder CurrentAccessKeyeinzeln abrufen. Diese Methode ist jedoch langsam und ineffizient, da sie einen prozessübergreifenden Aufruf für jede abgerufene Eigenschaft erfordert. Zur Verbesserung der Leistung können Clients die Zwischenspeicherungsfunktionen (auch als Massenabruf bezeichnet) von Benutzeroberflächenautomatisierung. Zwischenspeichern ermöglicht einem Client, alle gewünschten Eigenschaften für alle gewünschten Elemente mit einem einzigen 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 in 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::GetFirstChildElementBuildCacheoder 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 den Ereignishandler übergeben wird, enthält die zwischengespeicherten Eigenschaften und Steuerelementmuster, die von der Cacheanforderung angegeben werden. Alle Änderungen, die nach dem Abonnieren des Ereignisses an der Cacheanforderung vorgenommen werden, haben keine Auswirkungen.
Dieses Thema enthält folgende Abschnitte:
- Cacheanforderungen
- Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen
- Abrufen einer neuen Momentaufnahme des Caches
- Beispiele
- Zugehörige Themen
Cacheanforderungen
Beim Zwischenspeichern wird bestimmt, welche Eigenschaften abgerufen werden sollen und von welchen Elementen sie abgerufen werden sollen. Anschließend wird anhand dieser Informationen eine Cacheanforderung erstellt. Wenn der Client eine IUIAutomationElement-Schnittstelle für das Benutzeroberflächenelement erhält, speichert Benutzeroberflächenautomatisierung die in der Cacheanforderung angegebenen Informationen zwischen.
Verwenden Sie zum Erstellen einer Cacheanforderung 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 Eigenschaften angeben, die zwischengespeichert werden, indem Sie IUIAutomationCacheRequest::AddProperty aufrufen. Sie können Steuerelementmuster angeben, die zwischengespeichert werden, indem Sie IUIAutomationCacheRequest::AddPattern aufrufen. Wenn ein Steuerelementmuster zwischengespeichert wird, werden seine Eigenschaften nicht automatisch zwischengespeichert. Sie müssen die Eigenschaften angeben, die Sie mit addProperty zwischenspeichern möchten.
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 der Filterung 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 z. B. nur TreeScope _ Childrenfestlegen und dann ein Benutzeroberflächenautomatisierung-Element abrufen, werden die Eigenschaften und Steuerelementmuster der unteren 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 das _ TreeScope-Element in die IUIAutomationCacheRequest::TreeScope-Eigenschaft einbinden. Der Bereich kann nicht auf TreeScope _ Parent oder TreeScope Parent festgelegt _ werden. 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 wird die Zwischenspeicherung nur für Elemente ausgeführt, die in der Steuerelementansicht der Benutzeroberflächenautomatisierung 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 der Verweis auf das -Element nur auf zwischengespeicherte Daten verweist, indem Sie die IUIAutomationCacheRequest::AutomationElementMode-Eigenschaft auf AutomationElementMode _ None festlegen. In diesem Fall haben Sie keinen Zugriff auf nicht zwischengespeicherte Eigenschaften und Steuerelementmuster der abgerufenen Elemente. 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 den Namen und die Steuerelementtypeigenschaften von Elementen in einem Fenster vorab abrufen kann, ohne dass die Automatisierungselementobjekte selbst benötigt werden.
Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen
Wenn Sie ein Automatisierungselement abrufen und das Zwischenspeichern untergeordneter Elemente dieses Elements über die IUIAutomationCacheRequest::TreeScope-Eigenschaft der Anforderung anfordern, ist es möglich, die untergeordneten Elemente durch Aufrufen von IUIAutomationElement::GetCachedChildren für das abgerufene Element abzurufen.
Wenn das _ TreeScope-Element im Bereich der Cacheanforderung enthalten war, kann das Stammelement der Anforderung durch Aufrufen von IUIAutomationElement::GetCachedParent für eines der untergeordneten Elemente abgerufen werden.
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 eine neue IUIAutomationElement-Momentaufnahme des Caches als Quelle des Ereignisses, wenn Ihr Ereignishandler aufgerufen wird. Sie können auch eine neue Momentaufnahme zwischengespeicherter Informationen für ein Element abrufen, indem Sie IUIAutomationElement::BuildUpdatedCache aufrufen. Sie können die ursprüngliche IUIAutomationCacheRequest übergeben, um eine neue Momentaufnahme aller Informationen zu erhalten, die zuvor zwischengespeichert wurden.
Durch das Abrufen einer neuen Momentaufnahme des Caches werden die Eigenschaften vorhandener IUIAutomationElement-Verweise nicht geändert.
Beispiele
Codebeispiele, die zeigen, wie sie die Zwischenspeicherungsfunktionen von Benutzeroberflächenautomatisierung, finden Sie unter Verwenden der Zwischenspeicherung.