【问题标题】:Unable to find control找不到控制
【发布时间】:2017-11-13 12:52:26
【问题描述】:

我想使用 Autoit 查找并单击一个按钮。我尝试了 AutoIt 窗口信息工具,但按钮无法识别,因此 ControlClick() 失败。

该按钮在当前窗口中处于活动状态,但Send("Enter") 不起作用。尝试使用MouseClick(),但窗口每次都不会出现在同一个地方,我尝试了这个脚本:

$hWnd = WinWait("vcredist_x86")
WinWaitActive("vcredist_x86")
ControlClick($hWnd, "", "[CLASS FROM AUTOITINFO]", "Left", 1)

但它们都不起作用。还有其他方法可以识别并点击按钮吗?

【问题讨论】:

    标签: autoit


    【解决方案1】:

    如果AutoItWindowInfo(32 位和 64 位)的两个版本都没有“看到”您需要自动化的控件,您可以执行以下操作:

    方法 1 - 发送击键:

    1. WindowActivate激活窗口
    2. 发送多个 TAB 直到控件获得焦点(如果最初不是)
    3. Send ENTER 或空格

    方法 2 - MouseClick:

    1. 激活窗口
    2. 获取控件相对于应用程序窗口的坐标(将窗口定位在 0,0。打开Autoit Window Info,单击鼠标选项卡并获取按钮的位置)。该位置通常始终相同
    3. 当您的代码运行时,它必须使用WinGetPos 获取窗口位置,然后添加您在第 2 步中获得的控制位置。这就是您的点击位置。

    方法3 - PixelSearch(如果控件有唯一的颜色):

    1. 使用AutoIt Window Info(鼠标选项卡)获得所需的颜色
    2. 使用PixelSearch搜索
    3. 点击你得到的坐标

    方法 4 - 图片搜索:

    1. 获取ImageSearch UDF 和 DLL
    2. 制作按钮图片
    3. 搜索并点击

    注意:有时您需要授予脚本管理员权限才能自动执行某些窗口。

    【讨论】:

    • 我试过用这个 WinActivate("WindowTitle") sleep(2000) WinGetPos, X, Y, , , WindowTitle X+= 412 Y+= 169 MouseClick("&Yes" [,%X%, %Y %]) -- 但这显示了一个错误,显示无法解析行。我在这里错过了什么?
    • @Rahulk 那是什么语言?它肯定不是 Autoit。看看 WinGetPos 和 AutoIt sintax autoitscript.com/autoit3/docs/functions/WinGetPos.htm
    【解决方案2】:

    当 AutoIt Window Information Tool 失败时,我成功使用了按钮/ui 控件的 text 属性:

    ControlClick($hwin, '', '[CLASS:Button; TEXT:Cancel]')
    

    尝试在其中一个字符前加上“&”(Windows 下划线表示 Alt + key 快捷方式),因此请尝试“&Cancel”而不是“取消”。如果失败,请先尝试ControlFocus()

    ControlFocus($hwin, '', '[CLASS:Button; TEXT:Cancel]')
    ControlClick($hwin, '', '[CLASS:Button; TEXT:Cancel]')
    

    检查 GUI 资源的 .exe 文件(例如使用 Resource Hacker)可能会暴露控件的文本/属性。示例:

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多