找不到控件

Unable to find control

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

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

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

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

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

方法 1 - 发送击键:

  1. WindowActivate
  2. 激活window
  3. 发送多个 TAB 直到控件获得焦点(如果最初不是)
  4. Send 输入或 SPACE

方法二 - MouseClick:

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

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

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

方法四-图片搜索:

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

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

当 AutoIt Window 信息工具失败时,我使用 button/ui 控件的文本 属性 成功了:

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

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

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

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