Udostępnij przez


WinEvents i aktywne ułatwienia dostępu

Serwery Microsoft Active Accessibility zgłaszają WinEvents, aby powiadomić klientów, gdy zmienia się dostępny obiekt. Istnieje wiele warunków, w których serwer powiadamia klienta o zmianie. Każda stała zdarzenia zdefiniowana przez Microsoft Active Accessibility opisuje warunek, o którym klient jest powiadamiany. Na przykład winEvents mogą sygnalizować:

  • Gdy obiekt zostanie utworzony lub zniszczony.
  • Gdy obiekt odbiera lub traci fokus.
  • Gdy zmienia się stan lub lokalizacja obiektu.
  • Gdy dowolna właściwość obiektu ulegnie zmianie.

Aplikacje klienckie nie odbierają automatycznie powiadomień o zdarzeniach; muszą określić, które zdarzenia mają być odbierane przez wywołanie funkcji SetWinEventHook. W przypadku SetWinEventHookklient rejestruje się w celu odbierania jednego lub więcej zdarzeń i ustawia funkcję hook do obsługi określonych zdarzeń. Użytkownicy mogą używać tej samej funkcji hook do obsługi wielu typów zdarzeń lub mogą używać wielu funkcji hook. Klienci wywołują SetWinEventHook raz dla każdej funkcji hook, która musi zostać zarejestrowana.

Funkcje hook znajdują się w treści kodu klienta, w DLL zamapowanej do procesu klienta lub w DLL zamapowanej do procesu serwera. Każda z tych metod ma zalety i wady. Aby uzyskać więcej informacji, zobacz In-Context oraz funkcje hooków poza kontekstem.

Aby powiadomić klientów o wystąpieniu zdarzenia, serwery wywołają NotifyWinEvent. System sprawdza, czy jakiekolwiek aplikacje klienckie mają ustawione funkcje hook dla zdarzenia i wywołuje odpowiednie funkcje hook w razie potrzeby.

Po wywołaniu funkcji zaczepienia klienta otrzymuje ona szereg parametrów opisujących zdarzenie i obiekt, który wygenerował zdarzenie. Aby uzyskać dostęp do obiektu, który wygenerował zdarzenie, funkcja zaczepienia klienta wywołuje funkcję AccessibleObjectFromEvent.

Uwaga

Jeśli żaden klient nie zarejestrował się do odbierania WinEvents, wpływ wywoływania NotifyWinEvent na wydajność serwera jest znikomy.

Serwery wywołają NotifyWinEvent w celu wprowadzenia zmian tylko we własnych obiektach dostępnych; nie wywołuje NotifyWinEvent w celu wprowadzenia zmian w elementach interfejsu użytkownika dostarczonych przez system.

Event-Driven komunikacja

Klienci muszą zarejestrować punkt zaczepienia WinEvent, zanim będą mogli otrzymywać powiadomienia WinEvent. Aby uniknąć niepotrzebnych wywołań zwrotnych i zwiększyć wydajność, klienci powinni zarejestrować się tylko na zdarzenia, które muszą odbierać.

Wewnątrz procedury haka klient może wywołać AccessibleObjectFromEvent w celu pobrania obiektu IAccessible dla elementu, do którego ma zastosowanie zdarzenie. Za pomocą tego obiektu klient może rozpocząć wywoływanie metod IAccessible w celu pobrania informacji lub interakcji z elementem interfejsu użytkownika.

WinEvents