WinEvents 和作用中協助工具
Microsoft Active Accessibility 伺服器會引發 WinEvents ,以在可存取的物件變更時通知用戶端。 伺服器會通知用戶端變更的情況很多。 Microsoft Active Accessibility 所定義的每個 事件常數 都會描述用戶端收到通知的條件。 例如,WinEvents 可以發出下列訊號:
- 建立或終結物件時。
- 當物件收到或失去焦點時。
- 物件的狀態或位置變更時。
- 當物件的任何屬性變更時。
用戶端應用程式不會自動接收事件通知;他們必須藉由呼叫 SetWinEventHook 函 式來指定要接收的事件。 使用 SetWinEventHook時,用戶端會註冊以接收一或多個事件,並設定攔截函式來處理指定的事件。 用戶端可以使用相同的攔截函式來處理多種事件種類,也可以使用多點攔截函式。 用戶端會針對需要註冊的每個攔截函式呼叫 SetWinEventHook 一次。
攔截函式位於用戶端的程式碼本文、對應至用戶端進程的 DLL 中,或位於對應至伺服器進程的 DLL 中。 這些方法各有優缺點。 如需詳細資訊,請參閱 內容內和內容外攔截函式。
若要通知用戶端發生事件,伺服器會呼叫 NotifyWinEvent。 系統會檢查任何用戶端應用程式是否已設定事件的攔截函式,並視需要呼叫適當的攔截函式。
呼叫用戶端的攔截函式時,它會收到一些參數,描述事件和產生事件的 物件。 若要取得產生事件之物件的存取權,用戶端攔截函式會呼叫 AccessibleObjectFromEvent。
注意
如果未註冊任何用戶端接收 WinEvent,呼叫 NotifyWinEvent 的伺服器效能影響會微不足道。
伺服器只會在其自己的可存取物件中呼叫 NotifyWinEvent 以進行變更;它們不會針對系統提供的使用者介面元素中的變更呼叫 NotifyWinEvent 。
Event-Driven通訊
用戶端必須先註冊 WinEvent 攔截,才能接收 WinEvent 通知。 為了避免不必要的回呼並改善效能,建議用戶端只註冊他們需要接收的事件。
在攔截程式內,用戶端可以呼叫 AccessibleObjectFromEvent 來擷取套用事件之專案的 IAccessible 物件。 透過這個物件,用戶端可以開始呼叫 IAccessible 方法來擷取資訊或與 UI 元素互動。