訂閱消費者介面自動化事件

Microsoft 消費者介面自動化可讓用戶端訂閱感興趣的事件。 這項功能可藉由消除持續輪詢系統中 UI 元素的需求來改善效能,以查看是否有任何資訊、結構或狀態已變更。

同時也因為能夠只接聽定義範圍內的事件,而改善效率。 例如,用戶端可以接聽清單中專案、清單本身或整個對話方塊上的選取專案變更。

注意

請勿假設所有可能的事件都是由消費者介面自動化提供者引發。 例如,並非所有屬性變更都會導致Windows Forms和 Microsoft Win32 控制項的標準 Proxy 提供者引發事件。

 

如需 UI 自動化事件的廣泛檢視,請參閱 UI 自動化事件概觀

注意

實作事件處理常式之前,您應該先熟悉瞭解 執行緒問題中所述的執行緒問題

 

本主題包含下列各節。

註冊事件處理常式

用戶端應用程式會使用下列其中一個 IUIAutomation 方法來註冊事件處理常式,來訂閱特定種類的事件。

Subscription 方法 事件類型 回呼介面
AddFocusChangedEventHandler 焦點變更 IUIAutomationFocusChangedEventHandler
AddPropertyChangedEventHandlerAddPropertyChangedEventHandlerNativeArray 屬性變更 IUIAutomationPropertyChangedEventHandler
AddStructureChangedEventHandler 結構變更 IUIAutomationStructureChangedEventHandler
AddNotificationEventHandler 通知 IUIAutomationNotificationEventHandler
AddAutomationEventHandler 其他事件 IUIAutomationEventHandler

 

當用戶端針對所有子系新增事件處理常式 (TreeScope_Descendants) 時,消費者介面自動化只會針對子樹狀結構的根目錄新增一個處理常式,而處理常式會接聽所有子系。 消費者介面自動化不會以遞迴方式新增事件處理常式。

當用戶端呼叫IUIAutomation::RemoveAllEventHandlers方法時,消費者介面自動化從用戶端進程移除所有事件處理常式。

若要接收和處理事件,您可以實作公開回呼介面的事件處理物件,而且您必須呼叫 IUIAutomation::AddPropertyChangedEventHandler之類的事件註冊方法來註冊物件。 回呼介面具有單一方法;消費者介面自動化處理事件時呼叫這個方法。

在關機時,或消費者介面自動化事件不再對應用程式感興趣時,消費者介面自動化用戶端應該呼叫下列一或多個IUIAutomation方法。

注意

消費者介面自動化用戶端不應該使用多個執行緒來新增或移除事件處理常式。 如果在相同用戶端進程中新增或移除另一個事件處理常式時,就會產生非預期的行為。

 

方法 Description
RemoveAutomationEventHandler 取消註冊使用 AddAutomationEventHandler註冊的事件處理常式。
RemoveFocusChangedEventHandler 取消註冊使用 AddFocusChangedEventHandler 註冊的事件處理常式。
RemovePropertyChangedEventHandler 取消註冊使用 AddPropertyChangedEventHandlerAddPropertyChangedEventHandlerNativeArray註冊的事件處理常式。
RemoveStructureChangedEventHandler 取消註冊使用 AddStructureChangedEventHandler註冊的事件處理常式。
RemoveNotificationEventHandler 使用 AddNotificationEventHandler取消註冊我們註冊的事件處理常式。
RemoveAllEventHandlers 移除註冊所有已註冊的事件處理常式。

 

如果事件與取消訂閱事件的要求同時收到,則事件可以在未訂閱處理常式之後傳遞至事件處理常式。 最佳做法是遵循元件物件模型 (COM) 標準,並避免終結事件處理常式物件,直到其參考計數達到零為止。 取消訂閱事件之後立即終結事件處理常式,可能會導致延遲傳遞事件時發生存取違規。

範例

如需示範如何處理消費者介面自動化事件的程式碼範例,請參閱如何實作事件處理常式

概念

UI 自動化事件概觀

瞭解執行緒問題