Compartilhar via


WinEvents e Acessibilidade Ativa

Os servidores de Acessibilidade Ativa da Microsoft geram WinEvents para notificar os clientes quando um objeto acessível é alterado. Há várias condições em que um servidor notifica um cliente de uma alteração. Cada constante de evento definida pela Acessibilidade Ativa da Microsoft descreve uma condição sobre a qual um cliente é notificado. Por exemplo, WinEvents pode sinalizar:

  • Quando um objeto é criado ou destruído.
  • Quando um objeto recebe ou perde o foco.
  • Quando o estado ou o local de um objeto é alterado.
  • Quando qualquer propriedade de um objeto é alterada.

Os aplicativos cliente não recebem notificações de evento automaticamente; eles devem especificar quais eventos desejam receber chamando a função SetWinEventHook . Com SetWinEventHook, um cliente se registra para receber um ou mais eventos e define uma função de gancho para lidar com os eventos especificados. Os clientes podem usar a mesma função de gancho para lidar com vários tipos de eventos ou podem usar funções de gancho multipe. Os clientes chamam o SetWinEventHook uma vez para cada função de gancho que ele precisa registrar.

As funções de gancho estão localizadas no corpo do código do cliente, em uma DLL mapeada no processo do cliente ou em uma DLL mapeada no processo do servidor. Cada um desses métodos tem vantagens e desvantagens. Para obter mais informações, consulte Funções de gancho dentro de contexto e fora de contexto.

Para notificar os clientes sobre uma ocorrência de evento, os servidores chamam NotifyWinEvent. O sistema verifica se algum aplicativo cliente definiu funções de gancho para o evento e chama as funções de gancho apropriadas conforme necessário.

Quando a função de gancho do cliente é chamada, ela recebe vários parâmetros que descrevem o evento e o objeto que gerou o evento. Para obter acesso ao objeto que gerou o evento, a função de gancho do cliente chama AccessibleObjectFromEvent.

Observação

Se nenhum cliente tiver se registrado para receber WinEvents, o impacto no desempenho em um servidor para chamar NotifyWinEvent será insignificante.

Os servidores chamam NotifyWinEvent para alterações somente em seus próprios objetos acessíveis; eles não chamam NotifyWinEvent para alterações em elementos de interface do usuário fornecidos pelo sistema.

Comunicação Event-Driven

Os clientes devem registrar um gancho WinEvent antes de receber notificações do WinEvent. Para evitar retornos de chamada desnecessários e melhorar o desempenho, os clientes são aconselhados a se registrar apenas para os eventos que precisam receber.

Dentro do procedimento de gancho, o cliente pode chamar AccessibleObjectFromEvent para recuperar um objeto IAccessible para o elemento ao qual o evento se aplica. Com esse objeto, o cliente pode começar a chamar métodos IAccessible para recuperar informações ou interagir com o elemento de interface do usuário.

WinEvents