2013-07-11 2 views
1

Мне было интересно, как я могу получить конкретный тип действия на AutomationElement? У меня есть все детали, когда речь идет о AutomationElement использованияПолучить тип AutomationEvent C# UIAutomation

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

И там я могу получить всю информацию о сосредоточен элементе.

Но мне нужно знать, была ли нажата кнопка, если был отредактирован вход редактирования, или окно было закрыто и так далее.

Я знаю, что такая информация предоставляется в AccEvent, и она различает события между Property, Focus и Automation с дальнейшими подробностями.

В принципе, я хочу записать действие, выполняемое на элемент, а затем повторить его.

Как я могу использовать его с помощью C#?

КПП. Я использую класс COMwrapper для UIAutomation.

+0

Вы имеете в виду, что после того, как у вас есть сфокусированная ручка окна, загляните в нее и встаньте, и событие, когда нажимается кнопка? В любом случае вы должны заметить, что нет никакой связи между событием FocusChanged и нажатием кнопки или редактированием ввода ... – Louisbob

ответ

1

После того, как вы получите элемент из события с измененным фокусом, вы можете добавить обработчики для нажатия кнопки (invoke), отредактированного (свойства) и закрытия. Вот как:

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 из которых proprties подписаться, действительно зависит от того, каких событий вашего элемента отправки. Это можно просмотреть с помощью шпионских инструментов, таких как проверка, UISpy, UIAVerify, AccEvent и т. Д.