Board logo

标题: [转帖]自动安装脚本--制作入门 AutoIT [打印本页]

作者: je64    时间: 2004-8-26 20:27     标题: [转帖]自动安装脚本--制作入门 AutoIT

[这个贴子最后由je64在 2004/08/26 12:34pm 第 1 次编辑]

以下文章引自
JUJU猫宽带宝藏论坛 → ◇惠文-启动光盘研究院 ◇ → 『 ◇WINDOWS集成光盘+GHOST恢复光盘研究所 ◇ 』
作者:konan
发表时间:2004-8-23 11:11:00

[原创]自动安装脚本--制作入门 AutoIT
最近JUJU猫坛里不少朋友开始喜欢并学习制作脚本来完成软件的自动安装。其实第一功臣是杨兄,要不是他做的软件安装管理器,一个一个软件安装起来也是够烦人了。用AutoIt有一段时间了,在此之前还用过不少脚本类的软件,但我不是网游一族,只是想在工作里偷懒罢了。现在开始写这个自动安装脚本的文章,也是少有的在网上写东西,自己倒也不精,只算是个抛砖引玉了。
一、制作目的和原则


说到自动安装,其目的就是模拟手动操作,自动完成对指定按键的点击和输入指定内容,处理可能出现的情况,最终完成程序的安装和设置。
也许有人说这样就明白了,用AutoIt里的MouseClick、Send来完成点击和输入,只要抓好点击的坐标就一切搞定了啊!这当然不能说不是个办法,但做出来的成品可能只能在你自己的电脑上能用,说不定下一次你自己也没法用了。因为每个人的电脑是不一样的,安装窗体在不同分辨率下的位置也是不一样的,如果用这样做的脚本在别人电脑上操作,就会看到鼠标经过N次狂奔后,打开了M个窗口,却没有点到你要的东西(用来整人倒不错)。


我们的目的是让脚本能有效的在其他人电脑上运行安装,处理遇到的情况,完成设置或注册等动作,然后结束。所以制作的原则就是通用、精确和可靠
1、  尽量少的用鼠标模拟点击的方法,实在用要也要做到保证点击坐标的可靠
原因上面都说了,但有时不得已用到点击坐标时怎么办呢,你先想想吧。后面告诉你我的办法
2、  尽量少用sleep等待语句,而换用其它准确的时间判断语句
有的朋友喜欢用sleep在一个操作后等待一下,来保证脚本的可靠性,其实这却是个不可靠的做法。因为每台电脑的性能有所差异,在不同的情况下也有差异,在你的电脑上制作脚本时要停顿5秒的,在一台第旧的电脑上可能要等待20秒也不一定。AutoIt里是有解决方法的,比如winwaitactive,winwaitclose等,再不行自己写判断啦!
3、  尽量考虑可能出现的情况
有的程序在安装时会提出一些要求,比如需要更新什么文件或进行什么操作,而且未必在每台电脑上安装时都会出现,这就要我们在做好脚本后多在不同环境测试一下,考虑到一些常见的问题


二、如何学好AutoIt


对于AutoIt我也是个菜鸟,没有什么经验可谈,但我觉得有三点一定要做到
1、充分利用帮助文件。AutoIt的帮助文件写的非常详细,索引和搜索功能使它在查询上非常方便,而且每个命令最后都有例子。有什么问题先找它问问。
有的朋友经常说自己英文不好,其实我的也不怎么样,正好利用这个机会学习一下,再说很多软件在使用时都要用到英文,这方面加强还是有必要的。
2、经常实践。写脚本和编程有几分相似,经常实践,特别在学习新命令时
3、到AutoIt论坛请教。http://www.autoitscript.com/forum/index.php毕竟是AutoIt的官方论坛,高手非常多。全都是英文,大家也练习一下吧。
4、开拓思路,变换方法。和编程一样,很多问题不一定只有一个解决方法,普通方法解决不了时还可以多试试其它方法。

三、分析一个典型安装脚本


先让我们来看“极点中文20040813十全大补版”的安装过程
第一步 “欢迎使用 极点中文平台 安装向导”
    点击“下一步”——使用快捷键Alt+N



第二步 “使用许可协议”
    点击“接受本协议”——使用快捷键Alt+A
    点击“下一步”——使用快捷键Alt+N


第三步 “信息”
    点击“下一步”——使用快捷键Alt+N


第四步 “选择目标文件夹”
    假如默认路径
    点击“下一步”——使用快捷键Alt+N


如果曾经安装过极点,原来的文件夹存在则会出现下面的窗口
    点击“是”——使用快捷键Alt+Y


第五步  “选择组件”
    假如默认组件
    点击“下一步”——使用快捷键Alt+N


第六步  “选择开始菜单文件夹”
    假如默认菜单文件夹
    点击“下一步”——使用快捷键Alt+N


第七步  “准备安装”
    点击“安装”——使用快捷键Alt+I


等待安装进度


第八步  “完成”
    取消“查看 freewb.chm”和“运行输入法调整工具”前的对勾
    ——用TAB切换到对应项,再用点击空格进行取消
    点击“完成”——使用快捷键Alt+F


上面的步骤已经非常清楚的告诉我们应该怎样做,下面我们只需要把上面的步骤做成脚本。脚本里我们需要用到的命令有:
[color=#006400]1、Run(“文件名”)——运行与脚本同一目录下的指定文件
[color=#006400]2、WinWaitActive(“窗体标题”,”窗体文本”)——等待指定窗体出现
[color=#006400]3、Send(“”)——发送模拟按键。Alt+n用!n表示
[color=#006400]4、WinActive(“窗体标题”,”窗体文本”)——判断指定窗体是否激活

下面是完整的脚本




; ----------------------------------------------------------------------------
; 脚本功能
; 请将下载的"极点中文20040813十全大补版"改名为"JDWB040813.exe"
; 并将其与脚本文件放在同一文件夹下
; ----------------------------------------------------------------------------
run("jdwb040813.exe")
    ;运行“jdwb040813.exe”
WinWaitActive("安装 - 极点中文输入平台","安装向导")
    ;等待窗体"安装 - 极点中文输入平台","安装向导"出现
send("!n")
    ;发送快捷键Alt+N
WinWaitActive("安装 - 极点中文输入平台","使用许可协议")
send("!a")
    ;发送快捷键Alt+A
send("!n")
WinWaitActive("安装 - 极点中文输入平台","信息")
send("!n")
WinWaitActive("安装 - 极点中文输入平台","选择目标文件夹")
send("!n")
if winactive("目录已存在") Then
    ;如果窗体"目录已存在"是激活状态
   send("!y")
    ;发送快捷键Alt+Y
EndIf
WinWaitActive("安装 - 极点中文输入平台","选择组件")
    ;如果选择其他安装方式请在这里修改
send("!n")
WinWaitActive("安装 - 极点中文输入平台","选择开始菜单文件夹")
send("!n")
WinWaitActive("安装 - 极点中文输入平台","准备安装")
send("!i")
    ;发送快捷键Alt+I
WinWaitActive("安装 - 极点中文输入平台","完成 极点中文输入平台 安装向导")
send("{SPACE}{TAB}{SPACE}{TAB}")
    ;默认状态下“查看 freewb.chm”获得焦点,发送空格将勾去掉。
    ;用TAB切换到下一个复选框
Send("!f")
    ;发送快捷键Alt+F
; ----------------------------------------------------------------------------
脚本中“;”分号开头的部分是注释。
     所有这些命令都能在帮助文件里找到具体介绍。


四、从示例脚本考虑几个问题


1、 用Autoit Window Spy精确取得窗体信息

在开始菜单里依次选择“程序—AutoIt V3—Autoit Window Spy”。“Autoit Window Spy”是AutoIt附带的一个获取信息的工具。启动后一般它都在最上面,鼠标激活要查看信息的窗体,“Autoit Window Spy”窗体里将显示激活窗体在鼠标下的信息,如图,这时可以用Ctrl+Alt+F使窗口内容暂停,便于从窗体里复制需要的内容




2、 WinWaitActive的使用


WinWaitActive(“窗体标题”,”窗体文本”)——等待指定窗体出现。使用这个命令,在AutoIt默认的情况下,窗体标题可以是实际标题的一部分,比如上面的命令也可以用
WinWaitActive("安装","信息")
但这样在匹配时精确程度也下降了,也可能匹配到另一个标题带“安装”,文本包含“信息”的窗体,所以在使用这个命令时窗体标题尽量用完整标题,最好从Autoit Window Spy,窗体文本选择当前窗体里有代表性的文本。


3、 Send的使用


Send命令发送模拟按键是输出字符的首选。它的应用比较灵活
(1)    组合按键:^ 表示Ctrl,! 表示 Alt,+ 表示Shift,#表示 Win
比如上面完成时Send(“!f”)
(2)    多个Send命令可以合写,一次完成。
(3)    Send命令是不能输出中文的,其实Unicode都是不能输出的。
Send命令中有很多特殊按键,请参看帮助文件。


4、 修改默认路径(ControlSetText和ControlSend)


如何"选择目标文件夹"中的默认路径?假如我们不希望它安装在系统盘,而要安装在“D:\Program Files\FreeWB”。


方法一、上面我们已经知道了Send命令的用法,由于路径框这时是激活状态,这里就可以用到了,Send(“D:\Program Files\FreeWB”)


方法二、使用命令[color=#006400]ControlSetText ( "窗体标题", "窗体文本", "要设置文字的控件类名或控件精确标题", "需要设置的文字" )
ControlSetText功能是设置窗体里指定控件的文本,不论窗体或控件这时的状态是否激活。[color=#8B0000]注意ControlSetText是可以输出中文的。

控件类名可以用Autoit Window Spy取得如上图,经查找输入框的类名为“TEdit1”
上面的要求可写命令为
ControlSetText("安装 - 极点中文输入平台","选择目标文件夹","TEdit1"," D:\Program Files\FreeWB ")


方法三、使用命令[color=#006400]ControlSend ( "窗体标题", "窗体文本", "接收文字的控件类名或控件精确标题", "需要输入的文字" )
ControlSend功能和ControlSetText类似,向窗体里指定控件的发送文本,不论窗体或控件这时的状态是否激活。但ControlSend不能输出中文
ControlSend("安装 - 极点中文输入平台","选择目标文件夹","TEdit1"," D:\Program Files\FreeWB ")


5、 修改默认组件


极点在安装时提供了多种组件组合,如何修改呢?
其实很简单,我们模拟一下使用键盘如何解决就行了。使用键盘TAB将焦点切换到要修改的控件,再用键盘方法选择,这个方法只用到Send命令就可以完成。推荐使用


6、 用其它方式按键(ControlClick和MouseClick)


上面脚本里遇到按键的地方我们都是用快捷键来完成的,如果没有快捷键应该怎么办呢?
(1)    从模拟按键的角度思考,如果焦点可以切换到,我们就可以用Tab键切换,用Enter键确认
(2)    使用[color=#556B2F]ControlClick("窗体标题", "窗体文本","要点击的控件类名或控件精确标题")
ControlClick功能是点击指定窗体里的指定控件,不论窗体或控件这时的状态是否激活。


(3)    使用模拟鼠标点击
这个方法是尽量不要使用的,但有的窗体没有快捷键,不能切换焦点,又找不到控件信息,这时只能用模拟鼠标点击的方法。
[color=#006400]MouseClick(“鼠标左右键”,在屏幕的X位置,在屏幕的Y位置,点击次数)

   使用这一方法必须取得准确的鼠标坐标,而且坐标要适应不同情况,最好用变量取得,具体方法以后再介绍。


总结


在这篇文章里我不想过多的介绍每一个命令的详细用法,其实一般的安装程序用上面的命令大概就能解决了。主要还是想介绍思路:先考虑使用一般命令和模拟键盘动作,再考虑复杂命令,最后用相对不精确的模拟鼠标。
学习AutoIT和其它学习一样,多思考,多练习,你一定会学的很好。

                                              ***原帖如上****
原帖地址:http://www.jujumao.net/dispbbs.asp?boardID=24&ID=10922&page=3
作者: Elrich    时间: 2004-8-26 20:52     标题: [转帖]自动安装脚本--制作入门 AutoIT

要的就是它了!这个可以加入到无人职守安装上吧?
软件安装管理器V2.0是否就是这个AUTOIT?
作者: bwcd    时间: 2004-8-26 21:31     标题: [转帖]自动安装脚本--制作入门 AutoIT

好文章!昨天刚受了电脑爱好者的启蒙,今天这不...谢谢!斑竹!小狗狗斑竹!
作者: lucky0504    时间: 2004-8-26 22:29     标题: [转帖]自动安装脚本--制作入门 AutoIT

谢谢JE64斑竹,我仔细看看.还有个事请教,用autoit制作无人职守我是会的,如何能做出软件安装管理器的界面呢?应该不是autoit写的吧,是不是用编程工具写的,然后执行autoit的脚本呢?而杨海军的软件安装时是不显示安装过程的,也就是后台安装的,这个是不是autoit的功能呢?
作者: Elrich    时间: 2004-8-26 22:34     标题: [转帖]自动安装脚本--制作入门 AutoIT

杨海军的软件安装管理器如果载了带这个的光盘,是否可以提取出来呢?这个是否是和XPINSTALL类似概念的软件呢?
作者: lucky0504    时间: 2004-8-26 22:41     标题: [转帖]自动安装脚本--制作入门 AutoIT

引用:
下面引用由Elrich2004/08/26 02:34pm 发表的内容:
杨海军的软件安装管理器如果载了带这个的光盘,是否可以提取出来呢?这个是否是和XPINSTALL类似概念的软件呢?
我觉得这个和xpinstall/xplode都是通过脚本来实现自动安装,但不同的是xpinstall/xplode是例如软件自身的无人职守安装参数实现的.而autoit是通过脚本模拟鼠标操作实现的自动安装,autoit可以看见鼠标在安装过程中自动点击"下一步",输入序列号等操作.这个过程中是不可以碰鼠标的.如果autoit也可以实现后台的操作那就好了,不会受到影响.
相关工具还可以考虑Ghost的AIsetup.
作者: je64    时间: 2004-8-26 22:42     标题: [转帖]自动安装脚本--制作入门 AutoIT

杨海军的软件安装管理器是用DELPHI编写的!
autoit好像还不能作到让它在后台安装吧,因为它需要检测当前的窗口来判断执行的操作。
除非原程序有静默安装的参数!

作者: lucky0504    时间: 2004-8-26 22:53     标题: [转帖]自动安装脚本--制作入门 AutoIT

引用:
下面引用由je642004/08/26 02:42pm 发表的内容:
杨海军的软件安装管理器是用DELPHI编写的!
autoit好像还不能作到让它在后台安装吧,因为它需要检测当前的窗口来判断执行的操作。
除非原程序有静默安装的参数!
这我就理解了,起初看到cqmis斑竹的帖子时,我还以为整个软件安装管理器都是autoit写的呢,吓了我一跳.
可我用杨海军的win2000时,记得安装进入系统后,会自动弹出软件安装管理器,如果30秒内没有操作,就会自动安装默认软件.同时并没有软件安装的界面出现,正如JE64您所说,我也发现了autoit不能后台操作,那么好象是杨先将软件加工过似的,让他们可以后台工作.这样的话他在哪里有引用了autoit的脚本呢?除去软件的安装过程,其他的步骤我想编程工具应该都可以完成了.真的很高兴可以与您一起探讨!
作者: duduclm    时间: 2004-9-2 00:46     标题: [转帖]自动安装脚本--制作入门 AutoIT

学习学习
作者: 抚轩    时间: 2004-9-3 04:58     标题: [转帖]自动安装脚本--制作入门 AutoIT

好是好啊,我就看不懂
作者: studyczb    时间: 2004-11-6 05:14     标题: [转帖]自动安装脚本--制作入门 AutoIT

好东东,顶!!!!!
作者: trhmm    时间: 2004-11-6 05:53     标题: [转帖]自动安装脚本--制作入门 AutoIT

太高深了,我现在还不懂!
作者: 一刀    时间: 2004-12-4 19:45     标题: [转帖]自动安装脚本--制作入门 AutoIT

看不懂也得顶!
作者: general    时间: 2004-12-4 19:58     标题: [转帖]自动安装脚本--制作入门 AutoIT

支持
作者: cxbed20    时间: 2005-2-4 04:49     标题: [转帖]自动安装脚本--制作入门 AutoIT

系统、全面而又专业啊!感谢!




欢迎光临 EZB 论坛 (http://ultraiso.net/ezbbbs/) Powered by Discuz! 6.1.0