常见问题:
Q1 如何调试脚本?
MsgBox(0,"测试",$var) ConsoleWrite("var=" & $var & @CRLF)
Q2 操作CMD相关命令
Q2.1 如何运行DOS命令?
Run(@ComSpec & ' /c dir>d:\dir.txt',"", @SW_HIDE)
#include <Process.au3> $rc = _RunDos("start 网址")
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 <Constants.au3> 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 <Misc.au3> _Singleton("test")
Q4 如何直接运行系统程序关联的文件?如[.txt, .msi, .pdf, .jpg, .lnk, .msc]等等!!!
ShellExecute("Notepad.exe") ShellExecute("test.txt", "", @ScriptDir, "edit") ShellExecute("网址") 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() 设置服务状态
Q6 如何操作注册表?
;读取注册表指定的值 $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 注册表权限设置
Regini是一个设置注册表权限的安全工具,常用于命令行方式批量更改注册表权限来达到提高系统安全性,下面我们先看看regnin所对应的格式和权限数值: 在regset.ini的格式: 注册表键数值 [更改的权限] 例如: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run [1 7 17] 上例中是分别设置 Administrators everyone System 三个用户对注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 拥有完全访问权限 下面我们看看对应的权限代码 1 - Administrators 完全访问 2 - Administrators 只读访问 3 - Administrators 读和写入访问 4 - Administrators 读、写入、删除访问 5 - Creator 完全访问 6 - Creator 读和写入访问 7 - everyone 完全访问 8 - everyone 只读访问 9 - everyone 读和写入访问 10 - everyone 读、写入、删除访问 11 - Power Users 完全访问 12 - Power Users 读和写入访问 13 - Power Users 读、写入、删除访问 14 - System Operators 完全访问 15 - System Operators 读和写入访问 16 - System Operators 读、写入、删除访问 17 - System 完全访问 18 - System 读和写入访问 19 - System 只读访问 20 - Administrators 读、写、执行访问 21 - Interactive User 完全访问 22 - Interactive User 读和写入访问 23 - Interactive User 读、写入、删除访问 就第一个例子,我们要设置常见的3个组的用户为只读权限.那么先新建一个文件名为regini.ini然后编辑regini.ini的内容如下: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run [2 9 19] 然后保存regini.ini 在命令行下导入regini.ini的命令是: regini regset.ini 示例: bat文件 @echo off echo HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run [8] >%windir%\system32\regset.ini regini %windir%\system32\regset.ini exit
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 <String.au3> 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)