共用方式為


什麼是 WinEvents?

伺服器應用程式和作業系統使用 WinEvents 在系統或使用者介面中發生變更時通知用戶端。

WinEvent 支援是 Windows 作業系統的功能,可提供:

  • 用戶端註冊事件通知的簡單方式。
  • 將用戶端程式代碼插入伺服器的機制。
  • 將事件從伺服器路由傳送至感興趣的用戶端。
  • 大部分 HWND型控制項的自動事件產生。

HWND型控制項的事件產生對於伺服器開發人員而言特別重要。 Microsoft Active Accessibility 執行時間提供所有標準 UI 元素的 IAccessible Proxy。 同樣地,每當系統建立、終結、移動、調整大小,或在 HWND型控制項上執行任何其他動作時,系統都會自動產生適當的 WinEvent。

系統會自動支援某些 WinEvent,包括一般 HWND 事件。 Microsoft Active Accessibility 伺服器支援其他類型的 WinEvents,例如狀態變更或特定控制項特定的選取事件。

當影響 UI 的事件發生時,伺服器可以藉由呼叫 NotifyWinEvent 函式,將事件通知廣播給所有感興趣的用戶端。 函式呼叫包含可識別所發生事件種類的資訊,以及套用事件的 UI 元素。 用戶端可以使用這項資訊來擷取 UI 元素的 IAccessible 物件,並收集詳細資訊。

例如,若要通知用戶端控制項的名稱已變更,伺服器會呼叫 NotifyWinEvent 並在事件參數中傳遞 EVENT_OBJECT_NAMECHANGE 。 系統會藉由判斷哪些用戶端已註冊接收該特定事件並呼叫其已註冊的回呼函式來回應。 如果沒有用戶端註冊事件,則伺服器對 NotifyWinEvent 的呼叫相當於「無作業」,而效能影響會微不足道。

伺服器會呼叫 NotifyWinEvent ,在事件發生後向系統宣告事件。 在事件發生之前,他們絕對不能通知系統事件。

若要收到事件的通知,用戶端會使用 SetWinEventHook註冊回呼攔截函式。 用戶端會為所有可能的事件設定單一攔截函式,或針對離散事件範圍設定多個攔截函式。 如需詳細資訊,請參閱 註冊攔截函式

當 Microsoft Active Accessibility 收到事件的通知時,它會呼叫任何已註冊該事件的攔截函式,並傳入 NotifyWinEvent中的參數。