Automação da Interface do Usuário e Acessibilidade Ativa
Acessibilidade Ativa da Microsoft é a API herdada que foi introduzida no Windows 95 e foi projetada para tornar os aplicativos do Windows acessíveis. Automação da Interface do Usuário da Microsoft é o novo modelo de acessibilidade para o Windows e destina-se a atender às necessidades de produtos de tecnologia assistencial e ferramentas de teste automatizadas. Automação da Interface do Usuário oferece muitas melhorias em relação à Acessibilidade Ativa da Microsoft. Este tópico explica as diferenças entre as duas tecnologias.
Este tópico inclui as seções a seguir:
- Linguagens de programação
- Servidores e clientes
- Elementos da interface do usuário
- Modos de exibição de árvore e navegação
- Funções e tipos de controle
- Estados e propriedades
- Eventos
- Acessar propriedades e objetos de acessibilidade ativa de automação da interface do usuário
- Tópicos relacionados
Linguagens de programação
A Acessibilidade Ativa da Microsoft é baseada no COM (Component Object Model) com suporte para interfaces duplas e, portanto, é programável em C/C++ e linguagens de script.
Quando a Automação da Interface do Usuário foi introduzida, a API do cliente era limitada ao código gerenciado, enquanto a API do provedor incluía implementações gerenciadas e não gerenciadas. Com o Windows 7, uma nova API de cliente baseada em COM foi introduzida para facilitar a programação de aplicativos cliente de Automação da Interface do Usuário em C/C++.
Servidores e clientes
Na Acessibilidade Ativa da Microsoft servidores e clientes se comunicam diretamente, em grande parte por meio da implementação do servidor da interface IAccessible.
Em Automação da Interface do Usuário, um serviço principal fica entre o servidor (provedor) e o cliente. O serviço principal faz chamadas às interfaces implementadas pelos provedores e fornece serviços adicionais, como a geração de identificadores de tempo de execução exclusivos para elementos da Interface do Usuário. Os aplicativos cliente obtêm acesso a esse serviço principal criando um objeto CUIAutomation. Esse objeto dá suporte a um conjunto de interfaces de cliente separadas das interfaces do provedor. Para obter mais informações, consulte Criar o objeto CUIAutomation.
Os provedores de Automação da Interface do Usuário podem fornecer informações aos clientes da Acessibilidade Ativa da Microsoft e os servidores da Acessibilidade Ativa da Microsoft podem fornecer informações aos aplicativos cliente de Automação da Interface do Usuário. No entanto, como a Acessibilidade Ativa da Microsoft não expõe tantas informações quanto a Automação da Interface do Usuário, os dois modelos não são totalmente compatíveis.
Elementos da interface do usuário
A Acessibilidade Ativa da Microsoft apresenta um elemento de interface do usuário como uma interface IAccessible emparelhada com um identificador filho. É difícil comparar dois ponteiros IAccessible para determinar se eles se referem ao mesmo elemento.
Em Automação da Interface do Usuário, cada elemento é representado como um objeto que expõe a interface IUIAutomationElement aos clientes. Os elementos podem ser comparados por seus identificadores de tempo de execução, que são recuperados usando IUIAutomationElement::GetRuntimeId.
Modos de exibição de árvore e navegação
Os elementos da Interface do Usuário na tela podem ser vistos como uma estrutura de árvore com a área de trabalho como raiz, janelas de aplicativos como filhos imediatos e elementos dentro de aplicativos como descendentes adicionais.
Na Acessibilidade Ativa da Microsoft , muitos elementos da interface do usuário que são irrelevantes para os usuários finais são expostos na estrutura de árvore. Os aplicativos cliente devem examinar todos os elementos na árvore para determinar quais elementos são significativos.
Os aplicativos cliente da Automação da Interface do Usuário veem a interface do usuário por meio de uma exibição filtrada. A exibição contém apenas elementos que fornecem informações ao usuário ou com os quais o usuário pode interagir. Estão disponíveis exibições predefinidas que incluem apenas elementos de controle e apenas elementos de conteúdo, e os aplicativos clientes podem definir exibições personalizadas. Automação da Interface do Usuário facilita a descrição da interface do usuário para o usuário e ajuda o usuário a interagir com aplicativos.
Na Acessibilidade Ativa da Microsoft, a navegação entre elementos é espacial, por exemplo, movendo-se para o elemento que está à esquerda na tela. Lógica, por exemplo, movendo-se para o próximo item de menu ou o próximo item na ordem de tabulação em uma caixa de diálogo. Hierárquica, por exemplo, movendo-se para o primeiro elemento filho em um contêiner ou de um elemento filho para seu elemento pai. A navegação hierárquica é complicada, pelo fato de que os elementos filho nem sempre são objetos que implementam IAccessible.
Em Automação da Interface do Usuário, todos os elementos da interface do usuário são objetos COM que expõem a interface IUIAutomationElement e dão suporte à mesma funcionalidade básica. Do ponto de vista do provedor, os objetos COM implementam uma interface herdada de IRawElementProviderSimple. A navegação é principalmente hierárquica pois é, de pais para filhos e de um irmão para o outro. No entanto, a navegação entre irmãos tem um elemento lógico, pois pode seguir a ordem de tabulação. Um cliente pode navegar de qualquer ponto de partida, usando qualquer exibição filtrada da árvore, usando IUIAutomationTreeWalker. Um cliente também pode navegar para filhos ou descendentes específicos usando IUIAutomationElement::FindFirst e IUIAutomationElement::FindAll. Por exemplo, é fácil recuperar todos os elementos em uma caixa de diálogo que dão suporte a um padrão de controle especificado.
A navegação em Automação da Interface do Usuário é mais consistente do que na Acessibilidade Ativa da Microsoft. Alguns elementos, como listas suspensas e janelas pop-up, aparecem duas vezes na árvore de Acessibilidade Ativa da Microsoft e a navegação desses elementos pode ter resultados inesperados. É difícil implementar o Acessibilidade Ativa da Microsoft corretamente para um controle de barra. A automação da Interface do Usuário habilita a reassociação e o reposicionamento, de modo que um elemento possa ser colocado em qualquer lugar da árvore, apesar da hierarquia imposta pela propriedade das janelas.
Funções e tipos de controle
A Acessibilidade Ativa da Microsoft usa a propriedade accRole (IAccessible::get_accRole) para recuperar uma descrição da função do elemento na interface do usuário, como ROLE_SYSTEM_SLIDER ou ROLE_SYSTEM_MENUITEM. A função de um elemento é a principal pista para a funcionalidade disponível. A interação com um controle é obtida usando métodos fixos, como IAccessible::accSelect e IAccessible::accDoDefaultAction. A interação entre o aplicativo cliente e a interface do usuário é limitada ao que pode ser feito por meio de IAccessible.
Por outro lado, Automação da Interface do Usuário separa o tipo de controle do elemento, que é descrito pela propriedade IUIAutomationElement::CurrentControlType (ou IUIAutomationElement::CachedControlType) de sua funcionalidade esperada. A funcionalidade é determinada pelos padrões de controle com suporte pelo provedor por meio da implementação de interfaces especializadas. Os padrões de controle podem ser combinados para descrever o conjunto completo de funcionalidades compatíveis com um elemento de interface do usuário específico. Alguns provedores são obrigados a dar suporte a um padrão de controle específico. Por exemplo, o provedor de uma caixa de seleção deve dar suporte ao padrão de controle Alternar. Outros provedores são obrigados a dar suporte a um ou mais de um conjunto de padrões de controle. Por exemplo, um botão deve dar suporte ao padrão de controle Alternar ou Invocar. Outros ainda não suportam padrões de controle. Por exemplo, um painel que não pode ser movido, redimensionado ou encaixado não tem padrões de controle.
Automação da Interface do Usuário dá suporte a controles personalizados, que são identificados pela constante UIA_CustomControlTypeId e podem ser descritos pela propriedade IUIAutomationElement::CurrentLocalizedControlType (ou IUIAutomationElement::CachedLocalizedControlType).
A tabela a seguir mapeia as funções de objeto da Acessibilidade Ativa da Microsoft para tipos de controle de automação da interface do usuário.
Estados e propriedades
Os elementos da Acessibilidade Ativa da Microsoft dão suporte a um conjunto comum de propriedades. Algumas propriedades, como accState, devem descrever condições diferentes, dependendo da função do elemento. Os servidores precisam implementar todos os métodos de IAccessible que retornam uma propriedade, mesmo aqueles que não são relevantes para o elemento.
A Automação da Interface do Usuário define propriedades adicionais, algumas das quais correspondem a estados na Acessibilidade Ativa da Microsoft. Algumas propriedades são comuns a todos os elementos, mas outras propriedades são específicas dos tipos e padrões de controle. Um provedor de automação da interface do usuário não precisa implementar propriedades irrelevantes, mas pode retornar um valor nulo para qualquer propriedade que não seja compatível. O serviço principal de Automação da Interface do Usuário pode obter algumas propriedades do provedor de janela padrão e elas são amalgamadas com propriedades explicitamente implementadas pelo provedor.
Além de oferecer suporte a um número muito maior de propriedades, a automação da interface do usuário habilita um desempenho melhor ao permitir que as propriedades sejam armazenadas em cache.
A tabela a seguir mostra a correspondência entre algumas propriedades nos dois modelos. Para obter descrições das IDs de propriedade de Automação da Interface do Usuário, consulte Identificadores de propriedade de elemento de automação.
Acessador de propriedade da Acessibilidade Ativa | ID da propriedade da Automação da Interface do Usuário | Comentários |
---|---|---|
get_accKeyboardShortcut | UIA_AccessKeyPropertyId ou UIA_AcceleratorKeyPropertyId | UIA_AccessKeyPropertyId tem precedência se ambos estiverem presentes. |
get_accName | UIA_NamePropertyId | |
get_accRole | UIA_ControlTypePropertyId | Consulte a tabela anterior para ver o mapeamento de funções para tipos de controle. |
get_accValue | UIA_ValueValuePropertyId ou UIA_RangeValueValuePropertyId | Válido somente para tipos de controle que dão suporte a IUIAutomationValuePattern ou IUIAutomationRangeValuePattern. Os valores de intervalo são normalizados para 0-100, para serem consistentes com o comportamento de Acessibilidade Ativa da Microsoft. Valores são representados como uma cadeia de caracteres. |
get_accHelp | UIA_HelpTextPropertyId | |
accLocation | UIA_BoundingRectanglePropertyId | |
get_accDescription | Não há suporte. | accDescription não tinha uma especificação clara na Acessibilidade Ativa da Microsoft, o que fazia com que os servidores colocassem diferentes informações nessa propriedade. |
get_accHelpTopic | Não há suporte. |
A tabela a seguir mostra as IDs de propriedade de automação da interface do usuário que correspondem às constantes de estado de objeto da Acessibilidade Ativa da Microsoft.
Para obter uma lista completa de IDs de propriedade, consulte Identificadores de propriedade.
Eventos
Ao contrário da Acessibilidade Ativa da Microsoft, o mecanismo de evento em Automação da Interface do Usuário não depende do roteamento de eventos do Windows, que está intimamente ligado a identificadores de janela e não exige que o aplicativo cliente configure ganchos. As assinaturas em eventos podem ser ajustadas para partes específicas da árvore, não apenas para eventos específicos. Os provedores também podem ajustar os eventos de captação, mantendo o controle de quais eventos estão sendo ouvidos.
Também é mais fácil para os clientes recuperarem os elementos que geram eventos porque eles são passados diretamente para a chamada de retorno de evento. As propriedades do elemento são pré-pesquisadas automaticamente, se uma solicitação de cache foi fornecida quando o cliente se inscreveu no evento.
A tabela a seguir mostra a correspondência das constantes de evento da Acessibilidade Ativa da Microsoft e das IDs de evento de automação da interface do usuário.
Acessar propriedades e objetos de acessibilidade ativa de automação da interface do usuário
Um recurso importante da automação da interface do usuário que não está disponível na Acessibilidade Ativa da Microsoft é a capacidade de buscar várias propriedades com uma única operação entre processos.
Os clientes existentes de Acessibilidade Ativa da Microsoft podem se beneficiar dessa capacidade usando a interface IUIAutomationLegacyIAccessiblePattern. Essa interface representa um padrão de controle que expõe propriedades e métodos de Acessibilidade Ativa da Microsoft em elementos da interface do usuário. Ao recuperar elementos, um aplicativo pode solicitar que esse padrão de controle e suas propriedades sejam armazenados em cache.
IUIAutomationLegacyIAccessiblePattern também habilita os clientes a obter propriedades de Acessibilidade Ativa da Microsoft de elementos que não têm suporte nativo para IAccessible.
Alterações nas propriedades de IUIAutomationLegacyIAccessiblePattern não geram eventos de Automação da Interface do Usuário.