Qu’est-ce que WinEvents ?

Les applications serveur et le système d’exploitation utilisent WinEvents pour avertir les clients lorsqu’une modification se produit dans le système ou dans l’interface utilisateur.

La prise en charge de WinEvent est une fonctionnalité du système d’exploitation Windows qui fournit :

  • Un moyen simple pour les clients de s’inscrire aux notifications d’événements.
  • Mécanisme permettant d’injecter du code client dans les serveurs.
  • Routage des événements des serveurs vers les clients intéressés.
  • Génération automatique d’événements pour la plupart des contrôles basés sur HWND.

La génération d’événements pour les contrôles basés sur HWND est particulièrement importante pour les développeurs de serveurs. L’exécution de Microsoft Active Accessibility fournit des proxys IAccessible pour tous les éléments d’interface utilisateur standard. De même, le système génère automatiquement les WinEvents appropriés chaque fois qu’il crée, détruit, déplace, redimensionne ou effectue toute autre action sur un contrôle HWND.

Certains Événements WinEvent, y compris les événements HWND généraux, sont automatiquement pris en charge par le système. D’autres types de WinEvents, tels que les changements d’état ou les événements de sélection spécifiques à un contrôle particulier, sont pris en charge par les serveurs Microsoft Active Accessibility.

Lorsqu’un événement qui affecte l’interface utilisateur se produit, les serveurs peuvent diffuser une notification d’événement à tous les clients intéressés en appelant la fonction NotifyWinEvent . L’appel de fonction inclut des informations qui identifient le type d’événement qui s’est produit et l’élément d’interface utilisateur auquel l’événement s’applique. Les clients peuvent utiliser ces informations pour récupérer un objet IAccessible pour l’élément d’interface utilisateur et collecter des informations supplémentaires.

Par exemple, pour informer les clients que le nom d’un contrôle a changé, un serveur appelle NotifyWinEvent et passe EVENT_OBJECT_NAMECHANGE dans le paramètre d’événement. Le système répond en déterminant quels clients se sont inscrits pour recevoir cet événement particulier et appelle leur fonction de rappel inscrite. Si aucun client ne s’est inscrit à l’événement, l’appel du serveur à NotifyWinEvent est comparable à un « aucune opération » et l’impact sur les performances est négligeable.

Les serveurs appellent NotifyWinEvent pour annoncer l’événement au système une fois l’événement survenu. Ils ne doivent jamais notifier le système d’un événement avant que l’événement ne se produise.

Pour être avertis des événements, les clients inscrivent des fonctions de hook de rappel à l’aide de SetWinEventHook. Les clients définissent une seule fonction de hook pour tous les événements possibles ou plusieurs fonctions de hook pour des plages discrètes d’événements. Pour plus d’informations, consultez Inscription d’une fonction hook.

Lorsque Microsoft Active Accessibility est averti d’un événement, il appelle toutes les fonctions de hook qui ont été inscrites pour cet événement, en transmettant les paramètres de NotifyWinEvent.