AutoIt3常见问题解答
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 Http://www.autoit.net.cn")
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 如何防止程序重复运行?
见帮助手册的"_Singleton"函数
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 如何删除脚本程序自身?
;删除脚本程序自身(如果编译成了EXE同样有效,会把自己删掉)
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)
;MD5字符串加密
http://www.autoit.net.cn/viewthread.php?tid=378&highlight=MD5
;MD5文件效验
http://www.autoit.net.cn/viewthr ... &extra=page%3D1
;哈唏算法
http://www.autoit.net.cn/viewthread.php?tid=372&highlight=MD5
Q11 如何修改屏幕分辨率/刷新频率/颜色深度?
http://www.autoit.net.cn/viewthr ... angeDisplaySettings
Q12 如何在界面显示GIF图片?
http://www.autoit.net.cn/viewthr ... ht=Shell.Explorer.2
Q12.1 AU3调用OBJ的一点点例子?
http://www.autoit.net.cn/viewthread.php?tid=365&highlight=obj
Q13 如何在界面上显示SWF格式的文件?
参考Q12.1的例子
或者通过IE对象来实现,请参考:
http://www.autoit.net.cn/viewthr ... &extra=page%3D1
Q14 如何控制摄像头?
http://www.autoit.net.cn/viewthr ... &extra=page%3D3
Q15 如何界面中调用皮肤?
http://www.autoit.net.cn/viewthr ... &extra=page%3D3
http://www.autoit.net.cn/viewthr ... &extra=page%3D2
Q16 我怎样才能DEBUG我的脚本?
A1. 这个问题有无数个答案,不过最有效的还是从SciTE4AutoIt3开始,大多数人都使用这个软件来编写脚本。在debug方面SciTE有下面几条优势:
Syntax会即时高亮不符合语法的语句,这会让用户更容易发现脚本里的错误
内建在工具菜单里的Syntax可以一次检测脚本里的全部错误
内置的代码清理程序可以让代码变得更整齐、更具有可读性,它同时也能修正错误拼写的函数和变量
A2. 你也能通过添加下面的代码来在任何一台电脑上debug你的脚本:
Func dbg($msg)
DllCall("kernel32.dll", "none", "OutputDebugString", "str", $msg)
EndFunc
然后,你可以在需要debug的地方加上下面的代码:
dbg("The value of Variable 1 at this time is " & $var1
这个方法对用户来说更加透明,同时也只对DebugView from SysInternals之类的程序可见。这个方法在那些没有安装SciTE的机器上更具有优势。
Q17 我怎样才能打开那些非exe格式的文件[.txt, .msi, .pdf, .jpg 之类]? [或] 我怎样才能用默认的浏览器打开网页?
A1. 这也就是为什么我们创建ShellExecute函数.下面有一个例子:
ShellExecute("C:\autoitscripts\test.au3", "", "", "edit", @SW_MAXIMIZE)
你也能像这样打开一个网址:
ShellExecute("http://www.autoitscript.com/forum")
如果文件的右键菜单里有打印选项,你就可以这样用AutoIt打印文件:
ShellExecute("C:\boot.ini", "", "", "print")
如果你希望暂停脚本直到程序结束,你可以使用ShellExecuteWait函数,它们的运行参数是相同的.
Q18. 我怎样才能让脚本作为系统服务启动?
这也是一个有多个答案的问题
A1.如果你只想在自己的电脑上安装服务,最简单的方法是使用Pirmasoft RunAsSvc.这个程序可以方便地添加/删除系统服务.
A2.如果你想让服务能在任何电脑上都能安装,你可以使用SRVANY.EXE和ServiceControl.au3,像这样安装服务:
#include "ServiceControl.au3"
$servicename = "MyServiceName"
_CreateService("", $servicename, "My AutoIt Script", "C:\Path_to_srvany.exe", "LocalSystem", "", 0x110)
RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\" & $servicename & "\Parameters", "Application", "REG_SZ", @ScriptFullPath)
或者使用下面的代码删除服务: #include "ServiceControl.au3"
$servicename = "MyServiceName"
_DeleteService("", $servicename)
Q19 我怎样在复制文件时显示进度条?
A1.函数集ShellFileOperation.au3能完成这个操作:
Q20 我怎样让快捷键只在自己的GUI起作用?
A1. 在更好的方法出现之前,最简单的方法是使用下面的代码:
#include <GuiConstants.au3>
HotKeySet("{ENTER}", "catchguikey")
$gui = GuiCreate("Hotkey Test")
GuiCtrlCreateLabel("Press Enter", 0, 0)
GuiSetState()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
Func catchguikey()
Local $opt = Opt("WinTitleMatchMode", 4)
If WinGetHandle("active") = $gui Then
If @HotKeyPressed = "{ENTER}" Then
;Do something here
ToolTip("Key Pressed")
Sleep(1000)
ToolTip("")
EndIf
Else
HotKeySet(@HotKeyPressed)
Send(@HotKeyPressed)
HotKeySet(@HotKeyPressed, "catchguikey")
EndIf
Opt("WinTitleMatchMode", $opt)
EndFunc
Q21 我怎样检测键盘是否按下了指定的键?
A1. 你可以使用_IsPressed()函数来检测按键. 你可以在帮助文件里找到这个函数:User Defined Functions -> Misc Management -> _IsPressed. 下面的例子会显示如何在K键按下时单击鼠标左键:
#Include <Misc.au3>
$pressed = 0
While 1
If _IsPressed("4B") Then
If Not $pressed Then
ToolTip("K Key being held down")
MouseDown("left")
$pressed = 1
EndIf
Else
If $pressed Then
ToolTip("")
MouseUp("left")
$pressed = 0
EndIf
EndIf
Sleep(250)
WEnd
Q22 我怎样在远程计算机上运行脚本?
A1. 这个问题的答案由你在局域网的经验决定,如果目标系统是Windows 2000或Windows XP而且你拥有管理员权限,你就可以使用下面的两个程序:
SysInternals的PsExec
BeyondLogic的BeyondExec
这两个程序都允许在远程计算机上运行任何程序,甚至可以把你的脚本复制到目标系统上.不过Windows XP Home Edition 上不能运行这个两个程序.
Q23 我怎样制作一个拥有可选参数的自定义函数?
A1. 你可以通过在声明函数时给参数指定一个默认值来做到. 下面是一个例子:
Func testme($param1, $param2 = "nothing", $param3 = 5)
MsgBox(0, "", "Parameter one is required. The value of Parameter 1 is " & $param1 & @CRLF & "Parameter 2 is optional. The value of Parameter 2 is " & $param2 & @CRLF & "Parameter 3 is optional. The value of Parameter 3 is " & $param3)
EndFunc
如果调用testme()时只使用了一个参数[比如testme("test")]就会输出:
Parameter one is required. The value of Parameter 1 is test
Parameter 2 is optional. The value of Parameter 2 is nothing
Parameter 3 is optional. The value of Parameter 3 is 5
不过,如果调用函数时使用了超过2个参数,比如testme("test", "something"), 就会输出:
Parameter one is required. The value of Parameter 1 is test
Parameter 2 is optional. The value of Parameter 2 is something
Parameter 3 is optional. The value of Parameter 3 is 5
Q24 我怎样让系统启动时自动运行脚本?
A1.你可以使用下面的语句来做到:
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "MyProgramName", "REG_SZ", @ScriptFullPath)
或者:
FileCreateShortcut(@ScriptFullPath, @StartupCommonDir & "\MyProgramName.lnk")
Q25 我怎样让脚本删除自己?
A1. 下面的代码可以删除一个正在运行的脚本.
Func _SelfDelete($iDelay = 0)
Local $sCmdFile
FileDelete(@TempDir & "\scratch.bat")
$sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
& ':loop' & @CRLF _
& 'del "' & @ScriptFullPath & '"' & @CRLF _
& 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
& 'del ' & @TempDir & '\scratch.bat'
FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
EndFunc
Q26 我怎样在GUI里建立一个可点击的超链接?
A1. ChangeResolution.au3可以完成这些设置.
Q27 我怎样修改屏幕分辨率/刷新频率/颜色深度?
A1. Gafrost在这方面做了很大努力,并提供了一个UDF来帮助完成这个功能.
Q28 在多显示器情况下我怎样得到屏幕分辨率?
A1. 下面的代码可以得到屏幕的总分辨率:
Global Const $SM_VIRTUALWIDTH = 78
Global Const $SM_VIRTUALHEIGHT = 79
$VirtualDesktopWidth = DLLCall("user32.dll", "int", "GetSystemMetrics", "int", $SM_VIRTUALWIDTH)
$VirtualDesktopWidth = $VirtualDesktopWidth[0]
$VirtualDesktopHeight = DLLCall("user32.dll", "int", "GetSystemMetrics", "int", $SM_VIRTUALHEIGHT)
$VirtualDesktopHeight = $VirtualDesktopHeight[0]
Q29 我怎样注册一个文件类型[或者] 我怎样才能让我的程序变为一个文件类型的默认打开方式?
A1. 文件注册对那些新手来说的确有些困难. 第一件要做的事就是要让你的脚本能接受命令行调用. 下面是一段示例代码:
;$cmdline[0] is the number of parameters passed
If $cmdline[0] <> 0 Then
$filename = $cmdline[1]
; Do something with the file here
MsgBox(0, "UXYFixer", 'The file name passed to the command line is "' & $filename & '"')
Else
; We did not get any command line parameters.
; If this is a command line only program, you would want to
; alert the user that the command line parameters were incorrect.
; If this is a GUI program (like a notepad program), you would
; want to simply continue from here without opening a file.
MsgBox(0, "UXYFixer", 'Command line parameters incorrect.' & @CRLF & 'Command line usage: "' & @ScriptName & '" "file to process"')
EndIf
然后你的脚本就能接受文件了, 你可以开始注册一个文件类型. 为了避免错误,我对此专门制作了一个UDF—— FileRegister.au3
Q30 为什么点击我的下拉框(GUICtrlCreateCombo)时不出现一个下拉列表?
A1. 在使用GUICtrlCreateCombo前你先要确认height参数是你想要的下拉列表的高度,Windows XP会自动选择一个高度,但其他版本的Windows并不能这样做。
$combo = GUICtrlCreateCombo("",10,10,200,20)
应修改为:
$combo = GUICtrlCreateCombo("",10,10,200,200)
Q31 为什么我的帖子没有人回答?
A1. 你是否对你的问题做了得体的描述? 如果你的标题或者对问题的描述含糊不清, 其他人只会忽略掉你的问题而不是回答它. 那些标题像 "帮助我", "我有了麻烦", "问题", "帮我看看代码的问题", "这段代码不能工作" 的帖子并不会引起其他人的注意. 那些有经验的用户(他们通常能解决你的问题) 经常会跳过类似的帖子. 一个规范的标题应该像这样:"使用WinWaitClose时出现的问题",或者 "陷入了死循环".
A2. 你是否贴出了你的代码? 如果你不贴出你的问题代码你就不可能得到帮助. 在发代码之前先把不相关的代码去掉.也许当然去掉不相关的代码时你已经看到问题所在的地方..也许会发现.原来是一个那样简单的问题.
A3. 请让你的文字变得易于阅读,适当的标点很重要,同时也不要给文字加上颜色.另外最好不要使用繁体字,繁体字并不能让你显得更有文化,相反而会影响他人的阅读.
另外很多人喜欢用些比较吓人的标题,比如"比如高手进来看一下"."版主进来解决一下"."高难度的问题".问题常常因为我不是高手或者版主而没有回答.或者发现"高难度"的问题原来是很菜滴.不是每个人都喜欢扮帅滴.....
还有,在提问建议多搜索一下。
Q32 为什么杀毒软件报告我的脚本被感染?
A1. AutoIt并没有在你的系统里安装病毒,如果你的程序被报毒的话(前提是你自己不怀恶意) 那么这就是一次误报. 杀毒软件会在编译过后的AutoIt脚本里发现一些标记,并以此认为你的脚本被感染病毒.之所以会出现这样的情况有下面的两点原因:
AutoIt使用UPX加壳. UPX是一种开源的程序压缩软件. 经常被一些病毒使用(让它们变得更小).
一些怀恶意的写脚本的人让AutoIt脚本引擎被标识为了病毒.
补充AU3中文官网上的 《FAQ 大全》初学者必看
说明:
该说的"提问智慧"里边已经说了,这里不重复了。不要拿"新手"作借口。。。
太多的重复提问贴提问,只会让人看而生厌,并且有浪费时间的嫌疑,这里重复一句,学会搜索论坛。
提问区"已解决"版块里的问题都是解决了的,建议新手多翻下,多看下。这里发些常见的问题解答。
声明:此贴只发www.autoit.net.cn,其他的都是转贴。转贴请注明出处,多谢合作。
AutoIt3常见问题解答的更多相关文章
- MySQL同步常见问题解答(自己的小心得)
前几天刚刚注册了博客园,我想写一些技巧性的教程,今天给大家分享一个MySQL同步常见问题解答. Q:如果主服务器正在运行并且不想停止主服务器,怎样配置一个从服务器? A:有多种方法.如果你在某时间点做 ...
- Delphi XE5 常见问题解答
Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...
- SSL/TLS 高强度加密: 常见问题解答
关于这个模块 mod_ssl 简史 mod_ssl会受到Wassenaar Arrangement(瓦森纳协议)的影响吗? mod_ssl 简史 mod_ssl v1 最早在1998年4月由Ralf ...
- [!!!!!]Inno Setup教程-常见问题解答
[转]Inno Setup教程-常见问题解答 功能 * 翻译 Inno Setup 文字 * 它支持 MBCS (多字节字符集) 吗? * 将来会支持 Windows Installer 吗? ...
- 英特尔® 实感™ SDK 前置摄像头 (F200) 常见问题解答
原文地址 https://software.intel.com/zh-cn/articles/intel-realsense-sdk-faq-for-front-facing-camera-f200? ...
- 我个人有关 Azure 网络 SLA、带宽、延迟、性能、SLB、DNS、DMZ、VNET、IPv6 等的 Azure 常见问题解答
Igor Pagliai(微软) 2014 年 9月 28日上午 5:57 年 11 月 3 年欧洲 TechEd 大会新宣布的内容). 重要提示:这篇文章中我提供的信息具有时间敏感性,因为这些 ...
- 关于CopyU!的常见问题解答
拷优(CopyU!)常见问题解答 本常见问题解答列举了一些常见的疑问及其解释,如果您对CopyU!有任何问题,请您首先查看本解答! 本解答将会保持随时更新! 一.使用篇: 1.问:我的杀毒软件 ...
- genymotion常见问题解答
[转]常见问题解答 很多人喜欢使用Genymotion这款安卓模拟器,但是虽然Genymotion很好用,可是却有各种问题存在哦,下面潇潇就一些常见的Genymotion问题来说下解决方法吧. 为什么 ...
- Linux的常见问题解答和管理技巧
Linux的常见问题解答和管理技巧 一. 如何建立多用户 提醒大家一句,别一直使用root用户,因为root用户在系统中有着至高无上的权力,一不小心就可能破坏系统.比如我们想删除/temp目录下的文件 ...
随机推荐
- Android数据储存之File
openFileOutStream 和 openFileInStream FileInputStream fileInputStream = openFileInput(name); 打开应用下文件 ...
- Linux性能分析调优工具介绍
1.常用性能分析工具 1)CPU性能分析工具 vmstat ps sar time strace pstree top 2)Memory性能分析工具 vmstat strace top ipcs ip ...
- eslint规范项目代码
安装一系列eslint插件后,填写eslint配置,配置如下 .editorconfig root = true [*] charset = utf-8 indent_style = space in ...
- 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...
- cf 853 B Jury Meeting [前缀和]
题面: 传送门 思路: 看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉 而且这道题只有去首都和离开首都的机场 因此考虑计算去首都的飞机的前缀最小花费,以及离开首 ...
- SPOJ 422 Transposing is Even More Fun ——Burnside引理
这题目就比较有趣了. 大概题目中介绍了一下计算机的储存方法,给一个$2^a*2^b$的矩阵. 求转置.但是只能交换两个数,求所需要的步数. 首先可以把变化前后的位置写出来,构成了许多的循环.左转将狼踩 ...
- windows服务-监视文件
配置一个xml其中有是否开启监视.监视时间.监视路径. FileSystemWatcher watcherName = new FileSystemWatcher(); watcherName.Inc ...
- Vue处理边界之$root、$parent、$refs
Vue处理边界之parent.$refs 下面的功能都是有风险的,尽量避免使用 1.Vue 子组件可以通过 $root 属性访问父组件实例的属性和方法 <div id="app&quo ...
- [AGC002D] Stamp Rally (并查集+整体二分)
Description 给你一个n个点m个条边构成的简单无向连通图,有Q组询问,每次询问从两个点x,y走出两条路径,使这两条路径覆盖z个点,求得一种方案使得路径上经过的变的最大编号最小. Input ...
- 【源码】List<T>泛型绑定repeater,以及repeater的交替绑定
原文发布时间为:2009-10-28 -- 来源于本人的百度文章 [由搬家工具导入] 后台: using System;using System.Collections.Generic; public ...