前提工作:
①需要引入命名空间:using System.Windows.Automation;
②添加两个引用:UIAutomationClient、UIAutomationTypes
using System.Windows.Automation;
private static void AutoClickLoginButton(){//进程名称 可替换为你程序的进程string appName = "FR";Process[] myProcesses = Process.GetProcessesByName(appName);if (myProcesses.Length > 0) // 如果程序已经启动{Process targetProcess = myProcesses[0];AutomationElement rootElement = AutomationElement.FromHandle(targetProcess.MainWindowHandle);AutomationElement loginButton = FindLoginButton(rootElement);if (loginButton != null){// 使用 InvokePattern 模拟点击登录按钮InvokePattern invokePattern = loginButton.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;invokePattern.Invoke();}}}private static AutomationElement FindLoginButton(AutomationElement element){// 查找子元素 查找子窗体下的按钮的名称 根据实际情况修改AutomationElement loginButton = element.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "登录"));if (loginButton != null){return loginButton;}// 递归查找子元素AutomationElementCollection children = element.FindAll(TreeScope.Children, Condition.TrueCondition);foreach (AutomationElement child in children){loginButton = FindLoginButton(child);if (loginButton != null){return loginButton;}}return null;}
实现原理:
当程序已经启动时,AutoClickLoginButton 方法会寻找名为"FR"的应用程序进程。然后,它使用 AutomationElement.FromHandle 从该进程的主窗口句柄获取根元素。
接着,FindLoginButton 方法被调用,该方法在根元素及其子元素中递归查找名为"登录"的登录按钮。
如果找到登录按钮,代码会使用 InvokePattern 模拟点击登录按钮。InvokePattern.Invoke() 方法会模拟用户点击按钮的动作。
整体来说,这段代码利用 UI 自动化框架与应用程序的用户界面进行交互。它通过搜索应用程序的界面层级结构来定位登录按钮,并模拟点击操作。