使用AutoIt3制作自动安装脚本
正文开始前的啰嗦
嗯。。最近回前公司兼职,发现忙起来一个一个装软件是非常耗费时间的。于是就写个脚本来完成自动安装。
一、需要的环境
Autoit3 3.3.7.15第一汉化版
传送门在此(请各位猛戳) :http://autoit-cn.googlecode.com/files/AUTOIT_3.3.7.15.1.exe
安装就不多说了,大家都会~
二、简单介绍及制作思路
先简单介绍一下AU3
AutoIt(读音aw-tow-it)是一个用于Windows的免费自动化语言。在它的早期发布版本中,这个软件主要旨在为微软Windows程序创建自动化脚本(有时也称为宏)但现在已经成长为包含了编程语言设计和全面功能的增强的软件。
在版本3中,AutoIt的语法结构调整为接近于BASIC系列的语言。它是使用经典数据模型、利用可以存储多种数据类型包括数组的变量类型的第三代编程语言。它兼容于Windows 95,98,ME,NT4,2000,XP,2003,Vista以及Windows 7(在3.3.0版本中终止了对Windows 2000之前操作系统的支持)。
AutoIt自动化脚本可以编译成压缩、单一的可执行文件,这样的文件可以运行在没有安装AutoIt解释器的计算机上。广泛的函数库(称为UDF或“用户定义函数”)包含在程序中或可以从网站中下载,通过他们可以添加许多专用的功能。AutoIt的安装程序中还自带了基于SciTE的IDE。其中集成了编译器和帮助文本,从而为使用AutoIt的开发者提供了事实上的标准环境。
以上来自维基百科,略有修改。
思路
既然是自动安装脚本,实现的功能自然是自动安装啦(MS是一句废话)。
安装过程中需要操作的,最简单的就是点击下一步了,再就是取消一些选项,例如设置XXX为主页啊,运行XXX啊。
那么,脚本需要完成的就是这些点击下一步和取消单选框选中状态。
三、实战-通过脚本自动安装极品五笔
下面以使用脚本自动安装极品五笔为例。
文章头部提供的地址是集成了会用到的工具。
首先,脚本的第一步是运行程序。这一步要用到AU3的Run函数。
查询了下函数手册
Run ( "程序" , "工作目录" , 显示标志, 可选标志)
其中,工作目录、显示标志、可选标志为可选选项,可以不添加。
我们将脚本放置在极品五笔安装程序所在目录,这样就不需要添加工作目录这个参数了。
1 |
Run("jpwb_7.0.exe") |
上面的代码用于运行极品五笔的安装程序,运行安装程序,接下来,就要对安装程序的界面进行操作了。
使用窗口信息工具可以帮助分析窗口,这个程序在AutoIT工具箱中有,大家可以自己试用下,很方便的说~很简单的,通俗易懂,是居家旅游的必备工具啊。
运行安装程序之后,脚本需要知道接下来的操作是对那个窗口进行操作。
这一步使用到两个函数,大家可以根据自己的需要来挑选使用哪一个。
WinWait
暂停脚本的执行直至指定窗口存在(出现)为止.
WinWait ( "窗口标题" , "窗口文本" , 超时时间)
WinWaitActive
暂停脚本的执行直至指定窗口被激活(成为活动状态)为止.
WinWaitActive ( "窗口标题", "窗口文本", 超时时间 )
其中,窗口文本和超时时间为可选选项。
窗口脚本可以更好地帮助脚本确认窗口,超时时间可以让脚本在暂停一段时间之后跳过该函数继续执行。
1 |
WinWait("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","欢迎使用 “极品五笔” 安装向导") |
上面这句就是让脚本程序等待一个标题为
下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装
窗口文本为
欢迎使用 “极品五笔” 安装向导
的窗口,等窗口出现之后,我们就要点击下一步的按钮了。
在这里,我们需要用到的函数是
ControlClick
向指定控件发送鼠标点击命令.
ControlClick ( "标题", "文本", 控件ID , 按钮 , 点击次数 , X坐标 , Y坐标 )
以上参数中,按钮即为鼠标的左右键,点击次数,X坐标,Y坐标,均为可选参数。
1 |
ControlClick("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","","[CLASS:Button; INSTANCE:2]","left",1) |
上面语句完成了点击安装这个步骤,认真的童鞋肯定发现了大D在“控件ID”这个参数上没有使用“1”。而是使用了"[CLASS:Button; INSTANCE:2]"这个高级模式的ID,至于为什么这么用,大D将会在后续文章中说到。敬请期待。接下来,安装程序对软件进行安装。随后进入完成安装界面。
使用窗口信息化工具分析安装完成界面,可见设置主页的这个选项是一个按钮,那么,即可以使用ControlClick来完成,也可以使用另外一个函数。
ControlCommand
向指定控件发送命令.
ControlCommand ( "窗口标题", "窗口文本", 控件ID, "命令" , "选项")
其中,最后一个参数——选项为可选参数。基本不用。
这里放出代码
1 |
ControlCommand("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","正在完成 “极品五笔” 安装向导",1204,"uncheck") |
上面的代码中,最后一个参数——命令为"uncheck",这个就是用于取消单选框的选择状态。
该函数的命令有
命令, 选项 | 返回值 |
"IsVisible", "" | 若目标控件可见则返回值为1,否则为0. |
"IsEnabled", "" | 若目标控件可用(未被禁用)则返回值为1,否则为0. |
"ShowDropDown", "" | 弹出/下拉 组合框(ComboBox)的列表. |
"HideDropDown", "" | 收回/隐藏 组合框(ComboBox)的列表. |
"AddString", '字符串' | 在 ListBox 或 ComboBox 的编辑框后面附加指定字符串. |
"DelString", 出现次序 | 删除在 ListBox 或 ComboBox 的编辑框中指定的字符串(从0开始,0 代表第一个). |
"FindString", '字符串' | 返回在 ListBox 或 ComboBox 的编辑框中与指定字符串匹配项目的出现次序(从0开始,0 代表第一个). |
"SetCurrentSelection", 出现次序 | 通过指定出现次序(从0开始,0 代表第一个)把 ListBox 或 ComboBox 的当前选择项设为指定的项目. |
"SelectString", '字符串' | 通过指定字符串把 ListBox 或 ComboBox 的当前选择项设为匹配字符串的项目. |
"IsChecked", "" | 若目标按钮(复选框/单选框)被选中则返回值为1,否则为0. |
"Check", "" | 使目标按钮(复选框/单选框)变为选中状态. |
"UnCheck", "" | 使目标按钮(复选框/单选框)变为非选中状态. |
"GetCurrentLine", "" | 返回在目标编辑框中插入符(caret,光标)的所在行号. |
"GetCurrentCol", "" | 返回在目标编辑框中插入符(caret,光标)的所在列号. |
"GetCurrentSelection", "" | 返回 ListBox 或 ComboBox 控件当前选中的项目名. |
"GetLineCount", "" | 返回目标编辑框中的总行数. |
"GetLine", 行号 | 返回目标编辑框中指定行的文本内容. |
"GetSelected", "" | 返回目标编辑框中的(用户用鼠标或其它方式)选定的文本. |
"EditPaste", '字符串' | 在目标编辑框中插入符(caret)所在位置后插入指定字符串. |
"CurrentTab", "" | 返回在 SysTabControl32 控件中当前显示的标签编号(从1开始,1代表左边第一个). |
"TabRight", "" | 使 SysTabControl32 控件切换到(右边的)下一个标签. |
"TabLeft", "" | 使 SysTabControl32 控件切换到(左边的)下一个标签. |
"SendCommandID", 命令 ID | 模拟 WM_COMMAND 消息. 通常用于 ToolbarWindow32 控件 - 使用Au3Info的工具栏标签得到命令ID. |
点击完成按钮的代码大D就不再敖述了。
点击完成按钮之后,弹出了一个IE浏览器窗口,这个很恼火的说,那就干掉这个窗口,这里要用到AU3中的进程管理函数。
这里大D先说方法:
第一种方法:检测窗口文本,等待指定窗口出现,然后关闭。
第二种方法:检测进程名是否存在,存在则关闭进程。
先列出需要用到的函数。
ProcessExists
检查指定进程是否存在.
ProcessExists ( "进程" )
ProcessClose
终止某个进程.
ProcessClose ( "进程")
以上两个函数,每隔250毫秒对进程进行检测。
两种方法的具体实现代码就不写出来了。
相信大家肯定能写出来。
最后放出大D写的这个安装脚本的源码。
1 2 3 4 5 6 7 |
Run("jpwb_7.0.exe") WinWait("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","欢迎使用 “极品五笔” 安装向导") ControlClick("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","","[CLASS:Button; INSTANCE:2]","left",1) WinWait("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","正在完成 “极品五笔” 安装向导") ControlCommand("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","正在完成 “极品五笔” 安装向导",1204,"uncheck") ControlClick("下载吧 - 极品五笔 Win2000/Xp/Windows 7通用型 安装","正在完成 “极品五笔” 安装向导","[CLASS:Button; INSTANCE:2]","left",1) WinWait("","Internet Explorer") ProcessClose("iexplore.exe") |
已有 11 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
果断沙发啊 ~ 看起来不错。。不过分析是不是有点麻烦~
@xushine
这个蛮纠结。昨天写金山毒霸的自动脚本的时候很麻烦,最后不得不采用定位坐标鼠标点击的方式,脚本运行的时候会看到鼠标指针在移动。。唉。。不爽啊
@大D
其实可以参考番茄花园的那个软件自动安装~
@xushine
有安装器。只需要改一下配置文件就OK了。。哈哈。。
根据坐标定位?那如果分辨率不一样怎么办?
@老谢
嘛嘛。。AU3支持在窗口内部坐标定位。
@大D 原来如此!
这个对于某些安装程序是不起作用的,最直接的办法是反编译安装程序后再自己封装为自动解压程序
@一堵墙
哪里有那么多时间去反编译安装程序。。
恩,,觉厉!
一般都是用控件ID来