O que são WinEvents?
Os aplicativos de servidor e o sistema operacional usam WinEvents para notificar os clientes quando ocorre uma alteração no sistema ou na interface do usuário.
O suporte a WinEvent é um recurso do sistema operacional Windows que fornece:
- Uma maneira simples de os clientes se registrarem para notificações de eventos.
- Um mecanismo para injetar código do cliente em servidores.
- Roteamento de eventos de servidores para clientes interessados.
- Geração automática de eventos para a maioria dos controles baseados em HWND.
A geração de eventos para controles baseados em HWND é especialmente importante para desenvolvedores de servidores. O tempo de execução do Microsoft Active Accessibility fornece proxies IAccessible para todos os elementos de interface do usuário padrão. Da mesma forma, o sistema gera automaticamente os WinEvents apropriados sempre que cria, destrói, move, redimensiona ou executa qualquer outra ação em um controle baseado em HWND.
Alguns WinEvents, incluindo eventos gerais do HWND , são automaticamente compatíveis com o sistema. Outros tipos de WinEvents, como alterações de estado ou eventos de seleção específicos de um controle específico, têm suporte dos servidores microsoft Active Accessibility.
Quando ocorre um evento que afeta a interface do usuário, os servidores podem transmitir uma notificação de evento para todos os clientes interessados chamando a função NotifyWinEvent . A chamada de função inclui informações que identificam o tipo de evento que ocorreu e o elemento de interface do usuário ao qual o evento se aplica. Os clientes podem usar essas informações para recuperar um objeto IAccessible para o elemento de interface do usuário e coletar mais informações.
Por exemplo, para notificar os clientes de que o nome de um controle foi alterado, um servidor chama NotifyWinEvent e passa EVENT_OBJECT_NAMECHANGE no parâmetro event. O sistema responde determinando quais clientes se registraram para receber esse evento específico e chama sua função de retorno de chamada registrada. Se nenhum cliente tiver se registrado para o evento, a chamada do servidor para NotifyWinEvent será comparável a uma "nenhuma operação" e o impacto no desempenho será insignificante.
Os servidores chamam NotifyWinEvent para anunciar o evento para o sistema após o evento ter ocorrido. Eles nunca devem notificar o sistema de um evento antes que o evento ocorra.
Para serem notificados sobre eventos, os clientes registram funções de gancho de retorno de chamada usando SetWinEventHook. Os clientes definem uma única função de gancho para todos os eventos possíveis ou várias funções de gancho para intervalos discretos de eventos. Para obter mais informações, consulte Registrando uma função de gancho.
Quando a Acessibilidade Ativa da Microsoft é notificada de um evento, ele chama todas as funções de gancho que foram registradas para esse evento, passando os parâmetros de NotifyWinEvent.