訂閱 UI 自動化事件
Microsoft使用者介面自動化可讓用戶端訂閱感興趣的事件。 這項功能可藉由排除持續輪詢系統中UI元素的需求來改善效能,以查看是否有任何資訊、結構或狀態已變更。
只在定義範圍內接聽事件的能力也能提升效率。 例如,客戶端可以監聽清單中專案的選取變更、清單本身的變更,或整個對話框的變更。
注意
請勿假設UI自動化提供者會引發所有可能的事件。 例如,並非所有屬性變更都會導致 Windows Forms 的標準 Proxy 提供者和 Microsoft Win32 控制件引發事件。
如需更廣泛的UI自動化事件檢視,請參閱 UI 自動化事件概觀。
備註
實作事件處理程式之前,您應該先熟悉 瞭解線程問題中所述的線程問題。
本主題包含下列各節。
註冊事件處理程式
用戶端應用程式會使用下列其中一個 IUIAutomation 方法來註冊事件處理程式,以訂閱特定類型的事件。
當用戶端新增所有子代的事件處理程式時(TreeScope_Descendants),使用者介面自動化只會為子樹狀結構的根新增一個處理程式,而處理程式會接聽所有子代。 使用者介面自動化不會以遞歸方式新增事件處理程式。
當用戶端呼叫 IUIAutomation::RemoveAllEventHandlers 方法時,UI 自動化會從用戶端進程移除所有事件處理程式。
若要接收和處理事件,您可以實作公開回呼介面的事件處理物件,而且您必須呼叫事件註冊方法,例如 IUIAutomation::AddPropertyChangedEventHandler。 回呼介面具有單一方法;處理事件時,使用者介面自動化會呼叫這個方法。
在關機時,或當使用者介面自動化事件不再對應用程式感興趣時,使用者介面自動化客戶端應該呼叫下列一或多個 IUIAutomation 方法。
注意
使用者介面自動化客戶端不應該使用多個線程來新增或移除事件處理程式。 如果在相同客戶端進程中新增或移除另一個事件處理程式,則非預期的行為可能會導致。
方法 | 描述 |
---|---|
移除自動化事件處理器 | 取消註冊透過使用 AddAutomationEventHandler註冊的事件處理程式。 |
RemoveFocusChangedEventHandler | 取消註冊使用 AddFocusChangedEventHandler註冊的事件處理程式。 |
RemovePropertyChangedEventHandler | 取消註冊使用 AddPropertyChangedEventHandler 或 AddPropertyChangedEventHandlerNativeArray註冊的事件處理程式。 |
RemoveStructureChangedEventHandler | 取消註冊事件處理程式,該處理程式是透過 AddStructureChangedEventHandler註冊的。 |
RemoveNotificationEventHandler | 解除使用 AddNotificationEventHandler註冊的事件處理程式的註冊。 |
移除所有事件處理程式 | 取消註冊所有已註冊的事件處理程式。 |
如果事件是在取消訂閱請求的同時收到,那麼該事件可能在取消訂閱之後仍會被傳遞到事件處理程式。 最佳做法是遵循元件物件模型 (COM) 標準,並避免終結事件處理程序物件,直到其參考計數達到零為止。 取消訂閱事件之後立即終結事件處理程式,如果事件遲到,可能會導致存取違規。
例子
如需示範如何處理 UI 自動化事件的程式代碼範例,請參閱 如何實作事件處理程式。
相關主題
-
概念