Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit der Microsoft-Benutzeroberflächenautomatisierung können Clients interessante Ereignisse abonnieren. Diese Funktion verbessert die Leistung, da nicht mehr ständig die Benutzeroberflächenelemente im System abgefragt werden müssen, um festzustellen, ob Informationen, Strukturen oder der Zustand sich geändert haben.
Die Effizienz wird auch durch die Möglichkeit verbessert, nur innerhalb eines definierten Bereichs auf Ereignisse zu lauschen. Beispielsweise kann ein Client auf Auswahländerungen eines Elements in einer Liste, in der Liste selbst oder in einem gesamten Dialogfeld lauschen.
Hinweis
Gehen Sie nicht davon aus, dass alle möglichen Ereignisse von einem Benutzeroberflächenautomatisierungs-Anbieter ausgelöst werden. Beispielsweise führen nicht alle Eigenschaftsänderungen dazu, dass Ereignisse von den Standardproxyanbietern für Windows Forms- und Microsoft Win32-Steuerelemente ausgelöst werden.
Eine umfassendere Ansicht der Benutzeroberflächenautomatisierungs-Ereignisse finden Sie unter "Übersicht über Benutzeroberflächenautomatisierungsereignisse".
Hinweis
Bevor Sie einen Ereignishandler implementieren, sollten Sie mit den Threadingproblemen vertraut sein, die unter Grundlegendes zu Threadingproblemen beschrieben sind.
Dieses Thema enthält folgende Abschnitte:
Registrieren von Ereignishandlern
Clientanwendungen abonnieren Ereignisse einer bestimmten Art durch Registrieren eines Ereignishandlers mithilfe einer der folgenden IUIAutomation-Methoden .
| Abonnementverfahren | Ereignistyp | Rückrufschnittstelle |
|---|---|---|
| AddFocusChangedEventHandler | Fokusänderung | IUIAutomationFocusChangedEventHandler |
| AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray | Eigenschaftsänderung | IUIAutomationPropertyChangedEventHandler |
| AddStructureChangedEventHandler | Strukturänderung | IUIAutomationStructureChangedEventHandler |
| AddNotificationEventHandler | Benachrichtigung | IUIAutomationNotificationEventHandler |
| AddAutomationEventHandler | Andere Ereignisse | IUIAutomationEventHandler |
Wenn ein Client einen Ereignishandler für alle Nachkommen (TreeScope_Descendants) hinzufügt, fügt die Benutzeroberflächenautomatisierung nur einen Handler für den Stamm des Teilbaums hinzu, und der Handler lauscht auf alle Nachkommen. Die Benutzeroberflächenautomatisierung fügt ereignishandler nicht rekursiv hinzu.
Wenn ein Client die IUIAutomation::RemoveAllEventHandlers-Methode aufruft, entfernt die 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 einzige Methode; Die Benutzeroberflächenautomatisierung ruft diese Methode auf, wenn das Ereignis verarbeitet wird.
Beim Herunterfahren oder wenn Benutzeroberflächenautomatisierungs-Ereignisse für die Anwendung nicht mehr interessant sind, sollten Benutzeroberflächenautomatisierungs-Clients eine oder mehrere der folgenden IUIAutomation-Methoden aufrufen.
Hinweis
Ein Benutzeroberflächenautomatisierungs-Client sollte nicht mehrere Threads verwenden, um Ereignishandler hinzuzufügen oder zu entfernen. Unerwartetes Verhalten kann dazu führen, dass 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 mithilfe von 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 abgemeldet wurde, wenn das Ereignis gleichzeitig mit der Abmeldung des Ereignisses empfangen wird. Die bewährte Methode besteht darin, dem COM-Standard (Component Object Model) zu folgen und zu vermeiden, dass das Ereignishandlerobjekt zerstört wird, bis die Referenzanzahl null erreicht hat. Das Löschen eines Ereignishandlers sofort nach dem Abmelden von Ereignissen kann zu einer Zugriffsverletzung führen, wenn ein Ereignis spät zugestellt wird.
Beispiele
Codebeispiele, die zeigen, wie Benutzeroberflächenautomatisierungs-Ereignisse behandelt werden, finden Sie unter "Implementieren von Ereignishandlern".
Zugehörige Themen
-
Konzeptionelle
-
übersicht über Ereignisse der Benutzeroberflächenautomatisierung