Subskrybowanie zdarzeń automatyzacji interfejsu użytkownika
Usługa Microsoft UI Automation umożliwia klientom subskrybowanie interesujących zdarzeń. Ta funkcja zwiększa wydajność, eliminując konieczność ciągłego sondowania elementów interfejsu użytkownika w systemie w celu sprawdzenia, czy jakiekolwiek informacje, struktura lub stan uległy zmianie.
Wydajność jest również lepsza dzięki możliwości nasłuchiwania zdarzeń tylko w zdefiniowanym zakresie. Na przykład klient może nasłuchiwać zmian wyboru elementu na liście, na samej liście lub w całym oknie dialogowym.
Notatka
Nie zakładaj, że wszystkie możliwe zdarzenia są zgłaszane przez dostawcę automatyzacji interfejsu użytkownika. Na przykład nie wszystkie zmiany właściwości powodują wywoływanie zdarzeń przez standardowych dostawców proxy dla kontrolek Windows Forms i Microsoft Win32.
Aby uzyskać szerszy widok zdarzeń automatyzacji interfejsu użytkownika, zobacz Omówienie zdarzeń automatyzacji interfejsu użytkownika.
Notatka
Przed zaimplementowaniem programu obsługi zdarzeń należy zapoznać się z problemami wątkowymi opisanymi w Zrozumienie problemów z wątkami.
Ten temat zawiera następujące sekcje.
Rejestrowanie programów obsługi zdarzeń
Aplikacje klienckie subskrybują zdarzenia określonego rodzaju, rejestrując procedurę obsługi zdarzeń przy użyciu jednej z następujących metod IUIAutomation.
Metoda subskrypcji | Typ zdarzenia | Interfejs wywołania zwrotnego |
---|---|---|
AddFocusChangedEventHandler | Zmiana fokusu | IUIAutomationFocusChangedEventHandler |
AddPropertyChangedEventHandler, AddPropertyChangedEventHandlerNativeArray | Zmiana własności | IUIAutomationPropertyChangedEventHandler |
DodajObsługiwaczaZmienionejStruktury | Zmiana struktury | IUIAutomationStructureChangedEventHandler |
AddNotificationEventHandler | Powiadomienie | IUIAutomationNotificationEventHandler |
AddAutomationEventHandler | Inne zdarzenia | IUIAutomationEventHandler |
Gdy klient dodaje program obsługi zdarzeń dla wszystkich elementów potomnych (TreeScope_Descendants), Automatyzacja interfejsu użytkownika dodaje tylko jedną procedurę obsługi dla korzenia poddrzewa, a program obsługi nasłuchuje wszystkich potomków. Automatyzacja interfejsu użytkownika nie dodaje cyklicznych procedur obsługi zdarzeń.
Gdy klient wywołuje metodę IUIAutomation::RemoveAllEventHandlers, automatyzacja interfejsu użytkownika usuwa wszystkie programy obsługi zdarzeń z procesu klienta.
Aby odbierać zdarzenia i obsługiwać je, należy zaimplementować obiekt obsługi zdarzeń, który uwidacznia interfejs wywołania zwrotnego i należy zarejestrować obiekt, wywołując metodę rejestracji zdarzeń, taką jak IUIAutomation::AddPropertyChangedEventHandler. Interfejs wywołania zwrotnego ma jedną metodę; Automatyzacja interfejsu użytkownika wywołuje tę metodę podczas przetwarzania zdarzenia.
Po zamknięciu lub gdy zdarzenia automatyzacji interfejsu użytkownika nie są już interesujące dla aplikacji, klienci automatyzacji interfejsu użytkownika powinni wywołać co najmniej jedną z następujących metod IUIAutomation.
Notatka
Klient automatyzacji interfejsu użytkownika nie powinien używać wielu wątków do dodawania ani usuwania procedur obsługi zdarzeń. Nieoczekiwane zachowanie może spowodować, że jedna procedura obsługi zdarzeń jest dodawana lub usuwana podczas dodawania lub usuwania innego w tym samym procesie klienta.
Metoda | Opis |
---|---|
RemoveAutomationEventHandler | Wyrejestrowuje procedurę obsługi zdarzeń zarejestrowaną przy użyciu AddAutomationEventHandler. |
RemoveFocusChangedEventHandler | Wyrejestrowuje procedurę obsługi zdarzeń zarejestrowaną przy użyciu programu AddFocusChangedEventHandler. |
RemovePropertyChangedEventHandler | Wyrejestrowuje procedurę obsługi zdarzeń zarejestrowaną przy użyciu AddPropertyChangedEventHandler lub AddPropertyChangedEventHandlerNativeArray. |
RemoveStructureChangedEventHandler | Wyrejestrowuje procedurę obsługi zdarzeń zarejestrowaną przy użyciu programu AddStructureChangedEventHandler. |
RemoveNotificationEventHandler | Wyrejestrowuje procedurę obsługi zdarzeń zarejestrowaną przy użyciu AddNotificationEventHandler. |
RemoveAllEventHandlers | Wyrejestrowuje wszystkie zarejestrowane programy obsługi zdarzeń. |
Istnieje możliwość dostarczenia zdarzenia do programu obsługi zdarzeń po anulowaniu subskrypcji programu obsługi, jeśli zdarzenie zostanie odebrane jednocześnie z żądaniem anulowania subskrypcji zdarzenia. Najlepszym rozwiązaniem jest przestrzeganie standardu Modelu obiektów składowych (COM) i unikanie niszczenia obiektu obsługi zdarzeń, dopóki liczba odwołań nie osiągnie zera. Zniszczenie programu obsługi zdarzeń bezpośrednio po usunięciu subskrypcji zdarzeń może spowodować naruszenie dostępu, jeśli zdarzenie zostanie dostarczone późno.
Przykłady
Przykłady kodu pokazujące sposób obsługi zdarzeń automatyzacji interfejsu użytkownika można znaleźć w How to Implement Event Handlers.
Tematy pokrewne
-
koncepcja