¿Qué son WinEvents?
Las aplicaciones de servidor y el sistema operativo usan WinEvents para notificar a los clientes cuando se produce un cambio en el sistema o en la interfaz de usuario.
La compatibilidad con WinEvent es una característica del sistema operativo Windows que proporciona:
- Una manera sencilla de que los clientes se registren para recibir notificaciones de eventos.
- Un mecanismo para insertar código de cliente en servidores.
- Enrutamiento de eventos de servidores a clientes interesados.
- Generación automática de eventos para la mayoría de los controles basados en HWND.
La generación de eventos para los controles basados en HWND es especialmente importante para los desarrolladores de servidores. El tiempo de ejecución de accesibilidad activa de Microsoft proporciona servidores proxy IAccessible para todos los elementos de interfaz de usuario estándar. Del mismo modo, el sistema genera automáticamente los WinEvents adecuados cada vez que crea, destruye, mueve, cambia de tamaño o realiza cualquier otra acción en un control basado en HWND.
Algunos eventos WinEvent, incluidos los eventos HWND generales, son compatibles automáticamente con el sistema. Otros tipos de WinEvents, como los cambios de estado o los eventos de selección específicos de un control determinado, son compatibles con los servidores de accesibilidad activa de Microsoft.
Cuando se produce un evento que afecta a la interfaz de usuario, los servidores pueden difundir una notificación de eventos a todos los clientes interesados llamando a la función NotifyWinEvent . La llamada de función incluye información que identifica el tipo de evento que se produjo y el elemento de la interfaz de usuario al que se aplica el evento. Los clientes pueden usar esta información para recuperar un objeto IAccessible para el elemento de interfaz de usuario y recopilar más información.
Por ejemplo, para notificar a los clientes que el nombre de un control ha cambiado, un servidor llama a NotifyWinEvent y pasa EVENT_OBJECT_NAMECHANGE en el parámetro de evento. El sistema responde mediante la determinación de qué clientes se han registrado para recibir ese evento en particular y llama a su función de devolución de llamada registrada. Si ningún cliente se ha registrado para el evento, la llamada del servidor a NotifyWinEvent es comparable a una "operación sin" y el impacto en el rendimiento es insignificante.
Los servidores llaman a NotifyWinEvent para anunciar el evento al sistema después de que se haya producido el evento. Nunca deben notificar al sistema de un evento antes de que se produzca el evento.
Para recibir notificaciones de eventos, los clientes registran funciones de enlace de devolución de llamada mediante SetWinEventHook. Los clientes establecen una única función de enlace para todos los eventos posibles o varias funciones de enlace para intervalos discretos de eventos. Para obtener más información, consulte Registro de una función de enlace.
Cuando se notifica a Microsoft Active Accessibility de un evento, llama a las funciones de enlace registradas para ese evento, pasando los parámetros de NotifyWinEvent.