Was sind WinEvents?

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

Die 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 zu interessierten Clients.
  • Automatische Ereignisgenerierung für die meisten HWND-basierten Steuerelemente.

Die Ereignisgenerierung für HWND-basierte Steuerelemente ist für Serverentwickler besonders wichtig. Die Microsoft Active Accessibility Laufzeit stellt IAccessible-Proxys für alle Standardelemente der Benutzeroberfläche bereit. Auf ähnliche Weise generiert das System automatisch die entsprechenden WinEvents, wenn es ein HWND-basiertes Steuerelement erstellt, zerstört, verschiebt, seine Größe annimmt 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 identifizieren, für das das Ereignis gilt. Clients können diese Informationen verwenden, um ein IAccessible-Objekt für das Benutzeroberflächenelement abzurufen und weitere Informationen zu sammeln.

Um Clients beispielsweise 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 ermittelt wird, welche Clients sich für den Empfang dieses bestimmten Ereignisses registriert haben, und ruft die registrierte Rückruffunktion auf. Wenn sich keine Clients für das Ereignis registriert haben, ist der Aufruf des Servers für NotifyWinEvent mit einem "No-Vorgang" vergleichbar, und die Auswirkungen auf die Leistung sind vernachlässigbar.

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

Clients registrieren Rückrufhookfunktionen mithilfe von SetWinEventHook,um über Ereignisse benachrichtigt zu werden. Clients legen eine einzelne Hookfunktion für alle möglichen Ereignisse oder mehrere Hookfunktionen für diskrete Bereiche von Ereignissen fest. Weitere Informationen finden Sie unter Registrieren einer Hookfunktion.

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 von NotifyWinEvent.