Share via


Memorizzazione nella cache Automazione interfaccia utente proprietà e modelli di controllo

Quando si usa Microsoft Automazione interfaccia utente, i client spesso devono recuperare più proprietà per più elementi di automazione. Un client può recuperare singole proprietà un elemento alla volta usando i metodi di recupero delle proprietà, ad esempio IUIAutomationElement::CurrentName o CurrentAccessKey. Tuttavia, questo metodo è lento e inefficiente perché richiede una chiamata tra processi per ogni proprietà recuperata. Per migliorare le prestazioni, i client possono usare le funzionalità di memorizzazione nella cache (denominata recupero bulk) di Automazione interfaccia utente. La memorizzazione nella cache consente a un client di recuperare tutte le proprietà desiderate per tutti gli elementi desiderati con una singola chiamata al metodo. Il client può quindi recuperare le singole proprietà dalla cache in base alle esigenze e può ottenere periodicamente un nuovo snapshot della cache, in genere in risposta agli eventi che firmano le modifiche nell'interfaccia utente.

L'applicazione può richiedere la memorizzazione nella cache quando recupera un elemento Automazione interfaccia utente usando un metodo, ad esempio IUIAutomation::ElementFromPointBuildCache, IUIAutomationTreeWalker::GetFirstChildElementBuildCache o IUIAutomationElement::FindFirstBuildCache.

La memorizzazione nella cache si verifica anche quando si specifica una richiesta di cache durante la sottoscrizione agli eventi. L'elemento Automazione interfaccia utente passato al gestore eventi come origine di un evento contiene le proprietà memorizzate nella cache e i modelli di controllo specificati dalla richiesta della cache. Tutte le modifiche apportate alla richiesta di cache dopo la sottoscrizione all'evento non hanno alcun effetto.

In questo argomento sono contenute le sezioni seguenti.

Richieste di cache

La memorizzazione nella cache prevede la determinazione delle proprietà da recuperare e degli elementi da recuperare e quindi l'uso di queste informazioni per creare una richiesta di cache. Ogni volta che il client ottiene un'interfaccia IUIAutomationElement per l'elemento dell'interfaccia utente, Automazione interfaccia utente memorizza nella cache le informazioni specificate nella richiesta di cache.

Per creare una richiesta di cache, iniziare usando il metodo IUIAutomation::CreateCacheRequest per recuperare un puntatore dell'interfaccia IUIAutomationCacheRequest . Configurare quindi la richiesta di cache usando i metodi di IUIAutomationCacheRequest.

Specifica di modelli di proprietà e controllo nella cache

È possibile specificare le proprietà nella cache chiamando IUIAutomationCacheRequest::AddProperty. È possibile specificare modelli di controllo da memorizzare nella cache chiamando IUIAutomationCacheRequest::AddPattern. Quando viene memorizzato nella cache un modello di controllo, le relative proprietà non vengono memorizzate automaticamente nella cache; è necessario specificare le proprietà da memorizzare nella cache usando AddProperty.

È possibile recuperare una proprietà del modello di controllo, ad esempio la proprietà Value del modello di controllo Value , senza dover recuperare l'intero modello di controllo nella cache. È necessario recuperare il modello di controllo solo se è necessario usare un metodo del modello di controllo.

Specifica dell'ambito e del filtro di una richiesta di memorizzazione nella cache

È possibile specificare gli elementi le cui proprietà e i modelli di controllo da memorizzare nella cache impostando la proprietà IUIAutomationCacheRequest::TreeScope prima di usare la richiesta. L'ambito è relativo agli elementi recuperati dal metodo a cui viene passata la richiesta di cache. Ad esempio, se si imposta solo TreeScope_Children e quindi si recupera un elemento Automazione interfaccia utente, le proprietà e i modelli di controllo di tale elemento vengono memorizzati nella cache, ma le proprietà e i modelli di controllo dell'elemento stesso non vengono memorizzati nella cache. Per assicurarsi che la memorizzazione nella cache venga eseguita per l'elemento recuperato, è necessario includere TreeScope_Element nella proprietà IUIAutomationCacheRequest::TreeScope . Non è possibile impostare l'ambito su TreeScope_Parent o TreeScope_Ancestors. Un elemento padre, tuttavia, può essere memorizzato nella cache quando un elemento figlio viene memorizzato nella cache. Vedere Recupero di elementi figlio e padre memorizzati nella cache.

L'estensione della memorizzazione nella cache è interessata anche dalla proprietà IUIAutomationCacheRequest::TreeFilter . Per impostazione predefinita, la memorizzazione nella cache viene eseguita solo per gli elementi visualizzati nella visualizzazione controllo dell'albero Automazione interfaccia utente. È possibile, tuttavia, modificare questa proprietà per poter applicare la memorizzazione nella cache a tutti gli elementi o solo agli elementi presenti nella visualizzazione contenuto.

Forza dei riferimenti agli elementi

Quando si recupera un elemento di automazione, per impostazione predefinita è possibile accedere a tutte le proprietà e i modelli di controllo di tale elemento, incluse le proprietà e i modelli di controllo che non sono stati memorizzati nella cache. È tuttavia possibile specificare che il riferimento all'elemento fa riferimento solo ai dati memorizzati nella cache impostando la proprietà IUIAutomationCacheRequest::AutomationElementMode su AutomationElementMode_None. In questo caso, non è possibile accedere a proprietà non memorizzate e a modelli di controllo degli elementi recuperati. Ciò significa che non è possibile accedere a alcuna proprietà corrente, ad esempio IUIAutomationElement::CurrentIsEnabled o recuperare un modello di controllo usando IUIAutomationElement::GetCurrentPattern. Nei modelli di controllo memorizzati nella cache non è possibile chiamare metodi che eseguono azioni sul controllo, ad esempio IUIAutomationInvokePattern::Invoke.

Un esempio di applicazione che potrebbe non necessitare di riferimenti completi agli oggetti è un lettore dello schermo, che potrebbe prefetchare le proprietà del nome e del tipo di controllo degli elementi in una finestra senza bisogno degli oggetti dell'elemento di automazione stessi.

Recupero di elementi figlio e padre memorizzati nella cache

Quando si recupera un elemento di automazione e si richiede la memorizzazione nella cache per gli elementi figlio di tale elemento tramite la proprietà IUIAutomationCacheRequest::TreeScope della richiesta, è possibile ottenere gli elementi figlio chiamando IUIAutomationElement::GetCachedChildren sull'elemento recuperato.

Se TreeScope_Element è stato incluso nell'ambito della richiesta della cache, l'elemento radice della richiesta può essere recuperato chiamando IUIAutomationElement::GetCachedParent in uno qualsiasi degli elementi figlio.

Nota

Non è possibile memorizzare nella cache elementi padre o predecessori dell'elemento radice della richiesta.

 

Recupero di un nuovo snapshot della cache

La cache è valida solo finché non cambia nulla nell'interfaccia utente. L'applicazione è responsabile del recupero di un nuovo snapshot della cache, in genere in risposta agli eventi.

Se si sottoscrive un evento con una richiesta di cache, si ottiene un nuovo snapshot IUIAutomationElement della cache come origine dell'evento ogni volta che viene chiamato il gestore eventi. È anche possibile recuperare un nuovo snapshot di informazioni memorizzate nella cache per un elemento chiamando IUIAutomationElement::BuildUpdatedCache. È possibile passare l'IUIAutomationCacheRequest originale per ottenere un nuovo snapshot di tutte le informazioni memorizzate nella cache in precedenza.

Il recupero di un nuovo snapshot della cache non modifica le proprietà di riferimenti IUIAutomationElement esistenti.

Esempio

Per esempi di codice che illustrano come usare le funzionalità di memorizzazione nella cache di Automazione interfaccia utente, vedere Come usare la memorizzazione nella cache.

Informazioni concettuali

Cenni preliminari sui pattern di controllo per l'automazione interfaccia utente

Ottenere elementi di automazione interfaccia utente

Cenni preliminari sulle proprietà di automazione interfaccia utente