Megosztás a következőn keresztül:


Mik azok a WinEvents?

A kiszolgálóalkalmazások és az operációs rendszer a WinEvents használatával értesíti az ügyfeleket, ha változás történik a rendszerben vagy a felhasználói felületen.

A WinEvent támogatása a Windows operációs rendszer egyik funkciója, amely a következőket biztosítja:

  • Az ügyfelek egyszerűen regisztrálhatnak eseményértesítésekre.
  • Az ügyfélkód kiszolgálókba történő injektálásának mechanizmusa.
  • Események továbbítása szerverekről érdeklődő ügyfeleknek.
  • Automatikus eseménylétrehozás a legtöbb HWND-alapú vezérlőhöz.

A HWND-alapú vezérlők eseménygenerálása különösen fontos a kiszolgálófejlesztők számára. A Microsoft Active Accessibility futásideje IAccessible proxykat biztosít az összes szabványos felhasználói felületi elemhez. Hasonlóképpen, a rendszer automatikusan létrehozza a megfelelő WinEvents-eket, amikor létrehoz, megsemmisít, áthelyez, átméretez vagy bármilyen más műveletet hajt végre egy HWND-alapú vezérlőn.

Egyes WinEventeket, beleértve az általános HWND eseményeket, a rendszer automatikusan támogatja. A Microsoft Active Accessibility-kiszolgálók támogatják a WinEvents egyéb típusait, például az állapotváltozásokat vagy az adott vezérlőre jellemző kiválasztási eseményeket.

Ha olyan esemény történik, amely hatással van a felhasználói felületre, a kiszolgálók az NotifyWinEvent függvény meghívásával eseményértesítést továbbíthatnak az összes érdeklődő ügyfélnek. A függvényhívás olyan információkat tartalmaz, amelyek azonosítják a bekövetkezett esemény típusát, valamint azt a felhasználói felületet, amelyre az esemény vonatkozik. Az ügyfelek ezen információk segítségével lekérhetnek egy IAccessible objektumot a felhasználói felület eleméhez, és további információkat gyűjthetnek.

Ha például értesíteni szeretné az ügyfeleket arról, hogy egy vezérlő neve megváltozott, a kiszolgáló meghívja NotifyWinEvent, és átadja a EVENT_OBJECT_NAMECHANGE az eseményparaméterben. A rendszer úgy válaszol, hogy meghatározza, hogy mely ügyfelek regisztrálták az adott esemény fogadását, és meghívja a regisztrált visszahívási függvényt. Ha nincs ügyfél regisztrálva az eseményre, a kiszolgálónak a NotifyWinEvent hívása összehasonlítható a "nincs művelettel", és a teljesítményre gyakorolt hatás elhanyagolható.

A kiszolgálók meghívják NotifyWinEvent, hogy bejelentsék az eseményt a rendszernek az esemény bekövetkezése után. Soha nem szabad értesíteniük a rendszert egy eseményről, mielőtt az bekövetkezne.

Az események értesítésére az ügyfelek visszahívási horogfüggvényeket regisztrálnak a SetWinEventHookhasználatával. Az ügyfelek egyetlen horogfüggvényt állíthatnak be az összes lehetséges eseményhez, vagy több horogfüggvényt különálló eseménytartományokhoz. További információ: Hook függvény regisztrálása.

Amikor a Microsoft Active Accessibility értesítést kap egy eseményről, meghívja az eseményhez regisztrált összes horogfüggvényt, és átadja a paramétereket NotifyWinEvent.