Compartir a través de


WinEvents y accesibilidad activa

Los servidores de accesibilidad activa de Microsoft generan WinEvents para notificar a los clientes cuando cambia un objeto accesible. Hay numerosas condiciones en las que un servidor notifica a un cliente un cambio. Cada constante de evento definida por microsoft Active Accessibility describe una condición sobre la que se notifica a un cliente. Por ejemplo, WinEvents puede indicar:

  • Cuando se crea o destruye un objeto.
  • Cuando un objeto recibe o pierde el foco.
  • Cuando cambia el estado o la ubicación de un objeto.
  • Cuando cambia cualquier propiedad de un objeto.

Las aplicaciones cliente no reciben notificaciones de eventos automáticamente; deben especificar qué eventos quieren recibir mediante una llamada a la función SetWinEventHook . Con SetWinEventHook, un cliente se registra para recibir uno o varios eventos y establece una función de enlace para controlar los eventos especificados. Los clientes pueden usar la misma función de enlace para controlar varios tipos de eventos o pueden usar funciones de enlace multipe. Los clientes llaman a SetWinEventHook una vez para cada función de enlace que necesita registrar.

Las funciones de enlace se encuentran dentro del cuerpo del código del cliente, en un archivo DLL asignado al proceso del cliente o en un archivo DLL asignado al proceso del servidor. Cada uno de estos métodos tiene ventajas y desventajas. Para obtener más información, vea Funciones de enlace fuera de contexto y fuera de contexto.

Para notificar a los clientes una repetición de eventos, los servidores llaman a NotifyWinEvent. El sistema comprueba si las aplicaciones cliente tienen funciones de enlace establecidas para el evento y llama a las funciones de enlace adecuadas según sea necesario.

Cuando se llama a la función de enlace del cliente, recibe una serie de parámetros que describen el evento y el objeto que generó el evento. Para obtener acceso al objeto que generó el evento, la función de enlace de cliente llama a AccessibleObjectFromEvent.

Nota

Si no hay clientes registrados para recibir WinEvents, el impacto en el rendimiento en un servidor para llamar a NotifyWinEvent es insignificante.

Los servidores llaman a NotifyWinEvent para los cambios solo en sus propios objetos accesibles; no llaman a NotifyWinEvent para ver los cambios en los elementos de la interfaz de usuario proporcionados por el sistema.

comunicación de Event-Driven

Los clientes deben registrar un enlace WinEvent para poder recibir notificaciones de WinEvent. Para evitar devoluciones de llamada innecesarias y mejorar el rendimiento, se recomienda a los clientes registrar solo los eventos que necesitan recibir.

Dentro del procedimiento de enlace, el cliente puede llamar a AccessibleObjectFromEvent para recuperar un objeto IAccessible para el elemento al que se aplica el evento. Con este objeto, el cliente puede empezar a llamar a métodos IAccessible para recuperar información o interactuar con el elemento de la interfaz de usuario.

WinEvents