窗口界面控制
用 Windows UI Automation 触发窗口里的菜单、按钮等控件。需要按 XPath 定位时,用 窗口界面控制(FlaUI)。
当前模块定义
sys:uiautomation输入 12 · 输出 10 · 枚举 4
输入参数
- 操作类型
typeEnum必填操作类型。按下和抬起需要配对使用。
7 个选项触发窗口菜单、触发窗口控件、获取窗口控件信息
触发窗口菜单默认TriggerMenu触发窗口控件TriggerControl获取窗口控件信息GetControlInfo获取鼠标指针位置控件信息GetCursorPointControlInfo获取焦点控件信息GetFocusedControlInfo获取指定位置控件信息GetControlInfoByPosition更新"另存为"或"打开"对话框的路径UpdateSaveAsDialogPath - 窗口句柄
windowText可选要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。
- 菜单路径
menuPathText可选菜单的展开路径。每行写一个级别的菜单名(需完全匹配)
- 展开延时
expandDelayInteger可选等待下级菜单展开的时间(ms)
- 控件名
controlText可选控件名,请确保唯一性。
- 控件类型
controlTypeEnum可选可选。当有多个名称相同但类型不同的控件时区分。
40 个选项任意类型、按钮、日历
任意类型默认0按钮50000日历50001复选框50002组合框50003自定义50025数据网格50028数据项50029文档50030编辑50004组50026标头50034标头项50035超链接50005图像50006列表视图50008列表项50007菜单50009菜单栏50010菜单项50011窗格50033进度栏50012单选按钮50013滚动条50014分隔符50038滑块50015微调框50016拆分按钮50031状态栏50017选项卡50018选项卡项50019表50036文本50020缩略50027标题栏50037工具栏50021工具提示50022树视图50023树视图项50024窗口50032 - 动作
controlOperationEnum可选对控件执行的操作。
17 个选项自动、调用(按钮、菜单项等)、鼠标左键单击
自动默认Auto调用(按钮、菜单项等)Invoke鼠标左键单击LeftClick鼠标中键单击MiddleClick鼠标右键单击RightClick鼠标左键双击LeftDoubleClick单选:选择(单选框、标签页等)Select多选:添加到多选(多选列表等)AddToSelection多选:从多选中移除(多选列表)RemoveFromSelection多选:切换选中状态ToggleItemSelection展开折叠:展开(菜单等)Expand展开折叠:折叠(菜单等)Collapse展开折叠:切换展开折叠(菜单等)ToggleExpandCollapse切换:切换(检查框等)Toggle切换:开(检查框等)ToggleOn切换:关(检查框等)ToggleOff设置值SetValue - 值
valueText可选仅用于 "设置值" 操作。
- 坐标位置
pointLocationText可选指定要检查的控件的屏幕坐标位置,格式为"x,y"
- 路径
pathText可选要更新的路径
- 自动创建文件夹
autoCreateDirEnum可选如果目录不存在则自动创建。
4 个选项不自动创建、自动创建:自动(根据后缀自动判断路径为文件还是文件夹路径)、自动创建:给定文件路径
不自动创建默认no自动创建:自动(根据后缀自动判断路径为文件还是文件夹路径)auto自动创建:给定文件路径asFilePath自动创建:给定文件夹路径asFolderPath - 失败后停止
stopIfFailBoolean可选失败后是否停止动作
输出参数
- 是否成功
isSuccessBoolean操作是否成功
- 值
valueText控件的值
- 文本
controlTextText获取控件上的文本。根据控件不同,可能从Value、Text、Name等信息获取。
- 位置
rectText控件坐标位置
- 控件名称
controlNameText - 控件类型
controlTypeText - 控件类型ID
controlTypeIdInteger - 是否启用
controlIsEnabledBoolean控件未处于禁用状态
- 是否可见
controlIsVisibleBoolean控件是否在屏幕上。
- 原始句柄
controlNativeWindowHandleInteger控件的原始窗口句柄(NativeWindowHandle)
概述
Quicker 提供两套窗口界面控制:

窗口界面控制
- 基于 .NET 自带接口。
- 用控件名称和类型定位。有的界面查找较久,期间会卡顿。
- 不支持多个同名控件。
窗口界面控制(FlaUI)
- 基于 FlaUI。
- 可用 XPath 定位控件。
每个软件对 UI Automation 的支持不同,只能在一部分软件、一部分界面上使用,需要实测。窗口状态不对时也可能失败。多步操作中间要留等待,等界面准备好。复杂界面查找控件可能较慢。
可用 Windows SDK 的 inspect.exe 查看控件「名称」。下载见文末相关链接。
窗口界面控制
参数说明
操作类型:触发窗口菜单、触发窗口控件、获取窗口控件信息、获取鼠标指针位置控件信息、获取焦点控件信息、获取指定位置控件信息、更新「另存为」或「打开」对话框的路径。
窗口句柄:要操作哪个窗口。不填表示前台窗口;也可填窗口句柄数字。显示于触发菜单 / 触发控件 / 获取窗口控件信息。
失败后停止:出错后是否中止动作。默认开启。
触发窗口菜单
用于触发软件的菜单项。
窗口界面控制
上图设置用于触发下面的菜单。

菜单路径:要展开或点击的各级菜单名称,每行一个。必须完全匹配,且名称不能重复。
展开延时:上级菜单展开后等到下级可用的毫秒数,默认 200。各软件需要的等待不同。
触发窗口控件
窗口界面控制
上面用于定位资源管理器里的「选项」按钮。

控件名:inspect.exe 里看到的名称,一般是控件上的文字,可能随状态变化。有重名时返回找到的第一个。名称相同、类型不同时再用 控件类型 区分。
控件类型:可选。有同名不同类型控件时用来筛选。下拉项对应的数字可在变量里传递,例如拆分按钮 50031、组合框 50003、按钮 50000。

动作:找到控件后要执行的操作。各控件支持的动作不同,需要实测。

选「自动」会依次尝试:调用、切换选中状态、选择、展开、点击,直到其中一个成功。
值:仅「设置值」动作使用。
获取窗口控件信息
获取指定控件的信息。
窗口界面控制
输出
- 值:控件的值。
- 文本:控件上的文字;按控件不同,可能来自 Value、Text 或 Name。
- 位置:范围,格式
Left,Top,Right,Bottom。 - 控件名称
- 控件类型:类型名称,不一定和
inspect.exe里完全一致。 - 控件类型ID:类型数字。
- 是否启用:控件未处于禁用状态。
- 是否可见:控件是否在屏幕上。
- 原始句柄:控件的 NativeWindowHandle。
下面几种「获取信息」操作的输出字段相同。
获取鼠标指针位置控件信息
获取当前鼠标位置界面元素的信息。不需要填写窗口或控件名。
窗口界面控制
获取焦点控件信息
获得当前拥有输入焦点的控件信息。输出字段同上。
窗口界面控制
获取指定位置控件信息
按屏幕坐标读取该位置的控件信息。
窗口界面控制
坐标位置:屏幕坐标,格式 x,y。
更新「另存为」或「打开」对话框的路径
用来快速改保存 / 打开路径或文件名。有的软件使用非 Windows 标准文件对话框,可能无法控制。
窗口界面控制
路径:
- 文件夹完整路径:切换到该文件夹。
- 带文件名的完整路径:保存或打开该文件。
- 只有文件名:另存或打开这个文件名。
- 支持多选的对话框可用
"文件名1" "文件名2"选多个文件。
自动创建文件夹:目录不存在时是否创建。可选不自动创建、自动(按后缀判断是文件还是文件夹)、按文件路径创建、按文件夹路径创建。
示例动作
窗口界面控制 FlaUI 版

基本原理与本模块相同,参数以 窗口界面控制(FlaUI) 为准。XPath 语法见 窗口界面控制的 XPATH 简介。
窗口界面控制(FlaUI)
控件XPath或Name:相对窗口的 XPath,或控件名 / AutomationId。XPath 以 / 开头。可写多行,前一个找不到时自动试下一行。用名称遍历查找时,限制与基础版相同。
点右侧定位按钮,可从窗口拾取控件并得到 XPath。
更新另存窗口的文件类型:

用 FlaUInspect 取得 XPath
启动 FlaUInspect 时选择 UIA3:

在 Mode 菜单中开启 HoverMode 和 ShowXPath:

鼠标移到某个窗口上后按 Ctrl,FlaUInspect 会更新当前位置的窗口、控件信息。窗口底部显示 XPath。

此 XPath 会包含窗口本身(第一段,如上图的 /Window)。Quicker 从窗口本身开始查找,需要去掉第一段再使用。
限制与排障
- 并非所有软件、所有界面都支持 UI Automation,需要实测。
- 多步之间要加等待,等界面准备好。
- 复杂界面查找控件可能较久并造成卡顿。
- 非标准「另存为 / 打开」对话框可能无法改路径。
相关链接
相关资源
更新于