Abonnieren von Benutzeroberflächenautomatisierung Ereignissen

Microsoft Benutzeroberflächenautomatisierung ermöglicht Es Clients, ereignisse von Interesse zu abonnieren. Diese Funktion verbessert die Leistung, da die Benutzeroberflächenelemente im System nicht kontinuierlich abgefragt werden müssen, um festzustellen, ob sich Informationen, Strukturen oder Status 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 für ein Element in einer Liste, für die Liste selbst oder für ein gesamtes 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ächenautomatisierungs-Ereignisse finden Sie unter Ereignisübersicht für die Benutzeroberflächenautomatisierung.

Hinweis

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

 

Dieses Thema enthält folgende Abschnitte:

Registrieren von Ereignishandlern

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

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

 

Wenn ein Client einen Ereignishandler für alle untergeordneten Elemente (TreeScope_Descendants) hinzufügt, fügt Benutzeroberflächenautomatisierung nur einen Handler für den Stamm der Unterstruktur hinzu, und der Handler lauscht über alle Nachkommen hinweg. 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::AddPropertyChangedEventHandler aufrufen. 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 Hebt die Registrierung eines Ereignishandlers auf, der mithilfe von AddAutomationEventHandler registriert wurde.
RemoveFocusChangedEventHandler Hebt die Registrierung eines Ereignishandlers auf, der mithilfe von AddFocusChangedEventHandler registriert wurde.
RemovePropertyChangedEventHandler Hebt die Registrierung eines Ereignishandlers auf, der mithilfe von AddPropertyChangedEventHandler oder AddPropertyChangedEventHandlerNativeArray registriert wurde.
RemoveStructureChangedEventHandler Hebt die Registrierung eines Ereignishandlers auf, der mithilfe von AddStructureChangedEventHandler registriert wurde.
RemoveNotificationEventHandler Hebt die Registrierung eines Ereignishandlers auf, der mit AddNotificationEventHandler registriert wurde.
RemoveAllEventHandlers Hebt die Registrierung aller registrierten Ereignishandler auf.

 

Es ist möglich, dass ein Ereignis an einen Ereignishandler übermittelt wird, nachdem der Handler abgekündigt wurde, wenn das Ereignis gleichzeitig mit der Anforderung zum Abbestellen 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 seine Verweisanzahl 0 erreicht hat. Das Löschen eines Ereignishandlers unmittelbar nach der Abmeldung von Ereignissen kann zu einer Zugriffsverletzung führen, wenn ein Ereignis verspätet ü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