![](/img/trans.png)
[英]C# UI Automation API with multiple virtual desktops on Windows 10
[英]C# Automation Click Button On Windows 10 Calculator
所以我是 C# 的新手,我想做一个自动化,点击 Win10 计算器上的几个按钮
Auto.getWindow({
"className": "ApplicationFrameWindow",
"title": "Calculator"
}).getWindow({
"className": "Windows.UI.Core.CoreWindow",
"title": "Calculator"
}).getGeneric({
"type": "Group",
"automationId": "NumberPad",
"name": "Number pad",
"className": "NamedContainerAutomationPeer"
}).getButton({
"automationId": "num5Button",
"name": "Five",
"className": "Button"
}).click(52, 24);
我像这样转移了getWindow并且有效
int hwnd=0;
IntPtr hwndChild=IntPtr.Zero;
IntPtr hwndChild2 = IntPtr.Zero;
//Get a handle for the Calculator Application main window
hwnd = FindWindow("ApplicationFrameWindow", "Calculator");
hwndChild = FindWindowEx((IntPtr)hwnd,IntPtr.Zero, "Windows.UI.Core.CoreWindow", "Calculator");
但现在我需要点击按钮,我被卡住了。 我知道点击的最终结果是
SendMessage((int)hwndChild2, BM_CLICK, 0, IntPtr.Zero);
但我错过了到达按钮 position 的部分。 我不想使用 SendKeys。 谢谢你,如果我错过了什么或不清楚的话,我很抱歉。
如上所述,这可以通过 UIAutomation 来完成。 例如像这样:
public static AutomationElement calcUI;
public void FindAndClickButton(string name)
{
System.Windows.Automation.Condition condition1 = new PropertyCondition(AutomationElement.ClassNameProperty, "Button");
System.Windows.Automation.Condition condition2 = new PropertyCondition(AutomationElement.NameProperty, name);
System.Windows.Automation.Condition condition = new AndCondition(condition1, condition2);
AutomationElement button = calcUI.FindFirst(TreeScope.Descendants, condition);
InvokePattern btnPattern = button.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
btnPattern.Invoke();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var calc = System.Diagnostics.Process.Start("calc");
//wait for the UI to appear
calc.WaitForInputIdle(5000);
System.Threading.Thread.Sleep(2000);
AutomationElement root = AutomationElement.RootElement;
System.Windows.Automation.Condition condition = new PropertyCondition(AutomationElement.NameProperty, "Calculator");
calcUI = root.FindFirst(TreeScope.Children, condition);
if (calcUI != null)
{
// get and click the buttons for the calculation
FindAndClickButton("Five");
FindAndClickButton("Plus");
FindAndClickButton("Nine");
FindAndClickButton("Multiply by");
FindAndClickButton("Three");
FindAndClickButton("Divide by");
FindAndClickButton("Four");
FindAndClickButton("Equals");
//get the result
System.Windows.Automation.Condition conditionResult = new PropertyCondition(AutomationElement.AutomationIdProperty, "CalculatorResults");
var result = calcUI.FindFirst(TreeScope.Descendants, conditionResult);
MessageBox.Show(result.Current.Name);
}
}
不要忘记添加对项目的引用
UIAutomationClient
UIAutomationTypes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.