WinEvents und Active Accessibility

Microsoft Active Accessibility Server auslösen WinEvents, 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 durch 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 speicherort eines Objekts ändert.
  • Wenn sich eine Eigenschaft eines Objekts ändert.

Clientanwendungen empfangen ereignisbenachrichtigungen nicht automatisch. Sie müssen angeben, welche Ereignisse sie empfangen möchten, indem sie die SetWinEventHook-Funktion aufrufen. Mit SetWinEventHook registriert sich ein Client für den Empfang mindestens eines Ereignisses und legt eine Hookfunktion zur Behandlung der angegebenen Ereignisse fest. Clients können dieselbe Hookfunktion verwenden, um mehrere Ereignistypen zu verarbeiten, oder sie können Hookfunktionen mit mehreren Funktionen 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 Clientprozess zugeordnet ist, oder in einer DLL, die dem Serverprozess zugeordnet ist. Jede dieser Methoden hat Vor- und Nachteile. Weitere Informationen finden Sie unter In-Context- und Out-of-Context Hook Functions.

Um Clients über ein Ereignis zu benachrichtigen, rufen Server NotifyWinEvent auf. Das System überprüft, ob Clientanwendungen Hookfunktionen für das Ereignis festgelegt haben, 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 Hookfunktion des Clients AccessibleObjectFromEventauf.

Hinweis

Wenn sich keine Clients für den Empfang von WinEvents registriert haben, sind die Auswirkungen auf die Leistung eines Servers für den Aufruf von NotifyWinEvent vernachlässigbar.

Server rufen NotifyWinEvent nur für Änderungen in ihren eigenen barrierefreien 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, für das das Ereignis gilt. Mit diesem Objekt kann der Client IAccessible-Methoden aufrufen, um Informationen abzurufen oder mit dem Benutzeroberflächenelement zu interagieren.

WinEvents