Was sind WinEvents?

Serveranwendungen und das Betriebssystem verwenden WinEvents, um Clients zu benachrichtigen, wenn eine Änderung im System oder in der Benutzeroberfläche erfolgt.

WinEvent-Unterstützung ist ein Feature des Windows-Betriebssystems, das Folgendes bietet:

  • Eine einfache Möglichkeit für Clients, sich für Ereignisbenachrichtigungen zu registrieren.
  • Ein Mechanismus zum Einfügen von Clientcode in Server.
  • Routing von Ereignissen von Servern an interessierte Clients.
  • Automatische Ereignisgenerierung für die meisten HWND-basierten Steuerelemente.

Die Ereignisgenerierung für HWND-basierte Steuerelemente ist besonders wichtig für Serverentwickler. Die Microsoft Active Accessibility-Laufzeit stellt IAccessible-Proxys für alle Standardbenutzeroberflächenelemente bereit. Auf ähnliche Weise generiert das System automatisch die entsprechenden WinEvents, wenn es eine andere Aktion für ein HWND-basiertes Steuerelement erstellt, zerstört, verschiebt, ändert oder eine andere Aktion ausführt.

Einige WinEvents, einschließlich allgemeiner HWND-Ereignisse , werden automatisch vom System unterstützt. Andere WinEvents-Typen, z. B. Zustandsänderungen oder Auswahlereignisse, die für ein bestimmtes Steuerelement spezifisch sind, werden von Microsoft Active Accessibility-Servern unterstützt.

Wenn ein Ereignis auftritt, das sich auf die Benutzeroberfläche auswirkt, können Server eine Ereignisbenachrichtigung an alle interessierten Clients senden, indem sie die NotifyWinEvent-Funktion aufrufen. Der Funktionsaufruf enthält Informationen, die den Typ des aufgetretenen Ereignisses und das UI-Element, für das das Ereignis gilt, identifizieren. Clients können diese Informationen verwenden, um ein IAccessible-Objekt für das UI-Element abzurufen und weitere Informationen zu sammeln.

Um beispielsweise Clients zu benachrichtigen, dass sich der Name eines Steuerelements geändert hat, ruft ein Server NotifyWinEvent auf und übergibt EVENT_OBJECT_NAMECHANGE im Ereignisparameter. Das System antwortet, indem es bestimmt, welche Clients registriert sind, um dieses bestimmte Ereignis zu empfangen, und ruft ihre registrierte Rückruffunktion auf. Wenn keine Clients für das Ereignis registriert wurden, ist der Aufruf von NotifyWinEvent des Servers mit einem "kein Vorgang" vergleichbar, und die Auswirkungen auf die Leistung sind vernachlässigbar.

Server rufen NotifyWinEvent auf, um das Ereignis dem System anzukündigen, nachdem das Ereignis aufgetreten ist. Sie dürfen das System nie über ein Ereignis benachrichtigen, bevor das Ereignis eintritt.

Um über Ereignisse benachrichtigt zu werden, registrieren Clients Rückruf-Hookfunktionen mithilfe von SetWinEventHook. Clients legen eine einzelne Hookfunktion für alle möglichen Ereignisse oder mehrere Hookfunktionen für diskrete Ereignisbereiche fest. Weitere Informationen finden Sie unter Registrieren einer Hook-Funktion.

Wenn Microsoft Active Accessibility über ein Ereignis benachrichtigt wird, ruft es alle Hookfunktionen auf, die für dieses Ereignis registriert wurden, und übergibt die Parameter aus NotifyWinEvent.