什麼是 WinEvents?
伺服器應用程式和作系統會在系統或使用者介面發生變更時,使用 WinEvents 通知用戶端。
WinEvent 支援是 Windows作系統的一項功能,可提供:
- 用戶端註冊事件通知的簡單方式。
- 將用戶端程式代碼插入伺服器的機制。
- 將事件從伺服器路由傳送至感興趣的用戶端。
- 大部分 HWND型控件的自動事件產生。
HWND型控件的事件產生對於伺服器開發人員來說特別重要。 Microsoft Active Accessibility 執行時間為所有標準 UI 元素提供 IAccessible 代理。 同樣地,每當系統建立、銷毀、移動、調整大小,或對以 HWND 為基礎的控件執行任何其他動作時,系統就會自動產生適當的 WinEvents。
系統會自動支援某些 WinEvents,包括一般 HWND 事件。 Microsoft Active Accessibility 伺服器支援其他類型的 WinEvents,例如狀態變更或針對特定控制項的選取事件。
當事件發生影響 UI 的事件時,伺服器可以呼叫 NotifyWinEvent 函式,將事件通知廣播給所有感興趣的用戶端。 函式呼叫包含資訊,可識別所發生的事件類型,以及套用事件的UI元素。 用戶端可以使用這項資訊來擷取 UI 元素的 IAccessible 物件,並收集詳細資訊。
例如,若要通知用戶端控件的名稱已變更,伺服器會呼叫 NotifyWinEvent,並在事件參數中傳遞 EVENT_OBJECT_NAMECHANGE。 系統會藉由判斷哪些用戶端已註冊接收該特定事件並呼叫其已註冊的回呼函式來回應。 如果沒有客戶端註冊事件,則伺服器對 NotifyWinEvent 的呼叫相當於「無作業」,而且效能影響微乎其微。
伺服器呼叫 NotifyWinEvent,以在事件發生後向系統宣告事件。 在事件發生之前,他們絕不能通知系統事件。
若要收到事件的通知,用戶端會使用 SetWinEventHook 註冊回呼攔截函式。 用戶端會針對所有可能的事件設定單一攔截函式,或針對離散事件範圍設定多個攔截函式。 如需詳細資訊,請參閱 註冊掛鉤函式。
當 Microsoft Active Accessibility 收到事件通知時,它會呼叫任何註冊該事件的掛勾函式,從 NotifyWinEvent傳遞參數。