Armazenando em cache Automação da Interface do Usuário propriedades e padrões de controle
Ao usar o Microsoft Automação da Interface do Usuário, os clientes geralmente precisam recuperar várias propriedades para vários elementos de automação. Um cliente pode recuperar propriedades individuais um elemento por vez usando os métodos de recuperação de propriedade, como IUIAutomationElement::CurrentName ou CurrentAccessKey. No entanto, esse método é lento e ineficiente porque requer uma chamada entre processos para cada propriedade que está sendo recuperada. Para melhorar o desempenho, os clientes podem usar os recursos de cache (também chamados de busca em massa) de Automação da Interface do Usuário. O cache permite que um cliente recupere todas as propriedades desejadas para todos os elementos desejados com uma única chamada de método. Em seguida, o cliente pode recuperar as propriedades individuais do cache conforme necessário e obter um novo instantâneo do cache periodicamente, geralmente em resposta a eventos que significam alterações na interface do usuário.
O aplicativo pode solicitar o cache quando recupera um elemento Automação da Interface do Usuário usando um método, como IUIAutomation::ElementFromPointBuildCache, IUIAutomationTreeWalker::GetFirstChildElementBuildCache ou IUIAutomationElement::FindFirstBuildCache.
O cache também ocorre quando você especifica uma solicitação de cache ao assinar eventos. O elemento Automação da Interface do Usuário passado para o manipulador de eventos como a origem de um evento contém as propriedades armazenadas em cache e os padrões de controle especificados pela solicitação de cache. As alterações feitas na solicitação de cache depois que você assina o evento não têm efeito.
Este tópico inclui as seções a seguir.
- Solicitações de cache
- Recuperando filhos e pais armazenados em cache
- Recuperando um novo instantâneo do cache
- Exemplos
- Tópicos relacionados
Solicitações de cache
O cache envolve determinar de quais propriedades recuperar e de quais elementos recuperá-las e, em seguida, usar essas informações para criar uma solicitação de cache. Sempre que o cliente obtém uma interface IUIAutomationElement para item de interface do usuário, Automação da Interface do Usuário armazena em cache as informações especificadas na solicitação de cache.
Para criar uma solicitação de cache, comece usando o método IUIAutomation::CreateCacheRequest para recuperar um ponteiro de interface IUIAutomationCacheRequest . Em seguida, configure a solicitação de cache usando os métodos de IUIAutomationCacheRequest.
Especificando padrões de propriedade e controle para cache
Você pode especificar propriedades para armazenar em cache chamando IUIAutomationCacheRequest::AddProperty. Você pode especificar padrões de controle para armazenar em cache chamando IUIAutomationCacheRequest::AddPattern. Quando um padrão de controle é armazenado em cache, suas propriedades não são armazenadas em cache automaticamente; você deve especificar as propriedades que deseja armazenar em cache usando AddProperty.
Você pode recuperar uma propriedade de padrão de controle (por exemplo, a propriedade Value do padrão de controle Value ), sem precisar recuperar todo o padrão de controle no cache. Você deve recuperar o padrão de controle somente se precisar usar um método de padrão de controle.
Especificando o escopo e a filtragem de uma solicitação de cache
Você pode especificar os elementos cujas propriedades e padrões de controle você deseja armazenar em cache definindo a propriedade IUIAutomationCacheRequest::TreeScope antes de usar a solicitação. O escopo é relativo aos elementos recuperados pelo método para o qual a solicitação de cache é passada. Por exemplo, se você definir apenas TreeScope_Children e recuperar um elemento Automação da Interface do Usuário, as propriedades e os padrões de controle dos filhos desse elemento serão armazenados em cache, mas as propriedades e os padrões de controle do elemento em si não serão armazenados em cache. Para garantir que o cache seja feito para o elemento recuperado em si, você deve incluir TreeScope_Element na propriedade IUIAutomationCacheRequest::TreeScope . Não é possível definir o escopo como TreeScope_Parent ou TreeScope_Ancestors. No entanto, um elemento pai pode ser armazenado em cache quando um elemento filho é armazenado em cache; consulte Recuperando filhos e pais armazenados em cache neste tópico.
A extensão do cache também é afetada pela propriedade IUIAutomationCacheRequest::TreeFilter . Por padrão, o cache é executado somente para elementos que aparecem na exibição de controle da árvore de Automação da Interface do Usuário. No entanto, você pode alterar essa propriedade para aplicar o cache a todos os elementos ou apenas aos elementos que aparecem no modo de exibição de conteúdo.
Força das referências de elemento
Ao recuperar um elemento de automação, por padrão, você tem acesso a todas as propriedades e padrões de controle desse elemento, incluindo as propriedades e os padrões de controle que não foram armazenados em cache. No entanto, você pode especificar que a referência ao elemento se refere somente a dados armazenados em cache, definindo a propriedade IUIAutomationCacheRequest::AutomationElementMode como AutomationElementMode_None. Nesse caso, você não tem acesso a nenhuma propriedade não cache e padrões de controle de elementos recuperados. Isso significa que você não pode acessar nenhuma propriedade atual, como IUIAutomationElement::CurrentIsEnabled ou recuperar um padrão de controle usando IUIAutomationElement::GetCurrentPattern. Em padrões de controle armazenados em cache, você não pode chamar métodos que executam ações no controle, como IUIAutomationInvokePattern::Invoke.
Um exemplo de um aplicativo que pode não precisar de referências completas a objetos é um leitor de tela, que pode pré-buscar as propriedades de nome e tipo de controle de elementos em uma janela sem precisar dos próprios objetos de elemento de automação.
Recuperando filhos e pais armazenados em cache
Quando você recupera um elemento de automação e solicita o cache para filhos desse elemento por meio da propriedade IUIAutomationCacheRequest::TreeScope da solicitação, é possível obter os elementos filho chamando IUIAutomationElement::GetCachedChildren no elemento recuperado.
Se TreeScope_Element foi incluído no escopo da solicitação de cache, o elemento raiz da solicitação pode ser recuperado chamando IUIAutomationElement::GetCachedParent em qualquer um dos elementos filho.
Observação
Você não pode armazenar em cache pais ou ancestrais do elemento raiz da solicitação.
Recuperando um novo instantâneo do cache
O cache é válido somente desde que nada seja alterado na interface do usuário. Seu aplicativo é responsável por recuperar uma nova instantâneo do cache, normalmente, em resposta a eventos.
Se você assinar um evento com uma solicitação de cache, obterá uma nova instantâneo IUIAutomationElement do cache como a origem do evento sempre que o manipulador de eventos for chamado. Você também pode recuperar uma nova instantâneo de informações armazenadas em cache para um elemento chamando IUIAutomationElement::BuildUpdatedCache. Você pode passar a IUIAutomationCacheRequest original para obter uma nova instantâneo de todas as informações que foram armazenadas em cache anteriormente.
A recuperação de uma nova instantâneo do cache não modifica as propriedades de nenhuma referência IUIAutomationElement existente.
Exemplos
Para obter exemplos de código que mostram como usar os recursos de cache do Automação da Interface do Usuário, consulte Como usar o cache.
Tópicos relacionados
-
Conceitual
-
Visão Geral de Padrões de Controle de Automação de Interface de Usuário
-
Visão geral das propriedades de automação da interface do usuário