2013-07-11 23 views
1

我想知道如何在AutomationElement上獲得特定類型的動作?當涉及到AutomationElement時,我有所有的細節獲取AutomationEvent的類型C#UIAutomation

AutomationFocusChangedEventHandler handler = new AutomationFocusChangedEventHandler(OnFocusChange); 
Automation.AddAutomationFocusChangedEventHandler(handler); 

在那裏我可以獲得關於聚焦元素的所有信息。

但我需要知道是否例如按鈕被點擊,如果編輯輸入被編輯或窗口被關閉,等等。

我知道AccEvent中提供了這類信息,它將物業,焦點和自動化之間的事件與每個細節區分開來。

基本上我想記錄元素上執行的動作,然後重複它。

如何使用C#獲取它?

Btw。我使用UIAutomation的COMwrapper類。

+0

你的意思是說,當你有焦點的窗口句柄後,點擊按鈕就可以窺探它,無論如何,您必須注意到,FocusChanged事件與按鈕點擊或編輯的輸入之間沒有鏈接。 – Louisbob

回答

1

從焦點更改事件中獲取元素後,可以爲按鈕單擊(調用),編輯(屬性)和關閉添加處理程序。具體方法如下:

private void OnFocusChange(object sender, AutomationFocusChangedEventArgs e) 
{ 
    var element = sender as AutomationElement; 
    if (element == null) return; 
    Automation.AddAutomationPropertyChangedEventHandler(element, Treecope.Element, OnChange, AutomationElement.NameProperty, ...); 

    if (element.GetSupportedPatterns().Any(p => p.Equals(InvokePattern.Pattern))) 
     Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent, element, TreeScope.Element, OnClicked); 

    var window = element.Current.ControlType.Equals(ControlType.Window) ? element : GetElementWindow(element); 
     Automation.AddAutomationEventHandler(WindowPattern.WindowClosedEvent, window, TreeScope.Element, OnClosed); 
} 

現在,qustion其中根據企業的性質訂閱,實際上取決於你的元素是什麼發送事件。這個你可以用間諜工具查看,比如inspect,UISpy,UIAVerify,AccEvent等。