FlaUI 功能强大,用法简洁。
请用几分钟看完本教程,定能轻松学会编写 Windows 自动化程序。
首先,我们使用小、轻、快的开发工具 aardio 创建空白工程:
双击打开 main.aardio ,输入下面的代码( 稍等下文会讲:怎么用 aardio 提供的 『FlaUI 探测器』自动生成这些代码 ):
import FlaUI.UIA3;
var uia = FlaUI.UIA3.UIA3Automation();
//查找微信主窗口
var window = uia.FindWindow("WeChat.exe");
if(window){
//前置窗口
window.Focus();
//查找文件传输助手的输入框
var input = window.FindFirstByXPath(`//Edit[@Name="文件传输助手"]`);
//点击输入框
mouse.click(input);
//发送文本
key.sendString("测试内容");
//查找发送按钮
var sendButton = window.FindFirstByXPath("//Button[@Name='发送(S)']");
//点击发送按钮
mouse.click(sendButton);
}
点击『运行』按键可以直接测试程序。
或者点击『发布』可以直接生成 EXE 文件。
在 aardio 中打开『工具 / 探测器 / FlaUI 探测器 』:
将上面的探针拖动到目标控件(或者勾选按 Ctrl 自动探测鼠标指向的控件),就可以自动生成 FlaUI 自动化操作控件的代码了。
FlaUI 官方提供了一个探测器 FlaUInspect,但是这个 FlaUInspect 有点问题:一个是不稳定窗口会突然闪退消失,鼠标位置探测的控件也不对(例如微信只能取到主窗口而不是内部控件),FlaUInspect 生成的 XPath 也是错的,FlaUI 在生成 XPath 时总是漏掉子级控件,所以最后得到的 XPath 总是无效的?。
好在 aardio 实现这些功能很快,所以我直接用 aardio 重新写了一个 FlaUI 探测器,其实别的功能一般用不上,我们主要是拿到正确的 X?Path 就可以了。
?下面我们简单解释一下工具生成的自动化代码。
先看查找窗口的几个参数:
var window = uia.FindWindow("EXE文件名","窗口类名","窗口标题")
这几个参数都是可选的,至少指定一个条件就行了,例如:
//查找微信窗口
var window = uia.FindWindow("WeChat.exe");
var window = uia.FindWindow("WeChat.exe","WeChatMainWndForPC");
var window = uia.FindWindow("WeChat.exe","WeChatMainWndForPC","微信");
var window = uia.FindWindow( ,"WeChatMainWndForPC","微信");
var window = uia.FindWindow( , , "微信");
以上写法都是可以的。
下面再看看如何使用 XPath 搜索要操作的目标控件,例如:
var input = window.FindFirstByXPath(`/Pane/Edit`);
上面的 XPath 参数用斜杠分隔上下级表示控件的包含关系,参数 `/Pane/Edit` 指定在 Pane 控件内再去找 Edit 控件。这里的 Pane,Edit 都是指控件的类型( ControlType )。
XPath 最开始的单个斜杆表示根路径 —— 指向上面的 window 对象(主窗口)自身。
也可以两个斜杠表示模糊匹配任意深度的路径,例如:
window.FindFirstByXPath(`//Edit`);
这就表示只要匹配到 Edit 控件就可以,而不管他出现在哪一层级的控件内部。
我们还可以在 [] 指定一个序号,表示匹配第几个同层级同类型的兄弟控件。
例如匹配第 2 个 Pane 控件下面任意层级的 Edit 控件:
window.FindFirstByXPath(`/Pane[2]//Edit`);
我们还可以在[] 中指定控件的其他属性,例如:
window.FindFirstByXPath(`//Edit[@Name="文件传输助手"]`);
属性名前面要加一个 @ 符号。可以指定的属性有: @AutomationId,@Name,@ClassName,@HelpText 。
序号、属性可以连续写,例如:
window.FindFirstByXPath(`//Edit[2]][@Name="名称"][@AutomationId="ID"]`);
aardio 自带的 FlaUI 探测器会自动检查这些属性,例如:?如果探测的目标控件提供 AutomationId 属性,那么生成的 XPath 就会自动指定 AutomationId 属性。
其他关于 鼠标(mouse 库函数),键盘(key 库函数)用法,以及更多自动化操作请参考 aardio 自带范例:
本文暂时没有评论,来添加一个吧(●'◡'●)