- 介绍
- 特别声明(Special Announcement)
- 安装目录结构
- 常见问题解答 (FAQ)
- 运行脚本
- 脚本编辑器
- 使用Aut2Exe编译脚本
- AutoIt 窗口信息工具
- 窗口标题与文本(基础篇)
- 窗口标题与文本(高级篇)
- Controls
- Intended Use
- AutoIt v2 用户须知
- 指南 - HelloWorld
- 指南 - 记事本(Notepad)
- 指南 - WinZip
- Language Reference
- Language Reference - Datatypes
- Language Reference - Variables
- Language Reference - Macros
- Language Reference - Operators
- Language Reference - Conditional Statements
- Language Reference - Loops Statements
- Language Reference - User Functions
- Language Reference - Comments
- GUI Reference
- GUI Reference - MessageLoop Mode
- GUI 相关 - OnEvent 模式
- Keywords
- Keyword #comments-start
- Keyword #include
- Keyword #include-once
- Keyword #NoTrayIcon
- Keyword Dim / Global / Local / Const
- Keyword ContinueLoop
- Keyword Do...Until
- Keyword Exit
- Keyword ExitLoop
- Keyword For...Next
- Keyword Func...Return...EndFunc
- Keyword If...Then
- Keyword If...ElseIf...Else...EndIf
- Keyword ReDim
- Keyword Select...Case...EndSelect
- Keyword While...WEnd
- Macros
- 宏列表-AutoIt相关
- Macro Reference - Directory
- Macro Reference - System Info
- Macro Reference - Time And Date
- 函数(Functions)
- 使用函数时的注意事项
- Function ClipGet
- Function ClipPut
- Function EnvGet
- Function EnvSet
- Function EnvUpdate
- Function MemGetStats
- Function DirCopy
- Function DirCreate
- Function DirGetSize
- Function DirMove
- Function DirRemove
- Function DriveGetDrive
- Function DriveGetFileSystem
- Function DriveGetLabel
- Function DriveGetSerial
- Function DriveGetType
- Function DriveMapAdd
- Function DriveMapDel
- Function DriveMapGet
- Function DriveSetLabel
- Function DriveSpaceFree
- Function DriveSpaceTotal
- Function DriveStatus
- Function FileChangeDir
- Function FileClose
- Function FileCopy
- Function FileCreateShortcut
- Function FileDelete
- Function FileExists
- Function FileFindFirstFile
- Function FileFindNextFile
- Function FileGetAttrib
- Function FileGetLongName
- Function FileGetShortcut
- Function FileGetShortName
- Function FileGetSize
- Function FileGetTime
- Function FileGetVersion
- Function FileInstall
- Function FileMove
- Function FileOpen
- Function FileOpenDialog
- Function FileRead
- Function FileReadLine
- Function FileRecycle
- Function FileRecycleEmpty
- Function FileSaveDialog
- Function FileSelectFolder
- Function FileSetAttrib
- Function FileSetTime
- Function FileWrite
- Function FileWriteLine
- Function IniDelete
- Function IniRead
- Function IniReadSection
- Function IniReadSectionNames
- Function IniWrite
- Function AutoItSetOption
- Function PixelChecksum
- Function PixelGetColor
- Function PixelSearch
- Function SoundPlay
- Function SoundSetWaveVolume
- GUI Reference
- Function GUICreate
- Functions
- Function GUICtrlCreateAvi
- Function GUICtrlCreateButton
- Function GUICtrlCreateCheckbox
- Function GUICtrlCreateCombo
- Function GUICtrlCreateContextMenu
- Function GUICtrlCreateDate
- Function GUICtrlCreateDummy
- Function GUICtrlCreateEdit
- Function GUICtrlCreateGroup
- Function GUICtrlCreateIcon
- Function GUICtrlCreateInput
- Function GUICtrlCreateLabel
- Function GUICtrlCreateList
- Function GUICtrlCreateListView
- Function GUICtrlCreateListViewItem
- Function GUICtrlCreateMenu
- Function GUICtrlCreateMenuitem
- Function GUICtrlCreatePic
- Function GUICtrlCreateProgress
- Function GUICtrlCreateRadio
- Function GUICtrlCreateSlider
- Function GUICtrlCreateTab
- Function GUICtrlCreateTabItem
- Function GUICtrlCreateTreeView
- Function GUICtrlCreateTreeViewItem
- Function GUICtrlCreateUpdown
- Function GUICtrlDelete
- Functions
- Function GUICtrlSetBkColor
- Function GUICtrlSetColor
- Function GUICtrlSetCursor
- Function GUICtrlSetData
- Function GUICtrlSetFont
- Function GUICtrlSetImage
- Function GUICtrlSetLimit
- Function GUICtrlSetOnEvent
- Function GUICtrlSetPos
- Function GUICtrlSetResizing
- Function GUICtrlSetState
- Function GUICtrlSetStyle
- Function GUICtrlSetTip
- Functions
- Function GUISetBkColor
- Function GUISetCoord
- Function GUISetCursor
- Function GUISetFont
- Function GUISetHelp
- Function GUISetIcon
- Function GUISetOnEvent
- Function GUISetState
- Function GUIDelete
- Function GUICtrlGetState
- Function GUICtrlRead
- Function GUICtrlRecvMsg
- Function GUICtrlSendMsg
- Function GUICtrlSendToDummy
- Function GUIGetCursorInfo
- Function GUIGetMsg
- Function GUIStartGroup
- Function GUISwitch
- Function HotKeySet
- Function Send
- Function Abs
- Function ACos
- Function ASin
- Function ATan
- Function BitAND
- Function BitNOT
- Function BitOR
- Function BitShift
- Function BitXOR
- Function Cos
- Function Exp
- Function Log
- Function Mod
- Function Random
- Function Round
- Function Sin
- Function Sqrt
- Function Tan
- Function InputBox
- Function MsgBox
- Function ProgressOff
- Function ProgressOn
- Function ProgressSet
- Function SplashImageOn
- Function SplashOff
- Function SplashTextOn
- Function ToolTip
- Function TrayTip
- Function AdlibDisable
- Function AdlibEnable
- Function AutoItSetOption
- Function AutoItWinGetTitle
- Function AutoItWinSetTitle
- Function BlockInput
- Function Break
- Function Call
- Function CDTray
- Function ConsoleWrite
- Function SetError
- Function SetExtended
- Function MouseClick
- Function MouseClickDrag
- Function MouseDown
- Function MouseGetCursor
- Function MouseGetPos
- Function MouseMove
- Function MouseUp
- Function MouseWheel
- Function FtpSetProxy
- Function HttpSetProxy
- Function InetGet
- Function InetGetSize
- Function Ping
- Function DllCall
- Function DllClose
- Function DllOpen
- Function ProcessClose
- Function ProcessExists
- Function ProcessSetPriority
- Function ProcessList
- Function ProcessWait
- Function ProcessWaitClose
- Function Run
- Function RunAsSet
- Function RunWait
- Function Shutdown
- Function RegDelete
- Function RegEnumKey
- Function RegEnumVal
- Function RegRead
- Function RegWrite
- Function StringAddCR
- Function StringInStr
- Function StringIsAlNum
- Function StringIsAlpha
- Function StringIsASCII
- Function StringIsDigit
- Function StringIsFloat
- Function StringFormat
- Function StringIsInt
- Function StringIsLower
- Function StringIsSpace
- Function StringIsUpper
- Function StringIsXDigit
- Function StringLeft
- Function StringLen
- Function StringLower
- Function StringMid
- Function StringReplace
- Function StringRight
- Function StringSplit
- Function StringStripCR
- Function StringStripWS
- Function StringTrimLeft
- Function StringTrimRight
- Function StringUpper
- Function Sleep
- Function TimerInit
- Function TimerDiff
- Function Asc
- Function Chr
- Function Assign
- Function Dec
- Function Eval
- Function Hex
- Function Int
- Function IsAdmin
- Function IsArray
- Function IsDeclared
- Function IsFloat
- Function IsInt
- Function IsNumber
- Function IsString
- Function Number
- Function String
- Function UBound
- Function ControlClick
- Function ControlCommand
- Function ControlDisable
- Function ControlEnable
- Function ControlFocus
- Function ControlGetFocus
- Function ControlGetHandle
- Function ControlGetPos
- Function ControlGetText
- Function ControlHide
- Function ControlListView
- Function ControlMove
- Function ControlSend
- Function ControlSetText
- Function ControlShow
- Function StatusbarGetText
- Function WinActivate
- Function WinActive
- Function WinClose
- Function WinExists
- Function WinGetCaretPos
- Function WinGetClassList
- Function WinGetClientSize
- Function WinGetHandle
- Function WinGetPos
- Function WinGetProcess
- Function WinGetState
- Function WinGetText
- Function WinGetTitle
- Function WinKill
- Function WinList
- Function WinMenuSelectItem
- Function WinMinimizeAll
- Function WinMinimizeAllUndo
- Function WinMove
- Function WinSetOnTop
- Function WinSetState
- Function WinSetTitle
- Function WinSetTrans
- Function WinWait
- Function WinWaitActive
- Function WinWaitClose
- Function WinWaitNotActive
- User Defined Functions
- 自定义函数的注意事项(Function Notes)
- Function _ArrayAdd
- Function _ArrayBinarySearch
- Function _ArrayCreate
- Function _ArrayDelete
- Function _ArrayDisplay
- Function _ArrayInsert
- Function _ArrayMax
- Function _ArrayMaxIndex
- Function _ArrayMin
- Function _ArrayMinIndex
- Function _ArrayPop
- Function _ArrayReverse
- Function _ArraySort
- Function _ArraySwap
- Function _ArrayToClip
- Function _ArrayToString
- Function _ArrayTrim
- Function _ColorGetBlue
- Function _ColorGetGreen
- Function _ColorGetRed
- Function _DateAdd
- Function _DateDayOfWeek
- Function _DateDaysInMonth
- Function _DateDiff
- Function _DateIsLeapYear
- Function _DateIsValid
- Function _DateTimeFormat
- Function _DateToDayValue
- Function _DateToDayOfWeek
- Function _DateToDayValue
- Function _DayValueToDate
- Function _Now
- Function _NowCalc
- Function _NowCalcDate
- Function _NowDate
- Function _NowTime
- Function _TicksToTime
- Function _TimeToTicks
- Function _FileCountLines
- Function _FileCreate
- Function _FileReadToArray
- Function _FileWriteLog
- Function _TempFile
- Function _GetIP
- Function _INetExplorerCapable
- Function _INetMail
- Function _Ceil
- Function _Floor
- Function _MathCheckDiv
- Function _Max
- Function _Min
- Function _Iif
- Function _RunDos
- Function _HexToString
- Function _StringEncrypt
- Function _StringProper
- Function _StringRepeat
- Function _StringReverse
- Function _StringToHex
- Function _viOpen
- Function _viExecCommand
- Function _viFindGpib
- Function _viGpibBusReset
- Function _viGTL
- Function _viOpen
- Function _viSetAttribute
- Function _viSetTimeout
- Language Reference
- ASCII Characters
- CLSID List
- Standard Windows Fonts
- 标准 Windows 字体
- Language Codes
- Send 命令的可用按键列表
指南 - WinZip
此页将介绍实现 WinZip 9 SR-1汉化版 的自动安装的方法。我们假定您已经掌握了在 HelloWorld 和 记事本(Notepad)指南中介绍的创建和运行AutoIt脚本的方法,并且懂得使用 AutoIt 窗口信息工具 来读取窗口标题及文字等信息。
这个版本的 WinZip 的安装程序总共有11个对话框是需要点击按钮(通常是 下一步(N))才能继续进行安装的。我们将要写的脚本很简单,就是要等待这些对话框出现然后点击适当的按钮即可。通常安装这类程序会有很多窗口的标题是一样的(WinZip 安装),因此我们必须使用窗口文字来判断不同的窗口。下面提供了每个对话框的截图,您可以点击这些图片来查看它们在 窗口信息工具 中显示的相应信息。
首先创建一个文件夹,复制WinZip的安装程序(winzip90.exe)到此目录,新建一个名为 winzipinstall.au3 的脚本文件置于同一个文件夹之下。
现在我们将一步一步来讲解编写脚本自动安装程序的步骤。每个对话框的截图下都会有进行到该步骤的相应脚本代码(别忘了可以点击这些图片来查看它们在 窗口信息工具 中显示的相应信息)。此外您还可以查看我提供的 完整的脚本 以作参考。
第一行代码非常简单,我们要运行名为 winzip90.exe 的这个安装程序。因此此行脚本应该是这样的:
Run("winzip90.exe")
由于不是官方的英文原版,因此第一个显示的对话框将是汉化作者的声明(也就是广告,^_^):
很明显,要继续装WinZip的话就不能不按确定了。由上图可知 确定 这个按钮是默认按钮,因此我们先等待此信息框出现且处于激活状态然后发送 回车 键击动作即可。那么脚本代码就是下面这样了:
WinWaitActive("WinZip 9.0 SR-1 Build 6224 汉化版", "炎之川")
Send("{ENTER}")
按下确定后第二个对话框将会弹出:
因此我们需要等待此窗口弹出且处于激活状态,接着要按第一个按钮(Setup),留意到该按钮名的S带有下划线,因此发送键击 ALT-s 即可点击它。那么脚本代码就是下面这样了:
WinWaitActive("WinZip Self-Extractor - instA.exe", "&Setup")
Send("!s")
(别忘了可以点击这些图片来查看它们在 窗口信息工具 中显示的相应信息)
如无 意外,接着就会出现安装路径选择对话框:
我们需要等待该窗口变成活动窗口,然后如果您喜欢的话就可以按下回车表示接收此默认安装路径。那么脚本代码就应该是下面这样了:
WinWaitActive("WinZip 安装程序", "到下列文件夹")
Send("{ENTER}")
但为了作更全面的示范,考虑到会有一些用户不喜欢它默认设置的安装路径,因此我们来做一个小小的修改,把路径改为自定义的。以D:\Program Files\WinZip为例,当然我们不需要也不应该按那个 浏览(B)... 按钮来定向到此目录,这样做实在是太麻烦而且不可靠,我们直接在它的编辑框中输入指定路径名即可;另外还要提醒一下,尽管程序为了方便用户已经令输入框成为可输入状态,也就是说可以通过发送键击动作直接输入路径名,但为了增强脚本的可靠性,我们还是使用窗口信息工具来获取该编辑框的名称(点击上面的图片即可查看),结果为Edit1,因此修改上面的脚本代码,变成下面这样:
WinWaitActive("WinZip 安装程序", "到下列文件夹")
ControlSetText("WinZip 安装程序", "到下列文件夹", "Edit1", "D:\Program Files\WinZip" )
Send("{ENTER}")
接下来会出现的就是WinZip的功能介绍对话框:
请注意,此对话框的标题和前面的是完全一样的,都是 WinZip 安装 ——事实上几乎接下来的所有窗口都是使用这个标题!因此,为了准确区分这些窗口,我们还需要再加上一个窗口文字,同时要尽可能使用那些相对具有唯一性的文字。因此我们可选用 WinZip 的功能包括 这些文字。当窗口出现之后我们只要按下 ALT-n 键即可:
WinWaitActive("WinZip 安装", "WinZip 的功能包括")
Send("!n")
接下来将会出现许可协议窗口:
等待该窗口出现然后按下 ALT-y 表示接收此协议:
WinWaitActive("许可协议")
Send("!y")
接下来将会是有着类似风格的几个对话框,因此不再作详细的解释,每张图片下都会有进行到该步骤时相应的脚本代码:
WinWaitActive("WinZip 安装", "快速入门")
Send("!n")
WinWaitActive("WinZip 安装", "在两种界面中进行切换")
Send("!c")
Send("!n")
WinWaitActive("WinZip 安装", "典型设置(推荐)(&E)")
Send("!e")
Send("!n")
WinWaitActive("WinZip 安装", "WinZip 需要与压缩文件格式进行关联")
Send("!n")
这是安装程序的最后一个对话框。请注意,完成 这个按钮没有定义热键——不过幸运的是它“正好”是该对话框的默认按钮,因此我们只需按下回车键即可选到它。如果不是这样的话,我们可能需要使用TAB键在各个控件之间进行切换,或者更好的方法是使用 ControlClick 函数。
WinWaitActive("WinZip 安装", "安装已完成")
Send("{ENTER}")
安装完成后 WinZip 会自动启动:
等待WinZip的主窗口出现然后使用 WinClose 函数关掉它即可。
WinWaitActive("WinZip", "打开压缩文件")
WinClose("WinZip", "打开压缩文件")
为了使脚本更加可靠,我们还需要尽可能考虑各种意外的发生,比如该软件已经被用户安装好了,那么当在第二个对话框中按下 Setup 这个按钮时将会出现意料之外的窗口:
很明显,既然程序已经被安装好了,我们就不必再进行后面的操作了,因此我们需要按下 取消 这个按钮或关闭此窗口皆可:
If WinExists("WinZip Setup", "注册副本已安装") Then
WinClose("WinZip Setup", "注册副本已安装")
;EndIf ;还需要添加下面的脚本才能结束此表达式
我想您肯定注意到了,上面的代码使用了If...Then表达式,同时还使用了 WinExists 函数,这段脚本的具体意思是:如果指定窗口存在则关闭该窗口。
关闭该窗口后会出现提示窗口:
很简单,关闭此窗口即可,安装程序将自动退出。
WinWaitActive("WinZip 安装程序", "软件没有成功安装")
WinClose("WinZip 安装程序", "软件没有成功安装")
不过事情还不是那么简单,实际运行此脚本时会发现一个问题:如果程序已经安装过,则当然会出现上面的窗口,但是脚本却没有做我们希望它做的事情——关闭窗口。其实仔细研究就会知道,这个表达式只是进行一次即时的检测,由于时间过快,检测完窗口才出现,因此会造成脚本暂停,不能继续处理这个意外中断。或许您可能会想到不停地进行检测(也就是循环)来解决问题,其实不用这样做,使用 Adlib 函数即可解决,这个函数就是专门用来处理这些“意外”的(其实也相当于是循环,它默认是每隔250毫秒就调用自定义函数)。因此把上面的脚本修改为这样:
AdlibEnable("end")
Func end()
If WinExists("WinZip Setup", "注册副本已安装") Then
WinClose("WinZip Setup", "注册副本已安装")
WinWaitActive("WinZip 安装程序", "软件没有成功安装")
WinClose("WinZip 安装程序", "软件没有成功安装")
Exit
EndIf
EndFunc
;AdlibDisable() ;在脚本的最后位置添加此行
现在您可以查看 完整脚本 ——请注意,我把每个对话框的步骤分开并添加了注释部分,这样比较容易读懂而且方便将来进行修改(下一版本的WinZip大概也是只有轻微改动而已)。
大功告成!现在运行一下 winzipinstaller.au3 这个脚本吧,您会看到WinZip将在很短的时间之内被安装好!在此页使用的技术也可用来实现大多数程序的自动化安装。
下面给各位读者一个小小的练习题吧,请尝试再编写一次这个脚本,但不要使用 Send 函数(它会向激活窗口发送键击动作),试试用 ControlClick 函数吧,这会令脚本更加可靠。在此之前您或许应该熟读关于 控件(Controls) 的说明。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论