这编文章主要是总结自己在编写200906软件自动安装包中脚本的经验,以便与提高自己编写脚本的能力。其实自动脚本的编写很简单,我只用了一个星期的时间学习,就能够自己编写脚本了,但是要写好就不容易,主要是要反复测试。
200906软件自动安装包中的软件安装器是论坛的software installer 2.0版本(见图1)
2009-6-28 20:27:21 上传
下载附件 (38.69 KB)

这是个软件安装器可以自由选择安装路径是非常好的一个软件,下面我把自己在编写脚本时的有关情况进行一下总结
以软件包中迅雷 v5.8.9.662为例,脚本开头的代码如下:
Local $InstallPath
If $Cmdline[0] <> 0 Then
$InstallPath = $Cmdline[1]
EndIf
这段代码具体的意思,我也不是很清楚,但是你要想用software installer 2.0这个安装器,就必须以这段代码开头。
Run(@ScriptDir & "\")
这段代码的意思是运行当前脚本所在的目录中的软件,其中,RUN是运行命令,@ScriptDir是当前运行中的脚本所在的目录(不包括结尾的反斜杠符号)。&是使两个字符串连接起来,后面的代码则是你要安装的软件的文件名。这个代码运行后会出行如下界面(见图2
2009-6-28 20:27:21 上传
下载附件 (29.35 KB)
本帖隐藏的内容
WinWait("安装 - 迅雷5","欢迎使用 active下载迅雷5 安装向导")
WinActivate("安装 - 迅雷5","欢迎使用 迅雷5 安装向导")
WinWaitActive("安装 - 迅雷5","欢迎使用 迅雷5 安装向导")
Send("!N")
WinWait命令是暂停脚本的执行直至指定窗口存在(出现)为止。WinActivate命令是激活指定的窗口。WinWaitActive命令是暂停脚本的执行直至指定窗口被激活(成为可活动状态)为止。这段代码有的人会说只用WinWaitWinWaitActive就可以了,为什么我要在这里加一个WinActivate命令,主要是考虑我们平时装软件时,不可能只装一个,如果我们装的软件较多,加上电脑配置不高的话,可能会导致安装第二个软件时,软件安装界面不在激活状态(这种情况我遇到过),因此,为了安装顺利我认为在这个地方加上WinActivate命令还是有必要的。
Send命令是模拟键盘动作,意思是按ALT+N,其它的键盘按键,大家可以看AU3帮助中Send命令的参数。除了模拟键盘外AU3还提供了模拟鼠标动作,大家可以用ControlClick命令,具体用法可以看小穆的教程(他主要以模拟鼠标动作为主)。www.freeskycd/bbs/viewthread.php?tid=18186&fromuid=9516
,上面的代码执行后(见图3
2009-6-28 20:27:21 上传
下载附件 (49.24 KB)
WinWait("安装 - 迅雷5","许可协议")
WinWaitActive("安装 - 迅雷5","许可协议")
Send("!A")
send("!N")
这段代码是指捕抓到窗口后,先按ALT+A键,后ALT+N键。执行后(见图4
2009-6-28 20:31:53 上传
下载附件 (43.64 KB)
WinWait("安装 - 迅雷5","选择附加任务")
WinWaitActive("安装 - 迅雷5","选择附加任务")
Send("{Space}")
Send("!N")

这段代码和上面是一样的意思,注意在选项选择时,我们可以用Send("{TAB}")Send("{DOWN}")命令进行选项的选择,用Send("{Space}")启用和关闭选项。有时有些软件不能用键盘动作进行选择时,可以用鼠标动作ControlClick命令进行。如QQ2009软件 (见图5)
2009-6-28 20:31:53 上传
下载附件 (30.25 KB)

这种情况的代码可以这样编写:
WinWait("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项")
WinWaitActive("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项")
ControlClick("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项","Button9")
ControlClick("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项","Button8")
ControlClick("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项","Button10")
ControlClick("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项","Button11")
ControlClick("腾讯QQ2009 安装向导","请选择自定义安装选项与快捷方式选项","Button7")
send("!N")
再回到迅雷安装步骤,见图6
2009-6-28 20:31:53 上传
下载附件 (38.47 KB)

WinWait("安装 - 迅雷5","百度超级搜霸
轻松搜索,拦截广告!")
WinWaitActive("安装 - 迅雷5","百度超级搜霸
轻松搜索,拦截广告!")
Send("{Space}")
Send("!N")
捕抓到窗口后,取消百度超级搜霸的安装,并按下一步,执行后(见图7):
2009-6-28 20:31:53 上传
下载附件 (29.21 KB)

WinWait("安装 - 迅雷5","选择目标位置")
WinWaitActive("安装 - 迅雷5","选择目标位置")
If $InstallPath <> "" Then
Send("{del 33}")
Send($InstallPath & "\" & "Thunder\")
EndIf
send("!N")
这段代码说实话具体什么意思我也不是很明白,我只能一行一行的说,前两行大家都知道了我就不说了。
If $InstallPath <> "" Then,这个是一个判断语句,其中$InstallPath是软件安装器software installer的选择路径变量,如果你在软件安装器中没有选择路径的话,就会执行EndIf后的代码,也就是直接按下一步。如果你进行了路径选择,就会执行其后的代码。
Send("{del 33}")这个是:连续按删除33次,其目的是删除软件安装路径框中的默认路径。
Send($InstallPath & "\" & "Thunder\")这个是:在软件安装路径框中输入路径。例:如果你在软件安装器中选择软件的安装路径为d:盘的话,这段代码意思就是在软件安装路径框中输入“d:\Thunder\
有些软件在安装时,安装路径框不是选中状态,这个时候就要改一改上述的代码了,如200906软件自动安装包中的QQ软件,见图8
2009-6-28 20:31:53 上传
下载附件 (32.94 KB)
遇到这种情况就要先用ControlClick命令选中软件路径输入框,然后用再用退格键,删除输入框中的默认路径。具体代码如下:
WinWait("腾讯QQ2009 安装向导","请选择安装路径")
WinWaitActive("腾讯QQ2009 安装向导","请选择安装路径")
ControlClick("腾讯QQ2009 安装向导","请选择安装路径","Edit1")

If $InstallPath <> "" Then
Send("{BACKSPACE 33}")
Send($InstallPath & "\" & "Tencent\QQ\")
EndIf
send("!i")

再回到迅雷安装步骤。
路径选择完后,执行下一步,会出现两种情况。
第一种情况,进入下一个步骤,见图9
2009-6-28 20:31:53 上传
下载附件 (27.97 KB)

这种情况的代码如下:
WinWait("安装 - 迅雷5","准备安装")
WinWaitActive("安装 - 迅雷5","准备安装")
Send("!I")
第二种情况,会出现文件夹存在,见图10
2009-6-28 20:31:53 上传
下载附件 (36.49 KB)

这种情况代码如下:
if WinActive("文件夹存在") = 1 Then
Send("{enter}")
EndIf
意思是检查文件夹存在窗口是否存在,如果存在就按回车键,如果不存在就执行EndIf后面的代码。这个代码执行完后就会回到第一种情况。当第一种情况的代码执行完后就会出现下面的界面(见图11)。
2009-6-28 20:31:53 上传
下载附件 (20.19 KB)

这个是软件正在安装的界面,我们不管理它,当安装完成后,我们会看到下面的界面(图12):
2009-6-28 20:31:53 上传
下载附件 (52.9 KB)


当迅雷安装到最后一个界面时,IE浏览器弹出,并使安装界面不在激活状态,我要用下面的代码解决:
WinWait("安装 - 迅雷5","迅雷5 安装向导完成")
WinActivate("安装 - 迅雷5","迅雷5 安装向导完成")
While 1
   Select
     Case ProcessExists("IEXPLORE.EXE")
        ProcessClose("IEXPLORE.EXE")
        ExitLoop
     Case ProcessExists("")
        ProcessClose("")
        ExitLoop
   EndSelect
Wend
其中WinActivate命令是激活指定的窗口,While 1.Wend是一个循环命令,SelectCaseEndSelect是一个多选择命令,ProcessExists命令是检查指定进程是否存在,ProcessClose命令是结束指定进程。ExitLoop命令是跳出循环。整个代码的意思是,不停的检查是否有IE和傲游浏览器进程,有的话就结束相应的进程并跳出循环。大家要注意了,如果没有IE和傲游浏览器进程的话,这个循环就是一个死循环,永远会循环下去,因此,大家一定要惕用。大家可以根据这个代码中的多选择命令的特点,把检查和结束其它浏览器的进程的代码添加进行。这段代码执行后见图13:
2009-6-28 20:31:53 上传
下载附件 (31.88 KB)

WinWait("安装 - 迅雷5","迅雷5 安装向导完成")
WinWaitActive("安装 - 迅雷5","迅雷5 安装向导完成")
Send("{DOWN}")
Send("{Space}")
Send("{DOWN}")
Send("{Space}")
Send("!F")
EXIT
这段代码的意思是,取消将迅雷看看设为IE首页启动迅雷5”的选项,并按完成,结束软件的安装,退出脚本。
关于浏览器弹出的情况,刚才我已经说过了,但还有一种情况,就是有的软件会在安装过程结束后,弹出浏览器,我们可以在脚本最后加上上面说的循环命令。
总结一下自己的学习过程,一是多看AU3的帮助,二是多研究别人的代码,三是多编写脚本,四是反复进行测试,五是多向大家请教。
Abc

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。