1

我想知道如何获得特定类型的操作AutomationElement?当涉及到 AutomationElement 使用时,我有所有详细信息

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

在那里我可以获得有关重点元素的所有信息。

但是我需要知道是否单击了例如按钮,是否编辑了编辑输入或关闭了窗口等等。

我知道 AccEvent 中提供了这种信息,它区分了属性、焦点和自动化之间的事件,每个事件都有更多详细信息。

基本上我想记录对元素执行的操作,然后重复它。

如何使用 C# 获取它?

顺便提一句。我将 COMwrapper 类用于 UIAutomation。

4

1 回答 1

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);
}

现在,要订阅哪些属性的问题实际上取决于您的元素发送的事件。您可以使用诸如inspect、UISpy、UIAVerify、AccEvent 等间谍工具查看。

于 2015-09-11T05:16:38.700 回答