Abonnieren von Benutzeroberflächenautomatisierung Ereignissen

Microsoft Benutzeroberflächenautomatisierung ermöglicht Clients das Abonnieren von ereignissen von Interesse. Diese Funktion verbessert die Leistung, da die Benutzeroberflächenelemente im System nicht mehr ständig abgefragt werden müssen, um festzustellen, ob sich Informationen, Strukturen oder Zustände geändert haben.

Die Effizienz wird auch durch die Möglichkeit verbessert, Ereignissen nur innerhalb eines definierten Umfangs zu lauschen. Beispielsweise kann ein Client auf Auswahländerungen an einem Element in einer Liste, an der Liste selbst oder an einem gesamten Dialogfeld lauschen.

Hinweis

Gehen Sie nicht davon aus, dass alle möglichen Ereignisse von einem Benutzeroberflächenautomatisierung Anbieter ausgelöst werden. Beispielsweise führen nicht alle Eigenschaftenänderungen dazu, dass Ereignisse von den Standardproxyanbietern für Windows Forms- und Microsoft Win32-Steuerelemente ausgelöst werden.

Eine umfassendere Übersicht über Benutzeroberflächenautomatisierung Ereignisse finden Sie unter übersicht über Benutzeroberflächenautomatisierung Ereignisse.

Hinweis

Bevor Sie einen Ereignishandler implementieren, sollten Sie mit den Threadingproblemen vertraut sein, die unter Grundlegendes zu Threadingproblemenbeschrieben sind.

Dieses Thema enthält folgende Abschnitte:

Registrieren von Ereignishandlern

Clientanwendungen abonnieren Ereignisse einer bestimmten Art, indem sie einen Ereignishandler mit einer der folgenden IUIAutomation-Methoden registrieren.

Subscription-Methode Ereignistyp Rückrufschnittstelle
AddFocusChangedEventHandler Fokusänderung IUIAutomationFocusChangedEventHandler
AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray Eigenschaftenänderung IUIAutomationPropertyChangedEventHandler
AddStructureChangedEventHandler Strukturänderung IUIAutomationStructureChangedEventHandler
AddNotificationEventHandler Benachrichtigung IUIAutomationNotificationEventHandler
AddAutomationEventHandler Sonstige Ereignisse IUIAutomationEventHandler

Wenn ein Client einen Ereignishandler für alle Nachfolger (TreeScope _ Descendants)hinzufügt, fügt Benutzeroberflächenautomatisierung nur einen Handler für den Stamm der Unterstruktur hinzu, und der Handler lauscht über alle Nachfolger. Benutzeroberflächenautomatisierung fügt ereignishandler nicht rekursiv hinzu.

Wenn ein Client die IUIAutomation::RemoveAllEventHandlers-Methode aufruft, entfernt Benutzeroberflächenautomatisierung alle Ereignishandler aus dem Clientprozess.

Zum Empfangen und Behandeln von Ereignissen implementieren Sie ein Ereignisbehandlungsobjekt, das eine Rückrufschnittstelle verfügbar macht, und Sie müssen das Objekt registrieren, indem Sie eine Ereignisregistrierungsmethode wie IUIAutomation::AddPropertyChangedEventHandleraufrufen. Die Rückrufschnittstelle verfügt über eine einzelne Methode. Benutzeroberflächenautomatisierung ruft diese Methode auf, wenn das Ereignis verarbeitet wird.

Beim Herunterfahren oder wenn Benutzeroberflächenautomatisierung Ereignisse für die Anwendung nicht mehr von Interesse sind, sollten Benutzeroberflächenautomatisierung Clients mindestens eine der folgenden IUIAutomation-Methoden aufrufen.

Hinweis

Ein Benutzeroberflächenautomatisierung Client sollte nicht mehrere Threads verwenden, um Ereignishandler hinzuzufügen oder zu entfernen. Unerwartetes Verhalten kann auftreten, wenn ein Ereignishandler hinzugefügt oder entfernt wird, während ein anderer im selben Clientprozess hinzugefügt oder entfernt wird.

Methode BESCHREIBUNG
RemoveAutomationEventHandler Aufheben der Registrierung eines Ereignishandlers, der mit AddAutomationEventHandlerregistriert wurde.
RemoveFocusChangedEventHandler Aufheben der Registrierung eines Ereignishandlers, der mit AddFocusChangedEventHandlerregistriert wurde.
RemovePropertyChangedEventHandler Aufheben der Registrierung eines Ereignishandlers, der mit AddPropertyChangedEventHandler oder AddPropertyChangedEventHandlerNativeArrayregistriert wurde.
RemoveStructureChangedEventHandler Aufheben der Registrierung eines Ereignishandlers, der mit AddStructureChangedEventHandlerregistriert wurde.
RemoveNotificationEventHandler Aufheben der Registrierung eines Ereignishandlers, der mit AddNotificationEventHandlerregistriert wurde.
RemoveAllEventHandlers Hebt die Registrierung aller registrierten Ereignishandler auf.

Es ist möglich, dass ein Ereignis an einen Ereignishandler übermittelt wird, nachdem das Abonnement des Handlers gekündigt wurde, wenn das Ereignis gleichzeitig mit der Anforderung zum Kündigen des Ereignisses empfangen wird. Die bewährte Methode besteht darin, den COM-Standard (Component Object Model) zu befolgen und zu vermeiden, dass das Ereignishandlerobjekt zerstört wird, bis der Verweiszähler 0 (null) erreicht hat. Das Löschen eines Ereignishandlers unmittelbar nach dem Abmelden von Ereignissen kann zu einer Zugriffsverletzung führen, wenn ein Ereignis zu spät übermittelt wird.

Beispiele

Codebeispiele, die zeigen, wie Benutzeroberflächenautomatisierung-Ereignisse behandelt werden, finden Sie unter Implementieren von Ereignishandlern.

Konzept

Übersicht über Benutzeroberflächenautomatisierungs-Ereignisse

Grundlegendes zu Threadingproblemen