15
AutomationElement child = walker.GetFirstChild(el);

使用 Windows 自动化我如何模拟左键单击 Child ?

4

3 回答 3

22

Invoke您可以通过以下方式发送鼠标事件,而不是发送鼠标事件InvokePattern

public void InvokeAutomationElement(AutomationElement automationElement)
{
    var invokePattern = automationElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
    invokePattern.Invoke();
}
于 2012-11-10T20:42:24.787 回答
10

尝试:

AutomationElement child = walker.GetFirstChild(el);
System.Windows.Point p = child.GetClickablePoint();
Mouse.Move((int)p.X, (int)p.Y);
Mouse.Click(MouseButton.Left);

链接:
AutomationElement.GetClickablePoint 方法
在没有真正使用鼠标的情况下模拟 WPF 控件上的鼠标 Enter/Move/Leave

编辑评论

请参阅此链接:

Mouse.cs
NativeMethods.cs TestApi
简介 - 第 1 部分:输入注入 API

于 2012-04-11T13:02:16.633 回答
2

如果控件具有“ClickablePoint”,则可以使用此代码

            System.Windows.Point p = theButton.GetClickablePoint();
            AutoItX3Lib.AutoItX3Class au3;
            au3 = new AutoItX3Lib.AutoItX3Class();
            au3.AutoItSetOption("MouseCoordMode", 0);
            au3.MouseClick("LEFT", (int)p.X, (int)p.Y, 1, -1);

其中AutoItX3Lib是 AutoIt 的 C# API

于 2013-07-10T08:19:12.253 回答