Zwischenspeichern in Benutzeroberflächenautomatisierungs-Clients

Hinweis

Diese Dokumentation ist für .NET Framework-Entwickler konzipiert, die die verwalteten Klassen zur Automatisierung der Benutzeroberfläche verwenden möchten, die im Namespace System.Windows.Automation definiert sind. Aktuelle Informationen zur Automatisierung der Benutzeroberfläche finden Sie auf der Seite zur Windows-Automatisierungs-API: Benutzeroberflächenautomatisierung.

In diesem Thema wird das Zwischenspeichern von Benutzeroberflächenautomatisierungs-Eigenschaften und -Steuerelementmustern erläutert.

Bei der Benutzeroberflächenautomatisierung bedeutet Zwischenspeichern, dass Daten vorab abgerufen werden. Auf die Daten kann dann ohne weitere prozessübergreifende Kommunikation zugegriffen werden. Zwischenspeichern wird normalerweise von Benutzeroberflächenautomatisierungs-Client-Anwendungen verwendet, um Eigenschaften und Steuerelementmuster in großen Mengen abzurufen. Informationen werden dann nach Bedarf aus dem Cache abgerufen. Der Cache wird von der Anwendung regelmäßig aktualisiert, üblicherweise als Reaktion auf Ereignisse, die signalisieren, dass auf der Benutzeroberfläche eine Änderung vorgenommen wurde.

Die Vorteile des Zwischenspeicherns werden am deutlichsten bei WPF-Steuerelementen (Windows Presentation Foundation) und benutzerdefinierten Steuerelementen, die serverseitige Benutzeroberflächenautomatisierungs-Anbieter haben. Die Vorteile sind geringer, wenn auf clientseitige Anbieter zugegriffen wird, beispielsweise die Standardanbieter für Win32-Steuerelemente.

Zwischenspeichern findet statt, wenn die Anwendung ein CacheRequest aktiviert und anschließend eine beliebige Methode oder Eigenschaft verwendet, die ein AutomationElementzurückgibt, zum Beispiel FindFirstoder FindAll. Eine Ausnahme sind die Methoden der TreeWalker -Klasse. Bei ihnen findet Zwischenspeichern nur statt, wenn als Parameter ein CacheRequest angegeben ist (zum Beispiel TreeWalker.GetFirstChild(AutomationElement, CacheRequest)).

Zwischenspeichern erfolgt auch, wenn Sie ein Ereignis abonnieren, während ein CacheRequest aktiv ist. Das als Quelle eines Ereignisses an Ihren Ereignishandler übergebene AutomationElement enthält die zwischengespeicherten Eigenschaften und Muster, die vom ursprünglichen CacheRequestangegebenen wurden. Jegliche Änderungen, die an dem CacheRequest vorgenommen werden, nachdem Sie das Ereignis abonniert haben, haben keinen Einfluss.

Die Benutzeroberflächenautomatisierungs-Eigenschaften und -Steuerelementmuster eines Elements können zwischengespeichert werden.

Optionen für ein Zwischenspeichern

CacheRequest gibt die folgenden Optionen für ein Zwischenspeichern an.

Eigenschaften, die zwischengespeichert werden sollen

Sie können zwischenzuspeichernde Eigenschaften angeben, indem Sie vor dem Aktivieren der Anforderung Add(AutomationProperty) für jede Eigenschaft aufrufen.

Steuerelementmuster, die zwischengespeichert werden sollen

Sie können zwischenzuspeichernde Steuerelementmuster angeben, indem Sie vor dem Aktivieren der Anforderung Add(AutomationPattern) für jedes Steuerelementmuster aufrufen. Wenn ein Muster zwischengespeichert wird, werden dessen Eigenschaften nicht automatisch zwischengespeichert. Sie müssen die Eigenschaften, die zwischengespeichert werden sollen, mit CacheRequest.Addangeben.

Umfang und Filtern eines Zwischenspeicherns

Sie können die Elemente angeben, deren Eigenschaften und Muster Sie zwischenspeichern möchten, indem Sie vor dem Aktivieren der Anforderung die CacheRequest.TreeScope -Eigenschaft festlegen. Der Umfang ist relativ zu den Elementen, die abgerufen werden, während die Anforderung aktiv ist. Wenn Sie beispielsweise nur Childrenfestlegen und dann ein AutomationElementabrufen, werden die Eigenschaften und Muster der untergeordneten Elemente dieses Elements zwischengespeichert, nicht jedoch die des Elements selbst. Um sicherzustellen, dass Zwischenspeichern für das abgerufene Element selbst ausgeführt wird, müssen Sie Element in der TreeScope -Eigenschaft einschließen. Es ist nicht möglich, den Bereich auf Parent oder Ancestorsfestzulegen. Ein übergeordnetes Element kann jedoch zwischengespeichert werden, wenn ein untergeordnetes Element zwischengespeichert wird. Weitere Informationen finden Sie unter Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen.

Der Umfang eines Zwischenspeicherns wird auch von der CacheRequest.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 der Elementverweise

Wenn Sie ein AutomationElementabrufen, können Sie standardmäßig auf alle Eigenschaften und Muster dieses Elements, einschließlich der nicht zwischengespeicherten, zugreifen. Sie können jedoch, um die Effizienz zu erhöhen, angeben, dass sich der Verweis auf das Element nur auf zwischengespeicherte Daten bezieht, indem Sie die AutomationElementMode -Eigenschaft von CacheRequest auf Nonefestlegen. In diesem Fall haben Sie keinen Zugriff auf nicht zwischengespeicherte Eigenschaften und Muster von abgerufenen Elementen. Dies bedeutet, dass Sie auf keine der Eigenschaften über GetCurrentPropertyValue oder die Current -Eigenschaft von AutomationElement oder irgendein Steuerelementmuster zugreifen können, und Sie können auch kein Muster abrufen, indem Sie GetCurrentPattern oder TryGetCurrentPatternverwenden. Für zwischengespeicherte Muster können Sie Methoden aufrufen, die Arrayeigenschaften wie beispielsweise SelectionPattern.SelectionPatternInformation.GetSelectionabrufen, jedoch keine Methoden aufrufen, die Aktionen für das Steuerelement ausführen, wie etwa InvokePattern.Invoke.

Ein Beispiel für eine Anwendung, für die möglicherweise keine vollständigen Verweise auf Objekte erforderlich sind, ist eine Bildschirmsprachausgabe, die die Eigenschaften Name und ControlType von Elementen in einem Fenster vorab abruft, die AutomationElement -Objekte selbst jedoch nicht benötigt.

Aktivieren von CacheRequest

Ein Zwischenspeichern wird nur ausgeführt, wenn AutomationElement -Objekte abgerufen werden, während für den aktuellen Thread ein CacheRequest aktiv ist. Es gibt zwei Möglichkeiten, ein CacheRequest-Objekt zu aktivieren.

Die übliche Methode besteht darin, Activateaufzurufen. Diese Methode gibt ein Objekt zurück, das IDisposableimplementiert. Die Anforderung bleibt aktiv, solange das IDisposable -Objekt vorhanden ist. Am einfachsten können Sie die Lebensdauer des Objekts steuern, indem Sie den Aufruf in einen using-Block (C#) bzw. einen Using-Block (Visual Basic) einschließen. Dadurch wird sichergestellt, dass die Anforderung selbst dann aus dem Stapel entfernt wird, wenn eine Ausnahme ausgelöst wird.

Eine weitere Möglichkeit, die nützlich ist, wenn Sie Cacheanforderungen schachteln möchten, besteht darin, Pushaufzurufen. Dadurch wird die Anforderung auf einem Stapel abgelegt und aktiviert. Die Anforderung bleibt aktiv, bis sie mit Popaus dem Stapel entfernt wird. Die Anforderung wird vorübergehend inaktiv, wenn eine andere Anforderung auf dem Stapel abgelegt wurde. Nur die oberste Anforderung auf dem Stapel ist aktiv.

Abrufen von zwischengespeicherten Eigenschaften

Sie können die zwischengespeicherten Eigenschaften eines Elements über die folgenden Methoden und Eigenschaften abrufen.

Wenn sich die angeforderte Eigenschaft nicht im Cache befindet, wird eine Ausnahme ausgelöst.

Cachedmacht, ähnlich wie Current, einzelne Eigenschaften als Member einer Struktur verfügbar. Sie müssen diese Struktur jedoch nicht abrufen, denn Sie können direkt auf die einzelnen Eigenschaften zugreifen. Beispielsweise kann die Name -Eigenschaft aus element.Cached.Nameabgerufen werden, wobei element ein AutomationElementist.

Abrufen von zwischengespeicherten Steuerelementmustern

Sie können die zwischengespeicherten Steuerelementmuster eines Elements über die folgenden Methoden abrufen.

Wenn sich das Muster nicht im Cache befindet, löst GetCachedPattern eine Ausnahme aus, und TryGetCachedPattern gibt falsezurück.

Sie können die zwischengespeicherten Eigenschaften eines Steuerelementmusters über die Cached -Eigenschaft des Musterobjekts abrufen. Außerdem können Sie über die Current -Eigenschaft die aktuellen Werte abrufen, dies jedoch nur, wenn beim Abrufen von None die Option AutomationElement angegeben wurde. (Der Standardwert istFull , und bei diesem Wert ist Zugriff auf die aktuellen Werte möglich.)

Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen

Wenn Sie ein AutomationElement abrufen und über die TreeScope -Eigenschaft der Anforderung das Zwischenspeichern der untergeordneten Elemente dieses Elements anfordern, können Sie anschließend über die CachedChildren -Eigenschaft des von Ihnen abgerufenen Elements auf die untergeordneten Elemente zuzugreifen.

Wurde Element in den Bereich der Cacheanforderung eingeschlossen, ist das Stammelement der Anforderung anschließend über die CachedParent -Eigenschaft jedes untergeordneten Elements verfügbar.

Hinweis

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

Aktualisieren des Caches

Der Cache ist nur gültig, solange sich auf der Benutzeroberfläche nichts ändert. Ihre Anwendung ist dafür verantwortlich, den Cache zu aktualisieren (normalerweise als Reaktion auf Ereignisse).

Wenn Sie ein Ereignis abonnieren, während ein CacheRequest aktiv ist, erhalten Sie bei jedem Aufruf Ihres Ereignishandlerdelegaten ein AutomationElement mit einem aktualisierten Cache als Quelle des Ereignisses. Sie können zwischengespeicherte Informationen für ein Element auch aktualisieren, indem Sie GetUpdatedCacheaufrufen. Sie können das ursprüngliche CacheRequest -Objekt übergeben, um alle Informationen zu aktualisieren, die vorher zwischengespeichert wurden.

Durch das Aktualisieren des Caches werden die Eigenschaften der vorhandenen AutomationElement -Verweise nicht geändert.

Siehe auch