我在外部HDD制造公司中工作。我需要升级数千个HDD的固件。我必须按顺序上传两个文件才能完成上传。进行手动处理不仅要花费时间,而且还可能导致人为错误。因此,我决定使用“自动热键”来自动执行击键和鼠标单击操作。我还编译了脚本。但是脚本是不稳定的。有时它工作正常。有时,控件的单击不起作用。有时,按键输入不会被完整键入。但是根据我的知识,该脚本还可以。如果有任何错误,请纠正我。我也想安全地删除驱动器,所以如果有任何编码,请也将其添加
我的过程是解释如下。
下面是我的脚本。
Run, open "Application Location"
Winwait, Warning
if ErrorLevel
{
MsgBox, Window timed out.
return
}
else
{
ControlClick, OK, Warning
Winwait, Application Window name
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
; Upload first FW File
ControlClick, Rescan, Application Window name
ControlClick, Browse, Application Window name
Winwait, Open
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
SendInput, {Raw}Location of First File
Send, {Enter}
}
sleep, 1500
WinActivate, Application Window name
CoordMode, Mouse, Relative
Click 43, 126
ControlClick, Download, Application Window name
Winwait, Warning
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
Send, {Enter}
}
Winwait, Download Successful
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
ControlClick, OK, Download Successful
}
}
; Upload Second FW File
WinActivate, Application Window name
ControlClick, Rescan, Application Window name
ControlClick, Browse, Application Window name
Winwait, Open
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
SendInput, {Raw}Second FW File location
Send, {Enter}
}
sleep, 1500
WinActivate, Application Window name
CoordMode, Mouse, Relative
Click 43, 126
sleep, 2000
ControlClick, Download, Application Window name
Winwait, Warning
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
Send, {Enter}
}
Winwait, Download Successful
if ErrorLevel
{
MsgBox, WinWait timed out.
return
}
else
{
ControlClick, OK, Download Successful
sleep, 1500
ControlClick, Exit, Application Window name
}
}
一些想法:
如果您在前几行返回错误级别,则无需将脚本的其余部分封装在Else语句中并封装括号。并不需要。
WinWait的使用与WinWaitActive不同。窗口可以不激活就存在,因此除非需要在后台查找窗口,否则请始终使用WinWaitActive。使用WinWait可能会导致脚本执行在窗口实际处于活动状态之前继续经过wait语句,从而引起您正在描述的一些问题。
除非需要在Send和SendInput之间进行切换,否则请坚持使用一个或另一个...通常,出于帮助文件中说明的原因,SendInput是更可取的选项。同时使用它们(取决于所使用的程序)可能会导致有关密钥发送方式的时序问题。
在WinActivate的任何实例之后使用WinWaitActive,以确保在继续操作之前该窗口处于活动状态。
对于重复的代码,请尝试使用子例程,即gosub或函数调用。由于更改了文件位置,因此可以在调用之间使用变量来设置文件位置,或者将该变量用作函数调用的参数。如果您更改例程,这将使您不必两次重写所有内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句