Share via


WinEvents und aktive Barrierefreiheit

Microsoft Active Accessibility-Server lösen WinEvents aus, um Clients zu benachrichtigen, wenn sich ein barrierefreies Objekt ändert. Es gibt zahlreiche Bedingungen, unter denen ein Server einen Client über eine Änderung benachrichtigt. Jede von Microsoft Active Accessibility definierte Ereigniskonstante beschreibt eine Bedingung, über die ein Client benachrichtigt wird. WinEvents kann beispielsweise Folgendes signalisieren:

  • Wenn ein Objekt erstellt oder zerstört wird.
  • Wenn ein Objekt den Fokus empfängt oder verliert.
  • Wenn sich der Zustand oder die Position eines Objekts ändert.
  • Wenn sich eine Eigenschaft eines Objekts ändert.

Clientanwendungen erhalten keine automatischen Ereignisbenachrichtigungen. Sie müssen angeben, welche Ereignisse sie empfangen möchten, indem sie die SetWinEventHook-Funktion aufrufen. Mit SetWinEventHook registriert sich ein Client, um ein oder mehrere Ereignisse zu empfangen, und legt eine Hookfunktion fest, um die angegebenen Ereignisse zu behandeln. Clients können dieselbe Hookfunktion verwenden, um mehrere Arten von Ereignissen zu behandeln, oder sie können Multipe-Hookfunktionen verwenden. Clients rufen den SetWinEventHook einmal für jede Hookfunktion auf, die registriert werden muss.

Hookfunktionen befinden sich im Codetext des Clients, in einer DLL, die dem Prozess des Clients zugeordnet ist, oder in einer DLL, die dem Prozess des Servers zugeordnet ist. Jede dieser Methoden hat Vor- und Nachteile. Weitere Informationen finden Sie unter In-Context- und Out-of-Context-Hookfunktionen.

Um Clients über ein Ereignis zu benachrichtigen, rufen Server NotifyWinEvent auf. Das System überprüft, ob Clientanwendungen über festgelegte Hookfunktionen für das Ereignis verfügen, und ruft bei Bedarf die entsprechenden Hookfunktionen auf.

Wenn die Hookfunktion des Clients aufgerufen wird, empfängt sie eine Reihe von Parametern, die das Ereignis und das Objekt beschreiben, das das Ereignis generiert hat. Um Zugriff auf das Objekt zu erhalten, das das Ereignis generiert hat, ruft die Clienthookfunktion AccessibleObjectFromEvent auf.

Hinweis

Wenn keine Clients registriert wurden, um WinEvents zu empfangen, sind die Auswirkungen auf die Leistung auf einem Server für den Aufruf von NotifyWinEvent vernachlässigbar.

Server rufen NotifyWinEvent nur für Änderungen in ihren eigenen zugänglichen Objekten auf. Sie rufen NotifyWinEvent nicht für Änderungen an vom System bereitgestellten Benutzeroberflächenelementen auf.

Event-Driven Kommunikation

Clients müssen einen WinEvent-Hook registrieren, bevor sie WinEvent-Benachrichtigungen empfangen können. Um unnötige Rückrufe zu vermeiden und die Leistung zu verbessern, wird Clients empfohlen, sich nur für die Ereignisse zu registrieren, die sie empfangen müssen.

Innerhalb der Hookprozedur kann der Client AccessibleObjectFromEvent aufrufen, um ein IAccessible-Objekt für das Element abzurufen, auf das das Ereignis angewendet wird. Mit diesem Objekt kann der Client mit dem Aufrufen von IAccessible-Methoden beginnen, um Informationen abzurufen oder mit dem UI-Element zu interagieren.

WinEvents