Assinando eventos de Automação da Interface do Usuário

O Microsoft Automação da Interface do Usuário permite que os clientes assinem eventos de interesse. Essa funcionalidade melhora o desempenho eliminando a necessidade de sondar continuamente os elementos da interface do usuário no sistema para ver se alguma informação, estrutura ou estado foi alterado.

A eficiência também é aprimorada pela capacidade de escutar eventos somente dentro de um escopo definido. Por exemplo, um cliente pode escutar alterações de seleção em um item em uma lista, na própria lista ou em uma caixa de diálogo inteira.

Observação

Não suponha que todos os eventos possíveis sejam gerados por um provedor de Automação da Interface do Usuário. Por exemplo, nem todas as alterações de propriedade fazem com que os eventos sejam gerados pelos provedores de proxy padrão para controles Windows Forms e Microsoft Win32.

 

Para obter uma exibição mais ampla de eventos de Automação da Interface do Usuário, consulte Automação da Interface do Usuário Visão geral de eventos.

Observação

Antes de implementar um manipulador de eventos, você deve estar familiarizado com os problemas de threading descritos em Noções básicas sobre problemas de threading.

 

Este tópico inclui as seções a seguir.

Registrando manipuladores de eventos

Os aplicativos cliente assinam eventos de um tipo específico registrando um manipulador de eventos, usando um dos seguintes métodos IUIAutomation .

Método Subscription Tipo de evento Interface de retorno de chamada
AddFocusChangedEventHandler Alteração de foco IUIAutomationFocusChangedEventHandler
AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray Alteração da propriedade IUIAutomationPropertyChangedEventHandler
AddStructureChangedEventHandler Alteração de estrutura IUIAutomationStructureChangedEventHandler
AddNotificationEventHandler Notificação IUIAutomationNotificationEventHandler
Addautomationeventhandler Outros eventos IUIAutomationEventHandler

 

Quando um cliente adiciona um manipulador de eventos para todos os descendentes (TreeScope_Descendants), Automação da Interface do Usuário adiciona apenas um manipulador para a raiz da subárvore e o manipulador escuta em todos os descendentes. Automação da Interface do Usuário não adiciona manipuladores de eventos recursivamente.

Quando um cliente chama o método IUIAutomation::RemoveAllEventHandlers, Automação da Interface do Usuário remove todos os manipuladores de eventos do processo do cliente.

Para receber e manipular eventos, você implementa um objeto de manipulação de eventos que expõe uma interface de retorno de chamada e deve registrar o objeto chamando um método de registro de evento, como IUIAutomation::AddPropertyChangedEventHandler. A interface de retorno de chamada tem um único método; Automação da Interface do Usuário chama esse método quando o evento é processado.

Ao desligar ou quando Automação da Interface do Usuário eventos não são mais de interesse para o aplicativo, Automação da Interface do Usuário clientes devem chamar um ou mais dos métodos IUIAutomation a seguir.

Observação

Um cliente Automação da Interface do Usuário não deve usar vários threads para adicionar ou remover manipuladores de eventos. Um comportamento inesperado poderá resultar se um manipulador de eventos estiver sendo adicionado ou removido enquanto outro estiver sendo adicionado ou removido no mesmo processo de cliente.

 

Método Descrição
RemoveAutomationEventHandler Cancela o registro de um manipulador de eventos que foi registrado usando AddAutomationEventHandler.
RemoveFocusChangedEventHandler Cancela o registro de um manipulador de eventos que foi registrado usando AddFocusChangedEventHandler.
RemovePropertyChangedEventHandler Cancela o registro de um manipulador de eventos que foi registrado usando AddPropertyChangedEventHandler ou AddPropertyChangedEventHandlerNativeArray.
RemoveStructureChangedEventHandler Cancela o registro de um manipulador de eventos que foi registrado usando AddStructureChangedEventHandler.
RemoveNotificationEventHandler Cancela o registro de um manipulador de eventos que usa AddNotificationEventHandler.
RemoveAllEventHandlers Remove todos os manipuladores de eventos não registrados.

 

É possível que um evento seja entregue a um manipulador de eventos após a assinatura do manipulador, se o evento for recebido simultaneamente com a solicitação para cancelar a assinatura do evento. A melhor prática é seguir o padrão COM (Component Object Model) e evitar destruir o objeto do manipulador de eventos até que sua contagem de referência tenha atingido zero. Destruir um manipulador de eventos imediatamente após cancelar a assinatura de eventos poderá resultar em uma violação de acesso se um evento for entregue com atraso.

Exemplos

Para obter exemplos de código que mostram como lidar com eventos de Automação da Interface do Usuário, consulte Como implementar manipuladores de eventos.

Conceitual

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

Noções básicas sobre problemas de threading