Udostępnij za pośrednictwem


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.

koncepcja

Omówienie zdarzeń automatyzacji interfejsu użytkownika

Omówienie problemów z wątkami