Compartilhar via


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

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.

Função da Acessibilidade Ativa Tipo de controle da Automação da Interface do Usuário
ROLE_SYSTEM_PUSHBUTTON Botão
ROLE_SYSTEM_CLIENT Calendar
ROLE_SYSTEM_CHECKBUTTON CheckBox
ROLE_SYSTEM_COMBOBOX ComboBox
ROLE_SYSTEM_CLIENT Consulte Tipos de controle personalizados.
ROLE_SYSTEM_LIST DataGrid
ROLE_SYSTEM_LISTITEM DataItem
ROLE_SYSTEM_DOCUMENT Documento
ROLE_SYSTEM_TEXT Editar
ROLE_SYSTEM_GROUPING Grupo
ROLE_SYSTEM_LIST Cabeçalho
ROLE_SYSTEM_COLUMNHEADER HeaderItem
ROLE_SYSTEM_LINK Hiperlink
ROLE_SYSTEM_GRAPHIC Imagem
ROLE_SYSTEM_LIST Lista
ROLE_SYSTEM_LISTITEM ListItem
ROLE_SYSTEM_MENUPOPUP Menu
ROLE_SYSTEM_MENUBAR MenuBar
ROLE_SYSTEM_MENUITEM MenuItem
ROLE_SYSTEM_PANE Painel
ROLE_SYSTEM_PROGRESSBAR ProgressBar
ROLE_SYSTEM_RADIOBUTTON RadioButton
ROLE_SYSTEM_SCROLLBAR ScrollBar
ROLE_SYSTEM_SEPARATOR Separador
ROLE_SYSTEM_SLIDER Controle deslizante
ROLE_SYSTEM_SPINBUTTON Controle giratório
ROLE_SYSTEM_SPLITBUTTON SplitButton
ROLE_SYSTEM_STATUSBAR StatusBar
ROLE_SYSTEM_PAGETABLIST Tab
ROLE_SYSTEM_PAGETAB TabItem
ROLE_SYSTEM_TABLE Tabela
ROLE_SYSTEM_STATICTEXT Text
ROLE_SYSTEM_INDICATOR Thumb
ROLE_SYSTEM_TITLEBAR TitleBar
ROLE_SYSTEM_TOOLBAR ToolBar
ROLE_SYSTEM_TOOLTIP ToolTip
ROLE_SYSTEM_OUTLINE Árvore
ROLE_SYSTEM_OUTLINEITEM TreeItem
ROLE_SYSTEM_WINDOW Window

 

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.

Estado da Acessibilidade Ativa Propriedade da Automação da Interface do Usuário Aciona mudança de estado do WinEvent?
STATE_SYSTEM_CHECKED UIA_ToggleToggleStatePropertyId para caixa de seleção. UIA_SelectionItemIsSelectedPropertyId para o botão de opção. Y
STATE_SYSTEM_COLLAPSED UIA_ExpandCollapseExpandCollapseStatePropertyId (valor = ExpandCollapseState_Collapsed). Y
STATE_SYSTEM_EXPANDED UIA_ExpandCollapseExpandCollapseStatePropertyId (valor = ExpandCollapseState_Expanded ou ExpandCollapseState_PartiallyExpanded). Y
STATE_SYSTEM_FOCUSABLE UIA_IsKeyboardFocusablePropertyId. N
STATE_SYSTEM_FOCUSED UIA_HasKeyboardFocusPropertyId. N
STATE_SYSTEM_HASPOPUP UIA_ExpandCollapseExpandCollapseStatePropertyId para itens de menu. N
STATE_SYSTEM_INVISIBLE UIA_IsOffscreenPropertyId (valor = True e IUIAutomationElement::GetClickablePoint falha). N
STATE_SYSTEM_LINKED UIA_ControlTypePropertyId (valor = UIA_HyperlinkControlTypeId). N
STATE_SYSTEM_MIXED UIA_ToggleToggleStatePropertyId (valor = ToggleState_Indeterminate. N
STATE_SYSTEM_MOVEABLE UIA_TransformCanMovePropertyId. N
STATE_SYSTEM_MULTISELECTABLE UIA_SelectionCanSelectMultiplePropertyId. N
STATE_SYSTEM_OFFSCREEN UIA_IsOffscreenPropertyId. N
STATE_SYSTEM_PROTECTED UIA_IsPasswordPropertyId. N
STATE_SYSTEM_READONLY UIA_RangeValueIsReadOnlyPropertyId e UIA_ValueIsReadOnlyPropertyId. N
STATE_SYSTEM_SELECTABLE UIA_IsSelectionItemPatternAvailablePropertyId . N
STATE_SYSTEM_SELECTED UIA_SelectionItemIsSelectedPropertyId. N
STATE_SYSTEM_SIZEABLE UIA_TransformCanResizePropertyId. N
STATE_SYSTEM_UNAVAILABLE UIA_IsEnabledPropertyId. Y

 

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.

WinEvent ID do evento de automação da interface do usuário
EVENT_OBJECT_ACCELERATORCHANGE Alteração de propriedade UIA_AcceleratorKeyPropertyId.
EVENT_OBJECT_CONTENTSCROLLED Alteração de propriedade UIA_ScrollVerticalScrollPercentPropertyId ou UIA_ScrollHorizontalScrollPercentPropertyId nas barras de rolagem associadas.
EVENT_OBJECT_CREATE UIA_StructureChangedEventId.
EVENT_OBJECT_DEFACTIONCHANGE Não há equivalência.
EVENT_OBJECT_DESCRIPTIONCHANGE Não há equivalente exato, talvez alteração de propriedade UIA_HelpTextPropertyId ou UIA_LocalizedControlTypePropertyId.
EVENT_OBJECT_DESTROY UIA_StructureChangedEventId.
EVENT_OBJECT_FOCUS UIA_AutomationFocusChangedEventId.
EVENT_OBJECT_HELPCHANGE UIA_HelpTextPropertyId alteração.
EVENT_OBJECT_HIDE UIA_StructureChangedEventId.
EVENT_OBJECT_LOCATIONCHANGE Alteração de propriedade UIA_BoundingRectanglePropertyId.
EVENT_OBJECT_NAMECHANGE Alteração de propriedade UIA_NamePropertyId.
EVENT_OBJECT_PARENTCHANGE UIA_StructureChangedEventId.
EVENT_OBJECT_REORDER Não é usado de forma consistente na Acessibilidade Ativa da Microsoft. Nenhum evento correspondente diretamente é definido na Automação da Interface do Usuário.
EVENT_OBJECT_SELECTION UIA_SelectionItem_ElementSelectedEventId.
EVENT_OBJECT_SELECTIONADD UIA_SelectionItem_ElementAddedToSelectionEventId.
EVENT_OBJECT_SELECTIONREMOVE UIA_SelectionItem_ElementRemovedFromSelectionEventId.
EVENT_OBJECT_SELECTIONWITHIN Não há equivalência.
EVENT_OBJECT_SHOW UIA_StructureChangedEventId.
EVENT_OBJECT_STATECHANGE Diversos eventos de alteração de propriedade.
EVENT_OBJECT_VALUECHANGE UIA_RangeValueValuePropertyId e UIA_ValueValuePropertyId alterados.
EVENT_SYSTEM_ALERT Não há equivalência.
EVENT_SYSTEM_CAPTUREEND Não há equivalência.
EVENT_SYSTEM_CAPTURESTART Não há equivalência.
EVENT_SYSTEM_CONTEXTHELPEND Não há equivalência.
EVENT_SYSTEM_CONTEXTHELPSTART Não há equivalência.
EVENT_SYSTEM_DIALOGEND UIA_Window_WindowClosedEventId.
EVENT_SYSTEM_DIALOGSTART UIA_Window_WindowOpenedEventId.
EVENT_SYSTEM_DRAGDROPEND Não há equivalência.
EVENT_SYSTEM_DRAGDROPSTART Não há equivalência.
EVENT_SYSTEM_FOREGROUND UIA_AutomationFocusChangedEventId.
EVENT_SYSTEM_MENUEND UIA_MenuModeEndEventId.
EVENT_SYSTEM_MENUPOPUPEND UIA_MenuClosedEventId.
EVENT_SYSTEM_MENUPOPUPSTART UIA_MenuOpenedEventId.
EVENT_SYSTEM_MENUSTART UIA_MenuModeStartEventId.
EVENT_SYSTEM_MINIMIZEEND Alteração de propriedade UIA_WindowWindowVisualStatePropertyId.
EVENT_SYSTEM_MINIMIZESTART Alteração de propriedade UIA_WindowWindowVisualStatePropertyId.
EVENT_SYSTEM_MOVESIZEEND Alteração de propriedade UIA_BoundingRectanglePropertyId.
EVENT_SYSTEM_MOVESIZESTART Alteração de propriedade UIA_BoundingRectanglePropertyId.
EVENT_SYSTEM_SCROLLINGEND Alteração de propriedade UIA_ScrollVerticalScrollPercentPropertyId ou UIA_ScrollHorizontalScrollPercentPropertyId.
EVENT_SYSTEM_SCROLLINGSTART Alteração de propriedade UIA_ScrollVerticalScrollPercentPropertyId ou UIA_ScrollHorizontalScrollPercentPropertyId.
EVENT_SYSTEM_SOUND Não há equivalência.
EVENT_SYSTEM_SWITCHEND Não há equivalente, mas um evento UIA_AutomationFocusChangedEventId sinaliza que um novo aplicativo recebeu o foco.
EVENT_SYSTEM_SWITCHSTART Não há equivalência.
Não há equivalência. Alteração de propriedade UIA_MultipleViewCurrentViewPropertyId.
Não há equivalência. Alteração de propriedade UIA_ScrollHorizontallyScrollablePropertyId.
Não há equivalência. Alteração de propriedade UIA_ScrollVerticallyScrollablePropertyId.
Não há equivalência. Alteração de propriedade UIA_ScrollHorizontalScrollPercentPropertyId.
Não há equivalência. Alteração de propriedade UIA_ScrollVerticalScrollPercentPropertyId.
Não há equivalência. Alteração de propriedade UIA_ScrollHorizontalViewSizePropertyId.
Não há equivalência. Alteração de propriedade UIA_ScrollVerticalViewSizePropertyId.
Não há equivalência. Alteração de propriedade UIA_ToggleToggleStatePropertyId.
Não há equivalência. Alteração de propriedade UIA_WindowWindowVisualStatePropertyId.
Não há equivalência. Evento UIA_AsyncContentLoadedEventId.
Não há equivalência. Evento UIA_ToolTipOpenedEventId.

 

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.

Adicionando a funcionalidade de automação da interface do usuário a servidores de acessibilidade ativa

Visão geral da árvore de automação de interface do usuário

Visão geral das propriedades de automação da interface do usuário

Visão Geral dos Tipos de Controle de Automação de Interface do Usuário

Visão geral sobre eventos de automação de interface do usuário

Acessibilidade ativa da Microsoft