跳到主要内容

窗口界面控制

用 Windows UI Automation 触发窗口里的菜单、按钮等控件。需要按 XPath 定位时,用 窗口界面控制(FlaUI)

当前模块定义

sys:uiautomation第三方软件交互Action
标准模块
输入 12 · 输出 10 · 枚举 4

输入参数

  • 操作类型typeEnum必填

    操作类型。按下和抬起需要配对使用。

    填写 固定输入默认 TriggerMenu
    7 个选项触发窗口菜单、触发窗口控件、获取窗口控件信息
    触发窗口菜单默认TriggerMenu
    触发窗口控件TriggerControl
    获取窗口控件信息GetControlInfo
    获取鼠标指针位置控件信息GetCursorPointControlInfo
    获取焦点控件信息GetFocusedControlInfo
    获取指定位置控件信息GetControlInfoByPosition
    更新"另存为"或"打开"对话框的路径UpdateSaveAsDialogPath
  • 窗口句柄windowText可选

    要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。

    填写 输入或变量条件 仅:TriggerMenu, TriggerControl, GetControlInfo
  • 菜单路径menuPathText可选

    菜单的展开路径。每行写一个级别的菜单名(需完全匹配)

    填写 输入或变量条件 仅:TriggerMenu
  • 展开延时expandDelayInteger可选

    等待下级菜单展开的时间(ms)

    填写 固定输入条件 仅:TriggerMenu默认 200
  • 控件名controlText可选

    控件名,请确保唯一性。

    填写 输入或变量条件 仅:TriggerControl, GetControlInfo
  • 控件类型controlTypeEnum可选

    可选。当有多个名称相同但类型不同的控件时区分。

    填写 输入或变量条件 仅:TriggerControl, GetControlInfo默认 0
    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可选

    对控件执行的操作。

    填写 固定输入条件 仅:TriggerControl默认 Auto
    17 个选项自动、调用(按钮、菜单项等)、鼠标左键单击
    自动默认Auto
    调用(按钮、菜单项等)Invoke
    鼠标左键单击LeftClick
    鼠标中键单击MiddleClick
    鼠标右键单击RightClick
    鼠标左键双击LeftDoubleClick
    单选:选择(单选框、标签页等)Select
    多选:添加到多选(多选列表等)AddToSelection
    多选:从多选中移除(多选列表)RemoveFromSelection
    多选:切换选中状态ToggleItemSelection
    展开折叠:展开(菜单等)Expand
    展开折叠:折叠(菜单等)Collapse
    展开折叠:切换展开折叠(菜单等)ToggleExpandCollapse
    切换:切换(检查框等)Toggle
    切换:开(检查框等)ToggleOn
    切换:关(检查框等)ToggleOff
    设置值SetValue
  • valueText可选

    仅用于 "设置值" 操作。

    填写 输入或变量条件 仅:TriggerControl
  • 坐标位置pointLocationText可选

    指定要检查的控件的屏幕坐标位置,格式为"x,y"

    填写 输入或变量条件 仅:GetControlInfoByPosition
  • 路径pathText可选

    要更新的路径

    填写 输入或变量条件 仅:UpdateSaveAsDialogPath
  • 自动创建文件夹autoCreateDirEnum可选

    如果目录不存在则自动创建。

    填写 固定输入条件 仅:UpdateSaveAsDialogPath默认 no
    4 个选项不自动创建、自动创建:自动(根据后缀自动判断路径为文件还是文件夹路径)、自动创建:给定文件路径
    不自动创建默认no
    自动创建:自动(根据后缀自动判断路径为文件还是文件夹路径)auto
    自动创建:给定文件路径asFilePath
    自动创建:给定文件夹路径asFolderPath
  • 失败后停止stopIfFailBoolean可选

    失败后是否停止动作

    填写 固定输入默认 true

输出参数

  • 是否成功isSuccessBoolean

    操作是否成功

  • valueText

    控件的值

    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 文本controlTextText

    获取控件上的文本。根据控件不同,可能从Value、Text、Name等信息获取。

    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 位置rectText

    控件坐标位置

    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 控件名称controlNameText
    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 控件类型controlTypeText
    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 控件类型IDcontrolTypeIdInteger
    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 是否启用controlIsEnabledBoolean

    控件未处于禁用状态

    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 是否可见controlIsVisibleBoolean

    控件是否在屏幕上。

    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition
  • 原始句柄controlNativeWindowHandleInteger

    控件的原始窗口句柄(NativeWindowHandle)

    条件 仅:GetControlInfo, GetCursorPointControlInfo, GetFocusedControlInfo, GetControlInfoByPosition

概述

Quicker 提供两套窗口界面控制:

窗口界面控制

  • 基于 .NET 自带接口。
  • 用控件名称和类型定位。有的界面查找较久,期间会卡顿。
  • 不支持多个同名控件。

窗口界面控制(FlaUI)

  • 基于 FlaUI
  • 可用 XPath 定位控件。

每个软件对 UI Automation 的支持不同,只能在一部分软件、一部分界面上使用,需要实测。窗口状态不对时也可能失败。多步操作中间要留等待,等界面准备好。复杂界面查找控件可能较慢。

可用 Windows SDK 的 inspect.exe 查看控件「名称」。下载见文末相关链接。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
窗口句柄
 
要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。
控件名
 
控件名,请确保唯一性。
控件类型
可选。当有多个名称相同但类型不同的控件时区分。
动作
对控件执行的操作。
 
仅用于 "设置值" 操作。
是否成功
-- 选择变量 --
操作是否成功

参数说明

操作类型:触发窗口菜单、触发窗口控件、获取窗口控件信息、获取鼠标指针位置控件信息、获取焦点控件信息、获取指定位置控件信息、更新「另存为」或「打开」对话框的路径。

窗口句柄:要操作哪个窗口。不填表示前台窗口;也可填窗口句柄数字。显示于触发菜单 / 触发控件 / 获取窗口控件信息。

失败后停止:出错后是否中止动作。默认开启。

触发窗口菜单

用于触发软件的菜单项。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
窗口句柄
 
要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。
菜单路径
视图(V) 详情(D)
菜单的展开路径。每行写一个级别的菜单名(需完全匹配)
展开延时
200
等待下级菜单展开的时间(ms)
是否成功
-- 选择变量 --
操作是否成功

上图设置用于触发下面的菜单。

菜单路径:要展开或点击的各级菜单名称,每行一个。必须完全匹配,且名称不能重复。

展开延时:上级菜单展开后等到下级可用的毫秒数,默认 200。各软件需要的等待不同。

触发窗口控件

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
窗口句柄
 
要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。
控件名
选项
控件名,请确保唯一性。
控件类型
可选。当有多个名称相同但类型不同的控件时区分。
动作
对控件执行的操作。
 
仅用于 "设置值" 操作。
是否成功
-- 选择变量 --
操作是否成功

上面用于定位资源管理器里的「选项」按钮。

控件名inspect.exe 里看到的名称,一般是控件上的文字,可能随状态变化。有重名时返回找到的第一个。名称相同、类型不同时再用 控件类型 区分。

控件类型:可选。有同名不同类型控件时用来筛选。下拉项对应的数字可在变量里传递,例如拆分按钮 50031、组合框 50003、按钮 50000

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

选「自动」会依次尝试:调用、切换选中状态、选择、展开、点击,直到其中一个成功。

:仅「设置值」动作使用。

获取窗口控件信息

获取指定控件的信息。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
窗口句柄
 
要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。
控件名
特殊格式(S):
控件名,请确保唯一性。
控件类型
可选。当有多个名称相同但类型不同的控件时区分。
是否成功
-- 选择变量 --
操作是否成功
-- 选择变量 --
控件的值
文本
-- 选择变量 --
获取控件上的文本。根据控件不同,可能从Value、Text、Name等信息获取。
位置
-- 选择变量 --
控件坐标位置
控件名称
-- 选择变量 --
控件类型
-- 选择变量 --
控件类型ID
-- 选择变量 --
是否启用
-- 选择变量 --
控件未处于禁用状态
是否可见
-- 选择变量 --
控件是否在屏幕上。
原始句柄
-- 选择变量 --
控件的原始窗口句柄(NativeWindowHandle)

输出

  • :控件的值。
  • 文本:控件上的文字;按控件不同,可能来自 Value、Text 或 Name。
  • 位置:范围,格式 Left,Top,Right,Bottom
  • 控件名称
  • 控件类型:类型名称,不一定和 inspect.exe 里完全一致。
  • 控件类型ID:类型数字。
  • 是否启用:控件未处于禁用状态。
  • 是否可见:控件是否在屏幕上。
  • 原始句柄:控件的 NativeWindowHandle。

下面几种「获取信息」操作的输出字段相同。

获取鼠标指针位置控件信息

获取当前鼠标位置界面元素的信息。不需要填写窗口或控件名。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
是否成功
-- 选择变量 --
操作是否成功
-- 选择变量 --
控件的值
文本
-- 选择变量 --
获取控件上的文本。根据控件不同,可能从Value、Text、Name等信息获取。
位置
-- 选择变量 --
控件坐标位置
控件名称
-- 选择变量 --
控件类型
-- 选择变量 --

获取焦点控件信息

获得当前拥有输入焦点的控件信息。输出字段同上。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
是否成功
-- 选择变量 --
操作是否成功
-- 选择变量 --
控件的值
文本
-- 选择变量 --
获取控件上的文本。根据控件不同,可能从Value、Text、Name等信息获取。
位置
-- 选择变量 --
控件坐标位置
控件名称
-- 选择变量 --

获取指定位置控件信息

按屏幕坐标读取该位置的控件信息。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
坐标位置
100,200
指定要检查的控件的屏幕坐标位置,格式为"x,y"
是否成功
-- 选择变量 --
操作是否成功
-- 选择变量 --
控件的值
文本
-- 选择变量 --
获取控件上的文本。根据控件不同,可能从Value、Text、Name等信息获取。
位置
-- 选择变量 --
控件坐标位置

坐标位置:屏幕坐标,格式 x,y

更新「另存为」或「打开」对话框的路径

用来快速改保存 / 打开路径或文件名。有的软件使用非 Windows 标准文件对话框,可能无法控制。

窗口界面控制

触发Windows窗口的菜单/按钮等控件。
操作类型
操作类型。按下和抬起需要配对使用。
路径
C:\Users\cuili\Desktop\
要更新的路径
自动创建文件夹
如果目录不存在则自动创建。
是否成功
-- 选择变量 --
操作是否成功

路径

  • 文件夹完整路径:切换到该文件夹。
  • 带文件名的完整路径:保存或打开该文件。
  • 只有文件名:另存或打开这个文件名。
  • 支持多选的对话框可用 "文件名1" "文件名2" 选多个文件。

自动创建文件夹:目录不存在时是否创建。可选不自动创建、自动(按后缀判断是文件还是文件夹)、按文件路径创建、按文件夹路径创建。

示例动作

窗口界面控制 FlaUI 版

基本原理与本模块相同,参数以 窗口界面控制(FlaUI) 为准。XPath 语法见 窗口界面控制的 XPATH 简介

窗口界面控制(FlaUI)

触发Windows窗口的菜单/按钮等控件(通过FlaUI库实现)。
操作类型
操作类型。按下和抬起需要配对使用。
窗口句柄
 
要操作哪个窗口的控件。不填写=使用前台窗口;或窗口句柄数字。
控件XPath或Name
 
控件的XPath或Name、AutomationId。XPath以/开始。(可写多个,每行一个,前一个查找失败时会自动尝试下一个)
动作
对控件执行的操作。

控件XPath或Name:相对窗口的 XPath,或控件名 / AutomationId。XPath 以 / 开头。可写多行,前一个找不到时自动试下一行。用名称遍历查找时,限制与基础版相同。

点右侧定位按钮,可从窗口拾取控件并得到 XPath。

视频演示

更新另存窗口的文件类型:

用 FlaUInspect 取得 XPath

启动 FlaUInspect 时选择 UIA3:

在 Mode 菜单中开启 HoverMode 和 ShowXPath:

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

此 XPath 会包含窗口本身(第一段,如上图的 /Window)。Quicker 从窗口本身开始查找,需要去掉第一段再使用。

限制与排障

  • 并非所有软件、所有界面都支持 UI Automation,需要实测。
  • 多步之间要加等待,等界面准备好。
  • 复杂界面查找控件可能较久并造成卡顿。
  • 非标准「另存为 / 打开」对话框可能无法改路径。

相关链接

相关资源

更新于