Che cosa sono WinEvents?
Le applicazioni server e il sistema operativo usano WinEvents per notificare ai client quando si verifica una modifica nel sistema o nell'interfaccia utente.
Il supporto di WinEvent è una funzionalità del sistema operativo Windows che fornisce:
- Un modo semplice per consentire ai client di registrarsi per le notifiche degli eventi.
- Meccanismo per l'inserimento di codice client nei server.
- Routing di eventi dai server ai client interessati.
- Generazione automatica di eventi per la maggior parte dei controlli basati su HWND .
La generazione di eventi per controlli basati su HWNDè particolarmente importante per gli sviluppatori di server. Il runtime di Microsoft Active Accessibility fornisce proxy IAccessible per tutti gli elementi standard dell'interfaccia utente. Analogamente, il sistema genera automaticamente gli eventi WinEvent appropriati ogni volta che crea, distrugge, sposta, ridimensiona o esegue qualsiasi altra azione su un controllo HWNDbasato su .
Alcuni eventi WinEvent, inclusi gli eventi generali di HWND , sono supportati automaticamente dal sistema. Altri tipi di eventi WinEvent, ad esempio modifiche di stato o eventi di selezione specifici di un particolare controllo, sono supportati dai server Di accessibilità Microsoft Active.
Quando si verifica un evento che influisce sull'interfaccia utente, i server possono trasmettere una notifica di evento a tutti i client interessati chiamando la funzioneNotifyWinEvent. La chiamata di funzione include informazioni che identificano il tipo di evento che si è verificato e l'elemento dell'interfaccia utente a cui si applica l'evento. I client possono usare queste informazioni per recuperare un oggetto IAccessible per l'elemento dell'interfaccia utente e raccogliere altre informazioni.
Ad esempio, per notificare ai client che il nome di un controllo è cambiato, un server chiama NotifyWinEvent e passa EVENT_OBJECT_NAMECHANGE nel parametro dell'evento. Il sistema risponde determinando quali client si sono registrati per ricevere quell'evento particolare e richiama la loro funzione di callback registrata. Se non sono stati registrati client per l'evento, la chiamata del server a NotifyWinEvent è paragonabile a una "nessuna operazione" e l'impatto sulle prestazioni è trascurabile.
I server chiamano NotifyWinEvent per annunciare l'evento al sistema dopo che si è verificato l'evento. Non devono mai notificare al sistema un evento prima che si verifichi l'evento.
Per ricevere una notifica degli eventi, i client registrano funzioni di callback hook usando SetWinEventHook. I client impostano una singola funzione hook per tutti gli eventi possibili o più funzioni hook per intervalli discreti di eventi. Per altre informazioni, vedere Registrazione di una funzione hook.
Quando Microsoft Active Accessibility riceve una notifica di un evento, chiama tutte le funzioni hook registrate per tale evento, passando i parametri da NotifyWinEvent.