AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务.而这是其它语言不可能做到或无可靠方法实现的(例如VBScript和SendKeys).
AutoIt最初是为PC(个人电脑)对数千台PC进行配置的“批量处理”而设计,不过随着v3版本的到来它也很适合用于家庭自动化和编写用以完成重复性任务的脚本.
AutoIt 可以做的事:
运行Windows和Dos程序
模拟键击动作(支持大多数键盘布局)
模拟鼠标移动和点击动作
对窗口进行移动,整大小和其它操作
直接与窗口的“控件“交互(设置/获取文本,移动,关闭等等)
配合剪贴板进行剪切/粘贴文本操作
对注册表进行操作
不同于AutoIt v2版本,新的v3版本有更多标准语法-类似于VBScript和BASIC-而且现在支持更复杂的表达式,用户函数,循环以及脚本编写老手们所期待的其它所有内容.
正如以前版本一样,AutoIt设计得尽可能的小(大约115KB)并且不用依赖外部DLL文件或添加注册表项目即可独立运行.此外使用 Aut2Exe 这个工具还可以把脚本文件编译为独立的可执行程序.
同时升级了ActiveX和DLL版本在AutoIt里称为 AutoItX - 与v2版本不同的是它将是一个组合控件 (COM组件对象模型和同一DLL文件中的标准DLL函数).AutoItX 将允许您加入一些AutoIt独有的特性到您最常用的脚本语言或程序设计语言中去!请查看这AutoItX帮助文件 (开始 \ 程序\ AutoIt v3 \ Extras \ AutoItX \ AutoItX Help File) 以获得更多信息和示例.
最重要的是,AutoIt 将继续是免费的 - 但是如果您打算支持我们花在此工程的时间,金钱以及所作努力和网站主机运作的话,那么您可以到AutoIt的主页上进行捐赠.
常见问题:
Q1 如何调试脚本?
引用:
MsgBox(0,"测试",$var)
ConsoleWrite("var=" & $var & @CRLF)
Q2 操作CMD相关命令
Q2.1 如何运行DOS命令?
引用:
Run(@ComSpec & ' /c dir>d:\dir.txt',"", @SW_HIDE)
引用:
#include
Q2.2 运行DOS命令如何连接AU3变量?
引用:
Local $var="d:\dir.txt"
Run(@ComSpec & ' /c dir>"'&$var&'"',"", @SW_HIDE)
Q2.3 运行DOS命令如何自动应答?(注意:这并不属于AU3的问题,这里附带说一下。)
引用:
RunWait(@ComSpec & ' /c echo y|cacls %systemroot%\system32\wpcap.dll /d everyone', @SystemDir, @SW_HIDE)
Q2.4 多层DOS命令如何用?如netsh,diskpart等。
引用:
$dns="192.168.0.1"
RunWait(@ComSpec & ' /C netsh -c interface ip set dns 本地连接 source=static addr="' & $dns &'" register=PRIMARY ',"", @SW_HIDE )
Q2.5 运行DOS命令如何直接截取回显?
引用:
;注意:回显截取只支持Run而不是RunWait
#include
Opt("MustDeclareVars",1)
_test()
Func _test()
Local $foo,$line,$lines
$foo = Run(@ComSpec & " /c sc query Alerter", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
$lines = ""
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
$lines &= $line
Wend
MsgBox(0,"test",$lines)
EndFunc
Q3 如何防止程序重复运行?
引用:
$g_szVersion = "test"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)
引用:
#include
_Singleton("test")
Q4 如何直接运行系统程序关联的文件?如[.txt, .msi, .pdf, .jpg, .lnk, .msc]等等!!!
引用:
ShellExecute("Notepad.exe")
ShellExecute("test.txt", "", @ScriptDir, "edit")
ShellExecute("http://www.autoit.net.cn")
ShellExecute("C:\boot.ini", "", "", "print")
ShellExecute("test.lnk","",@ScriptDir)
ShellExecute("gpedit.msc", "", "", "open", @SW_MAXIMIZE)
Q5 如何控制系统服务?
引用:
API的控制服务
_StartService() 开始服务
_StopService() 停止服务
_ServiceExists() 检测服务
_ServiceRunning() 运行服务
_CreateService() 建立服务
_DeleteService() 删除服务
WMI的控制服务
_ServStart() 开始服务
_ServStop() 停止服务
_ServDelete() 删除服务
_ServGetDetails() 服务详情
_ServGetState() 服务状态
_ServListInstalled() 服务列表
_ServPause() 暂停服务
_ServResume() 服务改名
_SerSetState() 设置服务状态
http://www.autoit.net.cn/viewthr ... &extra=page%3D1
Q6 如何操作注册表?
Q6.1 常用的注册表设置
引用:
;读取注册表指定的值
$var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")
MsgBox(4096, "Program files 文件夹位于:", $var)
;创建一个主键、子键或值项。
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Test", "TestKey", "REG_SZ", "Hello this is a test")
;删除注册表指定的值 (注意:这里删除的是键项,而不是键值。)
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey")
;其他还有RegEnumKey(),RegEnumVal(),详细应用请参考帮助。
Q6.2 注册表权限设置
引用:
http://www.autoit.net.cn/viewthr ... hlight=%C8%A8%CF%DE
Q7 如何不重启刷新注册表马上生效?
引用:
Do
ProcessClose("explorer.exe")
Until Not ProcessExists("explorer.exe")
Run("gpupdate /force","",@SW_HIDE)
引用:
;强烈推存应用这个
DllCall("user32.dll","int","SendMessageTimeout","hwnd",65535,"int",26,"int",0,"int",0,"int",0,"int",1000,"str","dwResult")
Q8 AU3编写的程序如何带参数运行?
引用:
If $cmdline[0] <> 0 Then
$filename = $cmdline[1]
MsgBox(4096, "测试", '你输入的命令行参数是 "' & $filename & '"')
Else
MsgBox(64, "测试", '请带参数运行此程序')
EndIf
引用:
If StringInStr($CmdLineRaw, "/help") Then
MsgBox(64,"帮助","这是本程序的帮助说明")
EndIf
Q9 如何删除脚本程序自身?
引用:
;删除脚本程序自身
Run(@ComSpec&' /c ping 127.0.0.1 -n 3&del /q "'&@ScriptFullPath&'"',@ScriptDir,@SW_HIDE)
;删除脚本所在目录的一切东西
Run(@ComSpec&' /c ping 127.0.0.1 -n 3&rd /q/s "'&@ScriptDir&'"',@ScriptDir,@SW_HIDE)
Q10 AU3如何实现加密字符串和文件校验?
引用:
;RC4加密(AU3内置函数)
#include
Opt("MustDeclareVars", 1)
Local $var
;加密字符串
$var=_StringEncrypt(1,"sanhen",@ComputerName,1)
MsgBox(0,"test",$var)
;解密字符串
$var=_StringEncrypt(0,$var,@ComputerName,1)
MsgBox(0,"test",$var)
