自动 - 控制单击不起作用



我不知道如何使其工作,或者我错过了一些东西 - 也许在#include?在这一点上,我有:

#RequireAdmin
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
;vcdredist
Run($sDrivers & "vcredist_x86.exe")
WinWaitActive("vcredist_x86")
;ControlClick("Microsoft Visual C++ 2010  x86 Redistributable Maintenance", "","[CLASS:Button; INSTANCE:3]")
ControlClick("Microsoft Visual C++ 2010  x86 Redistributable Maintenance", "","[ID:105]")

我已经检查了AutoIt v3 WIndow Control,ControlClick中的参数是正确的

最后两行都没有使AutoIt选择所需的选项。任何帮助非常感谢。

WinWaitActive()

可能不是您要查找的内容,因为它等待窗口处于活动状态以运行代码。WinActivate() 激活窗口。如果您希望代码在激活窗口时运行,则WinWaitActive()就可以了。

此外,您还可以通过执行此操作来避免在控件单击中使用标题。

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

"自动窗口信息"工具查找类(如果尚未使用)。(https://www.autoitscript.com/autoit3/docs/intro/au3spy.htm)

如果 ControlClick 仍然不起作用,那么您可以尝试使用

MouseClick("Left", x, y)

X、Y 是坐标。

可能脚本正在等待窗口变为活动状态 WinWaitActive()。

在这种情况下,您可以在WinWaitActive之前使用WinActivate 来避免此问题。

如果你想要一个更强大的解决方案,你可以使用它:

While Not WinActive($win)
    WinActivate($win)
    Sleep(500)
WEnd

我在AutoIt中编写了一个UDF来等待控件。 在这里张贴了几次。 只需给它喂你想要的东西,以及你想等待多长时间(如果适用)。 默认情况下,您可以永远等待。

但是,有一个更简单的解决方案,以安静模式安装它。 运行命令

Run($sDrivers & '\vcredist_x86.exe/q')

现在你不必戳任何按钮。 此外,最好不要使用 ID,因为如果您正在测试正在更改的应用程序,开发人员可以更改所有这些。我使用按钮文本作为附加搜索条件。更可靠,对我的代码的维护更少。

在尝试自动化时,一个应用程序经历了类似的情况,在尝试了所有调试之后,刚刚添加了以下命令,它就像魅力一样工作

#RequireAdmin

最新更新