Udostępnij za pośrednictwem


Co to są WinEvents?

Aplikacje serwerowe i system operacyjny używają rozwiązania WinEvents do powiadamiania klientów o zmianie w systemie lub w interfejsie użytkownika.

Obsługa winEvent to funkcja systemu operacyjnego Windows, która zapewnia:

  • Prosty sposób rejestrowania klientów w celu otrzymywania powiadomień o zdarzeniach.
  • Mechanizm wstrzykiwania kodu klienta do serwerów.
  • Routing zdarzeń z serwerów do zainteresowanych klientów.
  • Automatyczne generowanie zdarzeń dla większości kontrolek bazujących na HWND.

Generowanie zdarzeń dla kontrolek opartych na HWNDjest szczególnie ważne dla programistów serwerów. Środowisko uruchomieniowe Microsoft Active Accessibility zapewnia IAccessible serwerów proxy dla wszystkich standardowych elementów interfejsu użytkownika. Podobnie system automatycznie generuje odpowiednie zdarzenia WinEvent za każdym razem, gdy tworzy, niszczy, przenosi, zmienia rozmiar lub wykonuje dowolną inną akcję na kontrolce bazującej naHWND.

Niektóre zdarzenia WinEvents są automatycznie obsługiwane przez system, w tym ogólne zdarzenia HWND oznaczone jako . Inne typy elementów WinEvents, takie jak zmiany stanu lub zdarzenia wyboru specyficzne dla określonej kontrolki, są obsługiwane przez serwery microsoft Active Accessibility.

Gdy wystąpi zdarzenie, które ma wpływ na interfejs użytkownika, serwery mogą emitować powiadomienie o zdarzeniu do wszystkich zainteresowanych klientów, wywołując funkcję NotifyWinEvent. Wywołanie funkcji zawiera informacje identyfikujące typ zdarzenia, które wystąpiło, oraz element interfejsu użytkownika, do którego ma zastosowanie zdarzenie. Klienci mogą użyć tych informacji, aby pobrać obiekt IAccessible dla elementu interfejsu użytkownika i zebrać więcej informacji.

Aby na przykład powiadomić klientów o zmianie nazwy kontrolki, serwer wywołuje NotifyWinEvent i przekazuje EVENT_OBJECT_NAMECHANGE w parametrze zdarzenia. System odpowiada, określając, którzy klienci zarejestrowali się w celu odbierania tego konkretnego zdarzenia i wywołuje ich zarejestrowaną funkcję wywołania zwrotnego. Jeśli nie zarejestrował się żaden klient na wydarzenie, wywołanie serwera NotifyWinEvent nie powoduje żadnych operacji, co nie wpływa na wydajność.

Serwery wywołają NotifyWinEvent, aby ogłosić zdarzenie do systemu po wystąpieniu zdarzenia. Nie muszą nigdy powiadamiać systemu o zdarzeniu przed wystąpieniem zdarzenia.

Aby otrzymywać powiadomienia o zdarzeniach, klienci rejestrują funkcje wywołania zwrotnego przy użyciu SetWinEventHook. Użytkownicy ustawiają jedną funkcję typu hook dla wszystkich możliwych zdarzeń lub wiele funkcji typu hook dla dyskretnych zakresów zdarzeń. Aby uzyskać więcej informacji, zobacz Rejestrowanie funkcji haka.

Gdy usługa Microsoft Active Accessibility jest powiadamiana o zdarzeniu, wywołuje wszystkie funkcje punktu zaczepienia zarejestrowane dla tego zdarzenia, przekazując parametry z NotifyWinEvent.