WinEvents et accessibilité active
Les serveurs Microsoft Active Accessibility déclenchent WinEvents pour avertir les clients lorsqu’un objet accessible change. Il existe de nombreuses conditions dans lesquelles un serveur notifie un client d’une modification. Chaque constante d’événement définie par Microsoft Active Accessibility décrit une condition pour laquelle un client est averti. Par exemple, WinEvents peut signaler :
- Lorsqu’un objet est créé ou détruit.
- Lorsqu’un objet reçoit ou perd le focus.
- Lorsque l’état ou l’emplacement d’un objet change.
- Quand une propriété d’un objet change.
Les applications clientes ne reçoivent pas automatiquement de notifications d’événements ; ils doivent spécifier les événements qu’ils souhaitent recevoir en appelant la fonction SetWinEventHook . Avec SetWinEventHook, un client s’inscrit pour recevoir un ou plusieurs événements et définit une fonction de hook pour gérer les événements spécifiés. Les clients peuvent utiliser la même fonction de hook pour gérer plusieurs types d’événements, ou utiliser des fonctions de hook multip. Les clients appellent le SetWinEventHook une fois pour chaque fonction de hook qu’il doit inscrire.
Les fonctions de raccordement se trouvent dans le corps du code du client, dans une DLL mappée dans le processus du client ou dans une DLL mappée dans le processus du serveur. Chacune de ces méthodes présente des avantages et des inconvénients. Pour plus d’informations, consultez Fonctions de raccordement en contexte et hors contexte.
Pour avertir les clients d’une occurrence d’événement, les serveurs appellent NotifyWinEvent. Le système vérifie si des applications clientes ont défini des fonctions de hook pour l’événement et appelle les fonctions de hook appropriées si nécessaire.
Lorsque la fonction hook du client est appelée, elle reçoit un certain nombre de paramètres qui décrivent l’événement et l’objet qui a généré l’événement. Pour accéder à l’objet qui a généré l’événement, la fonction de raccordement client appelle AccessibleObjectFromEvent.
Notes
Si aucun client ne s’est inscrit pour recevoir WinEvents, l’impact sur les performances d’un serveur pour appeler NotifyWinEvent est négligeable.
Les serveurs appellent NotifyWinEvent pour les modifications apportées uniquement à leurs propres objets accessibles ; ils n’appellent pas NotifyWinEvent pour les modifications apportées aux éléments d’interface utilisateur fournis par le système.
communication Event-Driven
Les clients doivent inscrire un hook WinEvent avant de pouvoir recevoir des notifications WinEvent. Pour éviter les rappels inutiles et améliorer les performances, les clients sont invités à s’inscrire uniquement aux événements qu’ils doivent recevoir.
Dans la procédure de raccordement, le client peut appeler AccessibleObjectFromEvent pour récupérer un objet IAccessible pour l’élément auquel l’événement s’applique. Avec cet objet, le client peut commencer à appeler des méthodes IAccessible pour récupérer des informations ou interagir avec l’élément d’interface utilisateur.