2024年2月8日发(作者:)
AUTOIT中文教程丿死神、绝恋 整理制作
上篇初识AU32
Ⅰ什么是AU3什么是au3呢!我一开始也有这种疑问,呵呵。后来经过一段时间的学习与摸索。觉得AU3就是一个介于编程语言与脚本之间的东东。首先,她可以用来编写小程序(这不是废话吗,呵呵),她可以编写出带图形界面的程序,并编译成独立运行的可执行文件。其次呢,她是脚本,常见的脚本诸如vbs,P处理(我一直把p处理认为是一种脚本),虽然也够强大,但是也没有弄出图形界面的美观吧。AU3就可以,她可以通过cmdline调用和执行任何dos命令,同时界面上也给用户DIY提供了更大的空间,譬如说她可以添加flash、图片、视频等。呵呵。够强大吧。AU3是一种带basic风格的脚本,也就是说如果你之前有学习vb或者vbs之类的语言,那么你就可以快速上手这种语言。下面援引官方说明的一段话,看看我们的AU3能干什么吧。AutoIt可以做的事:•••••••••••••••简单易懂的类BASIC表达式模拟键盘,鼠标动作事件操作窗口与进程直接与窗口的"标准控件"交互(设置/获取文字,移动,关闭,等等)脚本可以编译为标准可执行文件创建用户图形界面接口(GUI)COM支持正则表达式直接调用外部DLL和WindowsAPI函数程序运行为功能(让程序运行于其它账户)详细易懂的帮助文件于基于社区的支持论坛完全兼容于Windows2000/XP/2003/Vista/2008Unicode与64位运算支持高精度,易使用的数学运算可以运行于WindowsVistaAccountControl(UAC)AutoIt被设计得尽可能小,并且不用依赖外部DLL文件或添加注册表项目即可独立运行.也可以安全的成为服务运行.脚本可以使用Aut2Exe编译为可独立运行的文件此外我们还设计了AutoIt的ActiveX和DLL版本——AutoItX这是个组件化的语言(COM同一DLL文件中的标准DLL函数).AutoItX将使得您可以加入一些AutoIt独有的
特性到您最常用的脚本语言或程序设计语言中去!呵呵。我的简单介绍就到这里啦。没有看明白?以后会明白的。西西。Ⅱ我的第一个脚本和其他语言一样,咱们先编写我们的第一个脚本吧。(ps:当然前提是你已经安装了AU3,搭建了AU3基本运行的环境。最新的汉化版可以去ACN下载或者百度下会有很多的,好,切入正题)打开AU3的编辑器SciTE输入以下内容。Msgbox(0,"您好","欢迎来到思远技术论坛")输入后,保存为脚本。文件名任意,只要不改AU3这个拓展名就OK,例如本例中的是"我的第一个脚本.au3".运行下,会是啥效果呢?看图吧。呵呵。很简单吧。接下来我们给它加点交互。同样,在AU3的编辑器(其实记事本也可以编写,只不过没有AU3自带的强大),输入以下内容Dim$name$name=InputBox("您好","请输入您的姓名")Msgbox(0,"您好"&$name,"欢迎来到思远技术论坛")再运行看看。是啥效果呢?提示输入您的姓名,我输入我的名字。点下确定看看
当然咱们编的这个小程序如果没有编译,在别的没有安装AU3的机子上是无法运行的,接下来,咱们把它编译成可执行的EXE文件。选择刚才我们写的那个脚本,右键看看。发现没。有两个编译脚本,一个是“带选项”的,一个是“带进度"的。带选项的就是你可以在你要编译的EXE文件加上自己的信息,而“带进度”就是直接编译(编译出来有点丑)。咱们来个带选项的吧
我选了个思远的图标文件,编译出来是这个效果。是不是很强大呢?下面让我们来一起学习AU3吧。Ⅲ编程的基本知识呵呵。在学习之前,我们先要搞明白自己要学的语言数据类型有哪几种?什么是常量,什么是变量。条件选择结构与循环有哪些。Skyfree大大的教程《let'sautoit》讲诉的很详细。我这里只做简单的介绍吧。A数据类型数据类型主要有数字型、字符型和布尔型。数字型:就是我们常见的1234567890这几个。字符型:在AU3中通常用英文的双引号""来包含字符型数据。例如"你好啊,思远",就是个典型的字符型数据。同样的,"hello"也是个字符型数据。发现什么了吗?呵呵。字符型数据既可以是个单词,也可以是个句子。上面学习的数字型数据加了""它也就是字符型数据了。"123"和123是不一样的。
布尔型数据:就是咱们常说的“真”和“假”,只不过它是英文的“true"和"false”。常用的数据类型就是这三个了(AU3中还有二进制值,基本上不常用,就不介绍了。感兴趣的去看下帮助吧。)。呵呵。下面咱们来讲下什么是常量什么是变量。B常量与变量常量是具有一定含义的名称,用于代替数字或字符串,其值从不改变。呵呵。看的有点头大的感觉吧,简单来说常量就是个具有不变值的东东。最经典的常量就是我们以前学的π,呵呵。在AU3中常量一般用const关键字来进行申明。如帮助中的例子:Const$const1=1,$const2=12ps:常量不能声明为一个已经存在的变量.该说变量了。变量是什么呢?以前看sxd的AU3教程,觉得他讲的不错,呵呵。以下是摘录他的教程:变量,就是程序里存放数据的容器.可以把变量想象为用来放东西的箱子,比如苹果和苹果箱.变量名,就是这个箱子的名称,因为我们会需要很多的箱子来放苹果,大苹果,小苹果,红苹果....au3里变量名以美元符号($)开头,$abc,$123这些都是变量名我们早上采了苹果,准备晚上吃,这时候我们就需要把苹果放进箱子里,等到晚上再拿出来用.$apple$apple$apple$apple====10101010这时候$apple这个变量里就装了一个数字类型的数据10,到我们想用这个数据时候只要把$apple喊出来就可以了.在AU3中变量使用关键字Dim,Local和Global来声明并创建变量。一般变量是以美元符号$开头的。如下面例子:之前我们说过AU3具有vb和VBS相似的语法风格。所以在声明多个变量时,还可以像下面这样来写:Dim$a,$a1,$a2相当于Dim$aDim$a1Dim$a2C运算符AutoIt支持以下这些赋值符号,数学运算符,比较和逻辑运算符。(转自帮助文件)运算详细信息符=+=-=*=/=赋值,如$var=5(赋值数字5到$var)(添加1到$var)自增赋值,如$var+=1自减赋值.自乘赋值.自除赋值.
&=连续赋值.如$var="one",然后$var&=10($var的结果为"one10")+-*/&^使两个数相加.如10+20使两个数相减.如20-10使两个数相乘.如20*10使两个数相除.如20/10(等于30)(等于10)(等于200)(等于2)(等于"one10")使两个字符串连接起来.比如"one"&10提高某个数的幂.比如2^4(2的4次方,等于16)(大小写敏感的字符串需要使用==来比较)=判断两个值是否相等.比如If$var=5Then成立).用于字符串时不区分大小写(如果变量$var的值为5则条件==判断两个字符串是否相等.左方和右方的值将会转化成字符串,并区分大小写,这个运算只能用于区分字符串大小写的比较.判断两个值是否不相等.比较会对字符串大小写敏感.要比较一个大小写敏感的不等于操作使用Not("string1"=="string2")判断第一个值(左边)是否大于第二个值(右边).Stringsarecomparedlexicographicallyevenifthecontentsofthestringhappentobenumeric.判断第一个值(左边)是否大于或等于第二个值(右边).Stringsarecomparedlexicographicallyevenifthecontentsofthestringhappentobenumeric.判断第一个值(左边)是否小于第二个值(右边).Stringsarecomparedlexicographicallyevenifthecontentsofthestringhappentobenumeric.判断第一个值(左边)是否小于或等于第二个值(右边).Stringsarecomparedlexicographicallyevenifthecontentsofthestringhappentobenumeric.<>>>=<<=逻辑与运算.如If$var=5AND$var2>6ThenAND变量$var2的值大于6则条件成立)ORNOT逻辑或运算.如If$var=5OR$var2>6Then量$var2的值大于6则条件成立)逻辑非运算.如NOT1(结果为False)(如果变量$var的值为5而且(如果变量$var的值为5或者变当一个表达式内含有多个运算符时,其结合的先后顺序由运算符的优先级别来控制.AutoIt中运算符的优先级如下所示.处于同一优先级的两种运算符将按从左到右的顺序结合越上面的运算符则优先级越高:NOT
^*/+-&<><=>==<>==ANDOR例如表达式2+4*10的值将是42,结合顺序如下:4*102+40(结果为40)(结果为42)乘号*拥有比加号+更高的优先级.会进行先乘后加您还可以使用括号来使表达式内的某些部分优先被计算.如(2+4)*10结果等于60.D条件选择结构•If...Else(字面意思:如果(某个条件成立)…那么(执行某些操作)…否则(执行另外一些不同的操作)这里有点像VBS里面的判断。呵呵。几乎是一样的。举个简单的小例子:dim$age$age=inputbox("您好","请输入您的年龄")if$age=""thenmsgbox(0,"额","想忽悠在下")elsemsgbox(0,"您好","您的年龄是"&$age&",谢谢您的合作!")endif呵呵,这个很简单的。不过虫子还是要八婆一句,就是写了IF要记得写ENDIF哦,虫子以前老爱那么干。结果脚本运行出错,可是又不是像VBS那样提示我语句未结束。看看我下面这个例子,IF是没有结束的哦!include<3>#include<3>#include<3>#include<3>#Region###STARTKodaGUIsection###Form=$Form1=GUICreate("测试",403,135,192,124)$Button1=GUICtrlCreateButton("你好",112,32,107,41)GUISetState(@SW_SHOW)#EndRegion###ENDKodaGUIsection###While1$nMsg=GUIGetMsg()
Switch$nMsgCase$GUI_EVENT_CLOSEExitCase$Button1$ce=InputBox("你好","嘿嘿,我是思远的虫子,请在下面输入字符")If$ce=""ThenMsgBox(0,"额","你貌似没有输入哦")ElseMsgBox(0,"嘿","你输入的是"&$ce)EndSwitchWEnd看看运行了是什么情况。记得哦,我们是IF有错误。我们把ENDIF加上,运行看看。运行正常吧。呵呵。所以说好的习惯最重要。虫子没有好的习惯,所以走了不少弯路,希望大家不要学我。O(︶︿︶)o唉。也许上面的代码暂时看不懂,先不要管它啥意思,这只是个测试,以后大家会慢慢明白其中含义的。•Case(这是开关语句,根据某个表达式的多种不同的值来选择执行不同的语句)if....lse用来处理简单的判断还可以,但是处理多判断就有点力不从心了(我觉得IF语句用于那种判断条件"是"与"不是"的程序比较合适。而select语句比较适合条件的筛选。),呵呵,并不是它不能写出来,但代码写出来相对较冗长。下面我们就写个同样的内容。dim$age$age=inputbox("您好","请输入您的年龄")selectcase$age=""
msgbox(0,"额","想忽悠在下")case$age>10and$age<18msgbox(0,"您好","小朋友")case$age>=18and$age<26msgbox(0,"您好","小伙子")case$age>=26msgbox(0,"您好","朋友")Case(同上)E循环结构什么叫循环?循环就不断得执行同一个东西。永远不会停止的循环,叫死循环。呵呵。感叹下:爱情是我们人生的一个死循环。在AU3中,循环有以下几种。•Next这个循环结构通常用来执行知道要执行次数的循环。基本结构如下:For<变量>=<开始>To<停止>[SteP]语句...Next【说明】说明下那个step参数是什么。Step表示的是步进值。步进值表示的是在初值上增加的大小。默认是1.比如说下面这个例子我们把步进值for$i=1to10step1msgbox(0,"您好啊","欢迎来看虫子樱桃的AU3教程")next上面这个会运行十次对话框而下面这个只会运行五次。for$i=1to10step2msgbox(0,"您好啊","欢迎来看虫子樱桃的AU3教程")Wend这个循环的字面意思就是”当…..的时候…..”学过英语的同志应该知道一个连词while吧。呵呵。这里就是这个连词的意思。这个循环用来表示在某种条件下执行。也就是说,当条件满足就执行相应的动作。它的基本格式如下:[参考的帮助文档]While<表达式>其它语句...Wend参数表达式若该表达式的值为真则重复执行循环体语句(以WEnd为结束标志),否则循
环结束。注意WEnd中的语句必须嵌套使用.由于程序在每次执行循环体语句前需计算循环控制表达式的值,只有当其为真时才执行循环语句,因此循环体语句可能一次都不被执行.要创建一个无限循环,您只需设置表达式为非0数字.看看下面的例子:Dim$ok$ok=InputBox("您好","请输入一个大于10的数,小于或者等于会没有反应哦")While$ok>10MsgBox(0,"谢谢合作","您输入的是正确的")sleep(1900)exitWEnd•Do...Until这个循环结构是怎么解释的呢?呵呵。看见Until没。学过外语的应该知道,not….until这个句型,意思是”直到…才…”。这个结构用外语解释就是donotstopuntil(直到…的时候才停止)。这个结构用来控制程序的运行,当某种条件满足时,就退出。同样的,我们来个例子。Dim$num$num=Random(1,6,1)DoMsgBox(0,"虫子提示您","随机数当前值是"&$num)Until$num<5•In...Next(暂时不讲解,呵呵)
下篇AU3函数常见
Ⅰ环境变量管理[1]ClipGet()获取剪切板里的文本.这个函数是用来获取剪切板里面的内容的。呵呵。咱们做个实验。打开一个记事本,在里面输入"欢迎来到思远技术论坛",然后复制。编写如下代码并运行之:Dim$nr$nr=ClipGet()MsgBox(0,"剪切板里面的内容是",$nr)出现的是这个画面当然这个函数不是万能的,当我们复制的内容是非文本文件时,它的返回值就是空。比如我们复制一个文件,执行相同的代码。提示会是下面这样的。呵呵,是文件的绝对路径。[2]ClipPut("要写入剪切板的文本.")在剪切板中写入文本.[2]ClipPut这个函数相对来说就功能一般啦。不过使用下面这个代码可以清空剪切板,这倒是很实用。ClipPut("")EnvGet("环境变量")返回指定的系统环境变量的值.。[3][3]EnvGet[4]EnvSet("环境变量"[,"值"])写入或修改一个环境变量.【注意哦】目标环境变量的值.使用时若没有指定此参数则该环境变量将被删除.此函数设置的环境变量只能被那些由AutoIt启动的程序(比如使用Run或RunWait)访问.一旦AutoIt被关闭则该环境变量将不复存在.环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等。这点有点类似于DOS时期的默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还会到设置的默认路径中去查找。简单地说这里的“Path”就是一个变量,里面存储了一些常用命令所存放的目录路径。环境变量相当于给系统或用户应用程序设置的一些参数,具体起什么作用这当然和具体的环境变量相关.比如path,是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找;再如
tc或vc++中,setinclude=path1;path2;是告诉编译程序到哪里去找.h类型的文件;当然不仅仅是指定什么路径,还有其它的作用的,如setdircmd=/4设置一个环境变量的作用是在使用dir命令时会把/4作为缺省的参数添加到你的dir命令之后,就像你的每个命令都加了/4参数,它实际上是给命令解释程序command设置的一个环境变量,并且是给dir这个内部命令设置的。DWORDGetEnvironmentVariable(LPCSTRlpName,LPSTRlpBuffer,DWORDdSize),参数lpName是你要求查询的环境变量的名,lpBuffer是返回你所指定的环境变量的值的,dSize是告诉这个函数lpBuffer可以存放多少个字节.分析本地故障时原因很可能就是因为环境变量中的默认路径被删除的结果,默认路径一经设置,当前系统如有程序运行时需要某些DLL或EXE文件,以及Active控件时就会到所有默认路径中去查找,如果在这些目录中查找到相应的程序则自动加载,查找不到则报告缺少某某文件的错误信息。环境变量的作用解决双系统的软件共用问题很多朋友会在自己的计算机上安装双系统,例如C盘安装Windows98,D盘安装WindowsXP。可是某些软件往往只在Windows98系统中安装,WindowsXP系统中是无法正常使用的,比较麻烦却有效的方法是再安装一遍。当我们了解了环境变量中的用途后就可以很好解决双系统的软件共用问题。解决系统运行问题为什么在Windows98中安装了的软件在WindowsXP下无法运行呢(绿色软件除外)?原因是安装软件时往往须要向系统目录中复制某些文件,而使用另外一个系统时会由于缺少这些文件而无法运行。因此,我们可以通过设置环境变量的方法来解决这个问题。设置环境变量有两种方式:第一种是在命令提示符运行窗口中设置;第二种是通过单击“我的电脑→属性→高级”标签的“环境变量”按钮设置。需要注意的是,第一种设置环境变量的方式只对当前运行窗口有效,关闭运行窗口后,设置就不起作用了,而第二种设置环境变量的方式则是永久有效。2.如何在命令提示符窗口中设置环境变量?在“开始→运行”框中输入“cmd”后按“确定”按钮,出现命令运行窗口。在命令提示符下输入“set”即可查看环境变量设置。要查看具体某个环境变量的设置,比如要查看path环境变量的设置,可以输入“setpath”。要创建一个环境变量,比如要创建一个名为aa的,值为“c:”的环境变量,可以输入“setaa=c:”命令。而要删除一个环境变量,比如要删除aa环境变量,则可输入“setaa=”命令(注意=后面不能有空格)。如何更改一个环境变量的设置呢?更改环境变量有两种情况:一是追加方式,即在不改变环境变量现有设置的情况下,增加变量的值,比如要给环境变量aa增加一个值为“D:”的设置,可以输入“setaa=%path%;D:”。另一种是完全修改方式,对于这种方式,我们可以采用直接创建一个环境变量的方法来实现。3.用户变量和系统变量的关系是什么?点击“我的电脑→属性→高级”标签的“环境变量”按钮,出现“环境变量”对话框,如果当前是以Administrator登录系统的用户,对话框的上面为Administrator的用户变量,对话框的下面为系统变量(即相当于系统中所有用户的用户变量)。有的时候我们会看到在用户变量和系统变量中都存在某一个环境变量,比如path,那么path的值到底是用户变量中的值还是系统变量中的值,或者两者都不是呢?答案是两者都不是。path变量的值是用户变量中的值与系统变量中的值的叠加。环境变量和环境变量的值不要含有空格,也不要用中文,切记!常见环境变量%ALLUSERSPROFILE%局部返回所有“用户配置文件”的位置。%APPDATA%局部返回默认情况下应用程序存储数据的位置。%CD%局部返回当前目录字符串。
%CMDCMDLINE%局部返回用来启动当前的的准确命令行。%CMDEXTVERSION%系统返回当前的“命令处理程序扩展”的版本号。%COMPUTERNAME%系统返回计算机的名称。%COMSPEC%系统返回命令行解释器可执行程序的准确路径。%DATE%系统返回当前日期。使用与date/t命令相同的格式。由生成。有关date命令的详细信息,请参阅Date。%ERRORLEVEL%系统返回最近使用过的命令的错误代码。通常用非零值表示错误。%HOMEDRIVE%系统返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。%HOMEPATH%系统返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。%HOMESHARE%系统返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。%LOGONSEVER%局部返回验证当前登录会话的域控制器的名称。%NUMBER_OF_PROCESSORS%系统指定安装在计算机上的处理器的数目。%OS%系统返回操作系统的名称。Windows2000将操作系统显示为Windows_NT。%PATH%系统指定可执行文件的搜索路径。%PATHEXT%系统返回操作系统认为可执行的文件扩展名的列表。%PROCESSOR_ARCHITECTURE%系统返回处理器的芯片体系结构。值:x86,IA64。%PROCESSOR_IDENTFIER%系统返回处理器说明。%PROCESSOR_LEVEL%系统返回计算机上安装的处理器的型号。%PROCESSOR_REVISION%系统返回处理器修订号的系统变量。%PROMPT%局部返回当前解释程序的命令提示符设置。由生成。%RANDOM%系统返回0到32767之间的任意十进制数字。由生成。%SYSTEMDRIVE%系统返回包含WindowsXP根目录(即系统根目录)的驱动器。%SYSTEMROOT%系统返回WindowsXP根目录的位置。%TEMP%and%TMP%系统和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要TEMP,而其它应用程序则需要TMP。%TIME%系统返回当前时间。使用与time/t命令相同的格式。由生成。有关time命令的详细信息,请参阅Time。%USERDOMAIN%局部返回包含用户帐户的域的名称。%USERNAME%局部返回当前登录的用户的名称。%UserPrefix%局部返回当前用户的配置文件的位置。%WINDIR%系统返回操作系统目录的位置。Ⅱ文件,目录和驱动器管理[5]DirCopy("源目录","目标目录"[,标志])复制指定目录及其所有子目录和文件(类似于xcopy命令).参数
源目录目标目录要复制的文件夹的的路径(结尾不需反斜线符号).例如:"C:Path1"要复制到的目标路径(结尾不需反斜线符号).例如:"C:Path_Copy"[可选参数]此标志参数用以决定是否覆盖已存在的文件:0=(默认)不覆盖已存在的文件1=覆盖已存在的文件标志[6]DirCreate("文件夹路径")新建一个目录/文件夹.如我们运行下面的脚本DirCreate("C:虫子樱桃")就在C盘的根目录下建立了一个以我名字命名的文件夹。在帮助文件中有这么一句话“在要创建的目录的父目录(上一级目录)不存在时,这些父目录也会被创建.”,这句话的意思是创建文件夹的上级目录若不存在,那么他的上级目录也会被自动创建。运行下面的代码:DirCreate("C:虫子樱桃思远技术论坛我们的家")无图无真相,结果如下。DirGetSize("路径"[,标志])[7][7]DirGetSize参数路径返回给点目录所占用的空间(单位字节).要得到文件大小占用的目录,例如."C:Windows".[可选参数]此标志决定了本函数的行为及结果,它的值可以是下列数值的组合(数值相加):0=(默认)1=启用扩展模式->返回一个包含扩展信息的数组(请查看下面的注意部分).2=子目录下的文件大小将不计算入内(递归模式被取消)标志返回值成功:失败:返回值>=0,占用空间的大小.返回-1,并把@error设为1,说明目标路径并不存在.注意/说明如果脚本程序被暂停则此函数也随之暂停,直到脚本恢复执行为止!在使用扩展模式时,本函数所返回的数组是个含有下列元素的一维数组:$array[0]=空间大小
$array[1]=文件数$array[2]=文件夹数我们来写一个脚本,测试下这个函数:Dim$folder$folder=DirGetSize("C:WINDOWS",1)MsgBox(0,"查询完毕","该文件夹里面共有文件"&$folder[2]&"个文件夹"&$folder[1]&"个文件,共计"&$folder[0]/(1024*1024)&"MB")再加点交互,就是我们的一个程序了-------------判断任意文件夹大小。代码如下Dim$folder,$way$way=InputBox("虫子提醒您","请输入您要查询文件夹的路径")$folder=DirGetSize($way,1)MsgBox(0,"查询完毕","该文件夹里面共有文件"&$folder[2]&"个文件夹"&$folder[1]&"个文件,共计"&$folder[0]/(1024*1024)&"MB")运行界面(呵呵,在以后的例子我就尽量不上图了,为什么?呵呵。文件体积过大。):【注意哦】1MB=1024KB=1024*1024Byte[8]DirMove("源目录","目标目录"[,标志])移动指定目录及其所有子目录和文件.参数源目录目标目录要移动的文件夹的路径(结尾不需反斜线符号).例如:"C:Path1"要移动到的目标路径(结尾不需反斜线符号).例如:"C:Path_Copy"[可选参数]此标志参数用以决定是否覆盖已存在的文件:0=(默认)不覆盖已存在的文件1=覆盖已存在的文件标志注意/说明若源目录和目标目录位于不同的卷标或UNC路径已被使用,则本函数将执行复制/删除操作而不是直接移动.
若目标目录已存在并指定了覆盖标志(参数),则源目录将被移动到目标目录里面.由于AutoIt,并没有"DirRename"(目录重命名)函数,请使用DirMove函数来重命名文件夹![9]DirRemove("路径"[,递归遍历])删除一个目录/文件夹.参数路径要删除的文件夹的路径.[可选参数]此标志参数用以决定是否删除子目录.0=(默认)不删除文件及子目录1=删除文件及子目录(类似于DOS下的DelTree命令)递归遍历[10]DriveGetDrive("类型")返回一个含有指定驱动器盘符的数组.参数要获得的驱动器类型:"ALL(全部)","CDROM(光驱)","REMOVABLE(可移动驱动器)","FIXED(固定驱动器)","NETWORK(网络驱动器)","RAMDISK(内存盘)",or"UNKNOWN(未知类型)"类型返回值成功:失败:以字符串数组的形式返回所找到的驱动器的盘符(驱动器盘符后接一个冒号).数组中的0号元素储存驱动器的数量.返回""(空字符串),并把@error设为1.[11]DriveGetFileSystem("路径")返回指定驱动器的文件系统类型.返回值成功:失败:返回值1(数字)"FAT""FAT32""NTFS""NWFS""CDFS"以字符串的形式返回指定驱动器的文件系统类型,请查看下面的列表.设置@error为1.详细信息指定驱动器没有媒体(CD,软驱,Zip等)或者媒体格式未知(RAW).通常是那些容量低于500MB的驱动器所使用的文件系统,比如软驱,内存盘,USB"笔式"驱动器等等.Windows9x/Me下的硬盘分区所使用的文件系统.WindowsNT/2000/XP下的硬盘分区所使用的文件系统.Novell网络文件服务器所使用的文件系统.通常是CD(也可能是虚拟光驱软件挂载的ISO镜像).
"UDF"通常是DVD[12]DriveGetLabel("路径")返回指定的驱动器分区的卷标(如果存在).[13]DriveGetType("路径")返回指定驱动器的类型.返回值成功:失败:返回指定驱动器的类型:"Unknown"(未知类型),"Removable"(可移动),"Fixed"(固定的),"Network"(网络),"CDROM"(光驱),"RAMDisk"(内存盘)返回""(空字符串),并将@error设为1.[14]DriveSetLabel("路径","卷标")修改指定驱动器的卷标.参数路径卷标注意/说明大多数的硬盘驱动器(分区)的卷标最长可达11个字符,因此如果指定的卷标长度超出限制则DriveSetLabel函数会出错.此外,如果目标分区的文件系统是FAT32则其卷标的所有字符会自动转换为大写字符.[15]DriveSpaceFree("路径")以MB(兆字节)为单位返回指定路径所在分区的剩余空间.参数路径返回值成功:失败:以MB(兆字节)为单位返回指定路径所在分区的剩余空间(浮点数).返回值为0,并把@error设为1.要获得相应信息的驱动器路径.目标驱动器的路径.指定驱动器的新卷标(最长11个字符)注意/说明即使给定的路径是某驱动器子目录的完整路径(必须是确实存在的)DriveSpaceFree也能计算出其所在分区的可用空间;但如果指派的是一个文件的路径则不行.如果对精确度的要求不高则可使用Round函数(四舍五入).[16]FileCopy("源文件","目标路径"[,标志])复制一个或多个文件.参数源文件目标路径要复制的文件的路径.可使用通配符.要复制到的目标路径.
标志[可选参数]此标志参数用以决定是否覆盖已存在的文件.可以是下面的这些值:0=(默认)不覆盖已存在的文件1=覆盖已存在的文件8=当目标文件夹不存在,就自动创建一个(参考注意部分).返回值成功:失败:返回值为1.返回值为0.注意/说明目标文件夹必须确实存在,除非把标志设置为8.例如组合标志'9'(1+8)覆盖存在的目标文件,并且如果目标目录结构不存在,就自动创建一个.关于通配符请查看FileFindFirstFile上的说明.一些文件属性不能替换(如只读等).[17]FileCreateNTFSLink("源路径","硬链接"[,标志])创建一个NTFS硬连接到一个文件或者文件夹.参数源路径硬链接创建硬链接的源路径.(需要连接的位置).要映射到的路径.[可选参数]这个标志决定是否覆盖已经存在的连接.可以是下面的值:0=(默认)不覆盖已经存在的连接.1=覆盖存在的连接.标志注意/说明目标目录必须已经存在.只能工作于NTFS文件系统的卷.如果源路径是一个文件,硬盘连接必须在同一分区.如果源路径是一个目录,硬盘连接可以不在同一分区.FileDelete或者FileMove可以用于硬盘连接.要管理连接可以使用NTFSLink程序.[注意哦]硬连接是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中任意一个其余的文件将不受影响。硬连接”让一个文件在多个目录下重复出现,但只占用一份文件的空间。例如,一个大小为10MB的“E:”的文件,创建一个硬连接到“E:共享文件夹”中,则两个“”文件只占用一个文件的空间(10MB),两个文件的内容当然是完全一样的。如果编辑该文件的编辑器在修改保存文件时,依然保持源文件在NTFS文件夹中的位置,那么在“E:”上所作的改动会自动反映到“E:共享文件夹”中。同理,修改了“E:共享文件夹”文件后,所作的修改也会立即反映到硬连接对应的“E:”文件。
创建硬连接之后,删除硬连接的副本(即连接点)只会将文件系统对文件数据的引用减一,只有删除所有的引用时,才真正删除文件。“硬连接”还可以用于目录,这称为“目录连接点”(Junction)。例如,可以为“C:Applications”目录创建一个硬连接到“E:共享文件夹Applications”,则两个目录共享同样的存储空间,在“C:Applications”目录中对任何文件所作的改动都会立即反映到“E:共享文件夹Applications”目录中对应的文件中去。同理,修改“E:共享文件夹Applications”目录中的文件,改动也会立即反映到“C:Applications”目录中去。对于目录连接点需要注意:目录连接点连接到原来的目录,如果将源目录删除,则其连接点将不再可用,这与文件硬连接是不同的。软连接也叫符号连接,他只是对源文件在新的位置建立一个“快捷(借用一下wondows常用词)”,所以,当源文件删除时,符号连接的文件将成为无源之水->仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。[18]FileCreateShortcut("目标文件","lnk文件"[,"工作目录"[,"参数"[,"描述"[,"图标文件"[,"快捷键"[,图标编号[,状态]]]]]]])创建指定文件的快捷方式(.lnk文件).参数目标文件lnk文件工作目录参数描述图标文件快捷键图标编号要创建快捷方式的文件的完整路径.快捷方式文件(*.lnk)的完整路径.[可选参数]工作目录(起始位置).[可选参数]额外的文件参数.[可选参数]文件描述(备注).[可选参数]要使用的图标文件的完整路径.[可选参数]快捷键,格式和Send()函数能使用的一样.[可选参数]要使用的图标编号(通常是0).[可选参数]快捷方式运行时的起始状态(运行方式).可使用@SW_SHOWNORMAL,@SW_SHOWMINNOACTIVE或@SW_SHOWMAXIMIZED状态注意/说明Windows下快捷方式的快捷键可以是这些形式:Ctrl+Alt+X,Ctrl+Shift+X,Shift+Alt+X,Ctrl+NumPadKey或Alt+NumPadKey(NumPadKey指数字键盘上的按键),其中X代表各种字母,标点符号或功能键.如果指定的快捷键不合法则Windows将视为默认的Ctrl+s把数字键盘上的按键和主键盘区上的(同符号的按键,包括数字键和标点符号键)视为不同的两种按键.此外,FileCreateShortcut函数允许用户创建快捷键为Ctrl+X或Alt+X等格式的快捷方式(而正常情况下Windows仅允许X处是数字键盘上的按键);但是,您应
该尽可能避免指派这种快捷键,因为它们很容易跟标准的应用程序快捷键冲突.Windows不允许使用ESC,ENTER,TAB,SPACEBAR(空格),PRINTSCREEN,SHIFT或BACKSPACE(退格)等按键作为快捷键.FileCreateShortcut函数并不严格要求目标文件,工作目录,图标或快捷键等参数的合法性,一般都可"成功"创建LNK文件;但LNK文件路径必须是合法的!若所选快捷键已被使用则以新建的快捷方式的快捷键为准.另外,如果要创建的快捷方式的路径文件名已存在,则将覆盖已存在的快捷方式.[19]FileDelete("路径")删除一个或多个文件.注意/说明提示:如果"路径"参数为一个文件夹,那么文件夹下面所有文件都将被删除.就像错误使用了*.*通配符.关于通配符请查看FileFindFirstFile上的说明.[19]FileExists("路径")检查指定文件或目录是否存在.返回值成功:失败:返回值为1.返回值为0,说明指定的路径/文件并不存在.[20]FileGetSize("文件名")以字节为单位返回指定文件的大小.[21]FileInstall("源文件","目标路径"[,标志])包含并装入指定文件到编译后的脚本程序中.参数要装入到编译程序中的文件的路径.文件名必须是字符串,不能是任何变量.它可以是一个相对路径(使用.或者..等在路径中)结尾带有反斜线符号的目标路径,脚本程序运行时将把嵌入文件解压到此位置.此参数接受变量.[可选参数]此标志参数用以决定是否覆盖已存在的文件:0=(默认)不覆盖已存在的文件1=覆盖已存在的文件源文件目标路径标志注意/说明FileInstall函数的用途是装入文件到编译后的AutoIt脚本程序中.这些内嵌的文件将在编译好的脚本程序运行时被"解压"出来.这里要提醒一下的就是装入某些文件如图片文件等可能会导致编译后的脚本程序大小剧增.源文件(来源文件)参数只接受字符串而不接受变量,计算式或者函数CALL,以便编译器能正确取得文件名并装入文件.源文件参数不能含有通配符.若在未编译的脚本中使用此函数则程序将执行一次文件复制操作(这样是为了方便进行预编译测试).装入的文件将保持原本的创建时间/修改时间等时间戳信息.
目标目录必须存在才能调用此函数,不然FileInstall将会失败,返回0并不会创建文件和路径.参考DirCreate()函数关于创建目录路径.已存在的文件属性可能导致函数覆盖失败.请使用FileDelete()或者FileSetAttrib()确保文件能够被覆盖.这个函数也比较常用,主要是用来把文件包含到你编译后的脚本之中,对于那种绿色软件,用这个函数可以用来做成“工具包”哦。但是对于单文件可以,对于那种有好多文件夹的绿色软件,咱们怎么办呢?呵呵。虫子一般是把所有文件夹里的内容提取出来,然后再包含到脚本之中,调用的时候,用DIRcreate建文件夹,把文件用FILECOPY之类的函数弄到文件夹里面去。下面给个例子。#Region;****参数创建于ACNWrapper_GUI****#AutoIt3Wrapper_icon=E:图标自由天空.ico#AutoIt3Wrapper_outfile=自由天空技术联盟Win7简易工具包.exe#AutoIt3Wrapper_Res_Comment=自由天空技术联盟Win7简易工具包,仅用于会员交流,请勿用于其他用途!#AutoIt3Wrapper_Res_Description=自由天空技术联盟Win7简易工具包#AutoIt3Wrapper_Res_Fileversion=简单版#AutoIt3Wrapper_Res_LegalCopyright=自由天空技术联盟#EndRegion;****参数创建于ACNWrapper_GUI****#include<3>#include<3>#include<3>#include<3>FileInstall("c:",@TempDir&"")FileInstall("c:",@TempDir&"")$Form1=GUICreate("自由天空技术联盟Win7简易工具包",319,444,394,171)$Group1=GUICtrlCreateGroup("说明",6,240,305,121)$txt="本工具主要用来方便Win7用户的使用,为自由天空技术论坛虫子樱桃收集制作。本工具集成了Win7常见的“上帝模式”快速建立功能的软件GodModeCreator。另外附加用于激活Win7的软件。本工具仅可用于自由天空技术联盟会员技术交流之用。请勿用于其他用途!"GUICtrlCreateLabel($txt,14,264,293,60)GUICtrlSetColor(-1,0x0000FF)GUICtrlCreateGroup("",-99,-99,1,1)$Button1=GUICtrlCreateButton("上帝模式生成工具",90,48,115,41)
$Button2=GUICtrlCreateButton("Win7激活工具",90,98,115,41)$Button3=GUICtrlCreateButton("退出工具包",90,157,115,41)$Label1=GUICtrlCreateLabel("自由天空技术联盟",96,384,200,180)$Label2=GUICtrlCreateLabel("",112,400,64,17)GUICtrlSetFont(-1,10,400,0,"MSSansSerif")GUICtrlSetColor(-1,0x000000)GUISetState(@SW_SHOW)While1$nMsg=GUIGetMsg()Switch$nMsgCase$GUI_EVENT_CLOSEExitCase$Button1Run(@TempDir&"")Case$Button2Run(@TempDir&"")Case$Button3TrayTip("自由天空技术联盟提示您","正在退出程序..",1000)Sleep(2300)ExitCase$Label1Run(@ComSpec&"/cstart")Case$Label2Run(@ComSpec&"/cstart")
EndSwitchWEnd[22]FileMove("源文件","目标路径"[,标志])参数源文件目标文件标志可以是下面的这些值:移动一个或多个文件要移动文件的完整路径(可使用通配符星号*).要移动到的位置(可使用通配符星号*).[可选参数]此标志参数用以决定是否覆盖已存在的文件:0=(默认)不覆盖存在的文件1=覆盖存在的文件8=如果目标文件夹不存在,就先创建(查看注意部分).注意/说明若源文件和目标文件位于不同的卷标,则本函数将执行复制/删除操作而不是直接移动.由于AutoIt并没有"FileRename"(文件重命名)函数,请使用FileMove函数来重命名文件!目标文件夹必须存在,除非使用标志值'8'.例如组合参数'9'(1+8)覆盖目标文件,当目标文件夹不存在时将会自动创建.一些文件的属性决定了文件不能被替换,如:系统,只读.等等.[23]IniDelete("文件名","字段名"[,"关键字"])从某标准配置文件(*.ini)中删除某个数值.参数文件名字段名关键字目标.ini文件路径/文件名..ini文件中的某个字段名.[可选参数]要删除的关键字.若不指定关键字则整个段的内容将被删除.使用Default关键字也许同样能用于删除字段标准INI文件结构如下:[字段名]关键字=值[24]IniRead("文件名","字段名","关键字","默认值")取某个数值.返回值成功:失败:返回指定的关键字的数值.若指定的关键字未被发现则函数将返回默认值.从某标准配置文件(*.ini)中读[25]IniReadSection("文件名","字段名")从某标准配置文件(*.ini)中读取某个节中的所有关键字或值.
返回值成功:失败:返回一个二维数组,其中element[n][0]储存着关键字而element[n][1]则储存则对应的数值.如果不能读取字段将设置@error=1(INI文件不存在或者字段不存在).本函数返回的数组元素的数量储存在零号元素$result[0][0]中.若遇到错误则该数组不会被创建.注意:只有在字段中的前32767字符可以被正常返回,用于Win9x兼容.[26]IniRenameSection("文件名","字段","新字段"[,标志])重命名INI文件里面的字段.标志[可选参数]0(默认)-当"新字段"已经存在就取消操作.1-覆盖"新字段".(如果"新字段"已经存在,就覆盖)[27]IniWrite("文件名","字段名","键名","值")写入一个值到标准格式的.ini文件.注意/说明若目标文件并不存在,则程序将自动创建该文件,键名和字段将被添加到后面部分而且并不按任何规则排列.如果写入的值含有引号,将会被自动过滤掉.要保持引号在INI中,请使用两个引号.例如:""这是一个测试""将会把"这是一个测试"储存到文件中.开头和结尾的空白将被自动过滤掉.要保持空白在文件中,字符串必须被引号包括.例如,"这是一个测试"将会储存空白符,引号会被自动过滤掉.不可能使用多行的值.[28]IniWriteSection("文件名","字段","数据"[,索引])将数据写入到标准INI文件的一个字段Ⅲ图形与声音管理[29]Beep([频率[,延迟]])参数播放beep声音(PC蜂鸣器).频率延迟[可选参数]播放频率(HZ),可以是从37到32,767的任意一个数字(0x25到0x7FFF).默认为500Hz.[可选参数]播放延迟时间(毫秒).默认=1000毫秒.这是个有趣的函数,虫子收集了两个可以用来演奏音乐的代码。分享给大家。《回到过去》#include<3>$Main_Form=GUICreate("回到过去",200,100)$Main_Form_Button_Play=GUICtrlCreateButton("开始播放",70,50,60)
GUISetState(@SW_SHOW,$Main_Form)While1$msg=GUIGetMsg()SelectCase$msg=$Main_Form_Button_Playbeep(587,100*3)beep(784,100*3)beep(880,100*3)beep(988,100*3)beep(988,200*3)beep(0,100*3)beep(988,100*3)beep(880,100*3)beep(988,100*3)beep(1047,200*3)beep(988,100*3)beep(988,100*3)beep(880,100*3)sleep(100*3)beep(880,100*3)beep(784,100*3)beep(988,100*3)beep(0,5*3)beep(988,100*3)
beep(0,5*3)beep(988,100*3)beep(0,5*3)beep(988,100*3)beep(880,100*3)beep(784,100*3)beep(740,100*3)beep(784,200*3)sleep(100*3)beep(784,100*3)beep(880,100*3)beep(784,100*3)beep(988,100*3)beep(0,5*3)beep(988,100*3)beep(0,5*3)beep(988,100*3)beep(0,5*3)beep(988,100*3)sleep(100*3)beep(587,100*3)beep(784,100*3)beep(1175,100*3)beep(0,5*3)
beep(1175,99*3)beep(988,100*3)beep(0,5*3)beep(988,100*3)beep(0,5*3)beep(987,100*3)sleep(100*3)beep(784,100*3)beep(0,5*3)beep(784,100*3)beep(880,200*3)beep(784,100*3)beep(0,5*3)beep(784,100*3)beep(0,5*3)beep(784,50*3)beep(659,50*3)beep(784,100*3)beep(659,100*3)beep(784,100*3)beep(880,100*3)sleep(100*3)beep(587,110*3)beep(784,120*3)
beep(880,130*3)beep(740,140*3)beep(784,200*3)beep(1,1*3)beep(1,1*3)Case$msg=$GUI_EVENT_CLOSEExitLoopEndSelectWEnd《两只老虎》Funcfrequency($scale,$melody="C")If$scale="0"ThenReturn0If$melody="C"ThenSwitch$scaleCase"1"Return264Case"2"Return297Case"3"Return330Case"4"Return352Case"5"
Return396Case"6"Return440Case"7"Return495EndSwitchElseIf$melody="D"ThenSwitch$scaleCase"1"Return297Case"2"Return334Case"3"Return371Case"4"Return396Case"5"Return446Case"6"Return495Case"7"Return557EndSwitchEndIf
SetError(1)EndFuncFuncbook($book,$speed=500,$melody="c")For$s=1ToStringLen($book)$frequency=frequency(StringMid($book,$s,1),$melody)If@errorThenContinueLoop$Duration=$speedSwitchStringMid($book,$s+1,1)Case"H"$frequency=frequency(StringMid($book,$s,1),$melody)*2Case"L"$frequency=frequency(StringMid($book,$s,1),$melody)/2Case"Q"$Duration=$speed/2Case"S"$Duration=$speed*2EndSwitchIf$frequency=0ThenSleep($speed)ElseBeep($frequency,$Duration)EndIfNextEndFunc
book("034505Q6Q5Q4Q315Q6Q5Q4Q3126L1026L1",300,"D")[30]SoundPlay("文件名"[,延迟])播放指定的音频文件.参数文件名要播放的音频文件名(通常是WAV或MP3格式)[可选参数]此标志参数用以决定是否等待音频文件被播放完毕才继续执行其下语句:1=等待音频文件播放完0=在播放音频文件的同时继续执行后面的语句(默认)延迟注意/说明脚本程序终止时将停止播放音频文件(如果仍在播放中的话).调用SoundPlay("")可以用于停止当前播放的声音,同时也关闭打开的句柄.如果你需要删除脚本中播放的声音文件,你应该调用SoundPlay("")确定首先关闭句柄.注:如果系统安装了第三方音频解码器,会自动调用.[31]SoundSetWaveVolume(百分比)调整系统波形音量的百分比大小.参数百分比介于0和100之间的百分比值•注意/说明本函数可控制的是波形音量,而非主音量.因此,即使设置百分比值为零也不代表静音状态在WindowsVista中,没有系统级的波形音量.这个函数只能修改脚本自己的波形音量.它不能用来改变其他程序的波形音量.ⅣGUI管理[32]函数很多,但一般可以用AU3自带的KODA图形编辑器像VB那样设计出来,所以就不多讲了。我们只是讲下怎么用KODA图形编辑器设计出简单的界面。建议大减熟悉常见函数后再看本章节内容。搞不明白的时候可以在论坛或者群里面发问。呵呵。运行AU3工具箱,呵呵,右键选择
一般我们只需要做的,只是拖一个控件,然后改caption为自己想要的名字即可。设计方法和VB,VF之类的软件类似。就不再多说了。呵呵。我觉得KODA图形编辑器的优点除了能快速建立起图形界面外,还有它能快速生成窗体各控件的响应事件,做出专业的界面,当然你还可以加载一些皮肤。让你的脚本更加漂亮。呵呵,虫子是个菜鸟,加载皮肤还没有学会,等学会了再和大家分享啦。额,说着说着就跑题了。在我们设计好界面以后,我们需要进行配置下,来生成每个控件的事件。在AU3中,事件分为两种模式。下面是摘自帮助文档的说明。•消息循环模式(Message-loop)(默认)在消息循环模式下,脚本大部分时间都在执行一个周期非常短的循环,这个循环通知GUI使用GUIGetMsg(截获消息)函数.当某个事件发生时GUIGetMsg函数把消息作为返回数值返回(比如某个按钮被按下,GUI被关闭,等等).在此模式下,只有当我们频繁地使用GUIGetMsg函数时才有可能接收到事件,因此您必须确保在每一秒内都有数次调用该函数,否则您的GUI将无法响应事件.这一模式最适合用于那些以GUI为重点的脚本中,并且您最关心的就是等待用户事件.事件模式(OnEvent)在OnEvent模式下,脚本并不需要频繁地要求GUI检查是否有任何事件发生(并根据返回信息处理事件),而是仅当某个事件发生时GUI才临时性暂停脚本并调用一个用户预定义的函数来处理该事件.例如,假定用户点击了按钮1则GUI将暂停主脚本并调用某个预定义的用户函数来处理按钮1事件.当该函数完成处理操作后才回到主脚本继续执行.这个模式比较类似VisualBasic的窗体方法.这一模式最适合用于那些GUI处于第二重要地位的脚本中,并且您的脚本需要优先执行其它任务.简单来说,两种模式就是以下几种样板。A消息循环模式•#include<3>GUICreate("思远技术论坛",200,100)GUICtrlCreateLabel("你好!欢迎来到思远论坛!",30,10)$okbutton=GUICtrlCreateButton("确定",70,50,60)GUISetState(@SW_SHOW)While1$msg=GUIGetMsg()Select
Case$msg=$okbuttonMsgBox(0,"GUI事件","您按下了[确定]按钮!")Case$msg=$GUI_EVENT_CLOSEMsgBox(0,"GUI事件","您选择了关闭!正在退出...")ExitLoopEndSelectWEndB事件模式#include<3>Opt("GUIOnEventMode",1);ChangetoOnEventmode$mainwindow=GUICreate("思远技术论坛",200,100)GUISetOnEvent($GUI_EVENT_CLOSE,"CLOSEClicked")GUICtrlCreateLabel("您好,欢迎来到思远论坛!",30,10)$okbutton=GUICtrlCreateButton("确定",70,50,60)GUICtrlSetOnEvent($okbutton,"OKButton")GUISetState(@SW_SHOW)While1Sleep(1000);IdlearoundWEndFuncOKButton();Note:atthispoint@GUI_CTRLIDwouldequal$okbutton,;and@GUI_WINHANDLEwouldequal$mainwindowMsgBox(0,"GUI事件","您按下了[确定]按钮!")EndFuncFuncCLOSEClicked();Note:atthispoint@GUI_CTRLIDwouldequal$GUI_EVENT_CLOSE,;and@GUI_WINHANDLEwouldequal$mainwindowMsgBox(0,"GUIEvent","")ExitEndFunc也许现在还看不懂,没有关系,只要我们加油!终有一天会看懂的。下面说下怎么利用KODA图形编辑器快速生成两种模式的代码。下面是我随便拖出来的窗体。
我一般选第二个,选中后,单击保存与生成,呵呵。你设计的界面就以代码形式出现了。例如,本例中,我拖的窗体的代码就是下面的这个:#include<3>#include<3>#include<3>#include<3>#Region###STARTKodaGUIsection###Form=$Form1=GUICreate("思远技术论坛",507,191,192,124)
$Button1=GUICtrlCreateButton("退出",80,40,75,41)$Button2=GUICtrlCreateButton("访问思远技术论坛",232,40,107,41)GUISetState(@SW_SHOW)#EndRegion###ENDKodaGUIsection###While1$nMsg=GUIGetMsg()Switch$nMsgCase$GUI_EVENT_CLOSEExitCase$Form1Case$Form1Case$Form1Case$Form1Case$Button1Case$Button2EndSwitchWEnd呵呵,接下来,我们把这个代码拷贝,保存为AU3文件,为每个case下面加上动作,由于用不了那么多,我门只需要给$button1he和$button1加上动作即可。哈哈,其他那些,要是你觉得碍眼,可以直接删除掉。我修改后的代码如下:#include<3>#include<3>#include<3>#include<3>#Region###STARTKodaGUIsection###Form=$Form1=GUICreate("思远技术论坛",507,191,192,124)$Button1=GUICtrlCreateButton("退出",80,40,75,41)$Button2=GUICtrlCreateButton("访问思远技术论坛",232,40,107,41)GUISetState(@SW_SHOW)#EndRegion###ENDKodaGUIsection###While1$nMsg=GUIGetMsg()Switch$nMsgCase$GUI_EVENT_CLOSEExitCase$Button1MsgBox(0,"虫子提示您","您按了退出")ExitCase$Button2Run(@ComSpec&"/")EndSwitchWEnd运行下
好了,今天就说到这,大家慢慢体会吧。呵呵。Ⅴ键盘控制管理[33]HotKeySet("热键"[,"函数名"])设置一个可调用某用户函数的热键.注意/说明如果有两个AutoIt脚本设置了同样的热键,您应该避免同时运行这两个脚本程序(否则第二个脚本将无法捕获热键,除非第一个脚本终止运行或在第二个脚本设置热键前撤销了冲突热键).用户按下热键后*通常会*中断当前运行中的AutoIt函数/语句,并运行该热键关联的用户函数,直到其完成操作或被中断为止.当然也会有些例外:1)如果当前(运行的)函数是个"阻断型(blocking)"函数,则键击动作将被缓冲并等待该阻断型函数完成操作后才继续执行.MsgBox和FileSelectFolder就是典型的阻断型函数.您可以试试在下面示例脚本中定义的热键Shift-Alt-d.2)如果您在AutoIt的托盘菜单上选择了暂停脚本则任何在暂停期间按下的热键都将被忽略.不能设置的热键:Ctrl+Alt+DeleteF12小键盘上的Enter(回车)键由Windows系统保留也是由Windows保留,涉及到API.使用{Enter}即可同时捕获主键盘和小键盘上的回车键.Win+B,D,E,F,L,M,R,U;以及这些都是Windows内置的快捷键.Note:Win+B和Win+L仅
Win+Shift+MAlt,Ctrl,Shift,Win由WindowsXP以上系统保留.这些都是辅助按键!任何由第三方软件定义的全局热键、任何由两个或更多"基键"组成的热键'{F1}{F2}',任何型如'{LALT}'或'{ALTDOWN}'的按键.其它在设置了一个热键后,AutoIt将尝试捕获指定按键事件但并不会把它传递到激活程序中,不过也有一个例外:按下Lock键(包括NumLock、CapsLock和ScrollLock)在任何时候都将切换其相应状态!如果希望把捕获的热键事件发送到激活程序中,您就必须先注销该热键然后再调用Send或ControlSend函数:;捕获并传递按键事件HotKeySet("{Esc}","captureEsc")FunccaptureEsc();这里可定义要做的各种任务HotKeySet("{Esc}")Send("{Esc}")HotKeySet("{Esc}","captureEsc")EndFunc要调用一个函数不能给函数加上参数.它将会被忽略.[33]Send("按键"[,标志])向激活窗口发送模拟键击操作."Send"命令的语法跟ScriptIt以及VisualBasic的"SendKeys"命令类似.字符序列将按原文发送,但下列字符除外:'!'表示告知AutoIt要发送一个ALT键击动作,因此语句Send("Thisistext!a")的意思是按序发送按键"Thisistext"然后在按下"ALT+a".有些程序对大小写字符和ALT键相当挑剔,举例来说,"!A"可能会被认为不同于"!a";第一个代表ALT+SHIFT+A,而第二个则代表ALT+a.如果拿不准的话最好使用小写!'+'表示告知AutoIt要发送一个SHIFT键击动作,因此语句Send("Hell+o")的意思是按序发送按键"HellO".Send("!+a")表示发送"ALT+SHIFT+a".'^'表示告知AutoIt要发送一个CONTROL键击动作,因此语句Send("^!a")的意思是发送按键"CTRL+ALT+a".有些程序对大小写字符和CTRL键相当挑剔,举例来说,"^A"可能会被认为不同于"^a";第一个代表CTRL+SHIFT+A,而第二个则代表CTRL+a.如果拿不准的话最好使用小写!
'#'井号将发送一个Windows徽标键,因此语句Send("#r")将发送Win+r,这将打开“运行”对话框.您可以通过设置SendCapslockMode从而在Send函数开始操作前关闭大小写切换键(大写锁,CAPSLOCK)并在完成操作后恢复.但是,如果在Send函数开始执行的时候用户就按住Shift键,那么发送的文本可能会是小写字符.一个解决办法是在每次执行其它Send操作前使用语句Send("{SHIFTDOWN}{SHIFTUP}").某些键盘(如捷克语)发送按下SHIFT键时或者CAPLOCK(大写锁定)开启时发送不同的字符(大小写时)可能不工作.因为AUTOIT在CAPSLOCK(大写锁定)开启时发送小写字符得到的却是大写(这是常识):Windows不允许模拟"CTRL-ALT-DEL"组合键Send命令(无标志参数){!}{#}{+}{^}{{}{}}{SPACE}{ENTER}{ALT}{BACKSPACE}/{BS}{DELETE}/{DEL}{UP}{DOWN}{LEFT}{RIGHT}{HOME}{END}键击结果!#+^{}空格主键盘区的回车键ALT退格删除向上箭头向下箭头向左箭头向右箭头HOMEEND
{ESCAPE}/{ESC}{INSERT}/{INS}{PGUP}{PGDN}{F1}-{F12}{TAB}{PRINTSCREEN}{LWIN}{RWIN}{NUMLOCKon}{CAPSLOCKoff}{SCROLLLOCKtoggle}{BREAK}{PAUSE}{NUMPAD0}-{NUMPAD9}{NUMPADMULT}{NUMPADADD}{NUMPADSUB}{NUMPADDIV}{NUMPADDOT}{NUMPADENTER}{APPSKEY}{LALT}{RALT}{LCTRL}{RCTRL}{LSHIFT}{RSHIFT}{SLEEP}{ALTDOWN}ESC键INSPageUpPageDown功能键TABPrintScreen键左徽标键右徽标键NUMLOCK(on/off/toggle)CAPSLOCK(on/off/toggle)SCROLLLOCK(on/off/toggle)forCtrl+BreakprocessingPAUSE数字键盘上的数字键数字键盘上的乘号数字键盘上的加号数字键盘上的减号数字键盘上的除号数字键盘上的点号数字键盘上的回车键Windows应用程序键左ALT键右ALT键右CTRL键右CTRL键左Shift键右Shift键系统休眠(SLEEP)键按住ALT键直到发送{ALTUP}为止
{SHIFTDOWN}{CTRLDOWN}{LWINDOWN}{RWINDOWN}{ASCnnnn}{BROWSER_BACK}{BROWSER_FORWARD}{BROWSER_REFRESH}{BROWSER_STOP}{BROWSER_SEARCH}{BROWSER_FAVORITES}{BROWSER_HOME}{VOLUME_MUTE}{VOLUME_DOWN}{VOLUME_UP}{MEDIA_NEXT}{MEDIA_PREV}{MEDIA_STOP}{MEDIA_PLAY_PAUSE}{LAUNCH_MAIL}{LAUNCH_MEDIA}{LAUNCH_APP1}{LAUNCH_APP2}按住SHIFT键直到发送{SHIFTUP}为止按住CTRL键直到发送{CTRLUP}为止按住左徽标键直到发送{LWINUP}为止按住右徽标键直到发送{RWINUP}为止发送ALT+nnnn组合键仅支持2000/XP:按下浏览器中的"后退"按钮仅支持2000/XP:按下浏览器中的"前进"按钮仅支持2000/XP:按下浏览器中的"刷新"按钮仅支持2000/XP:按下浏览器中的"停止"按钮仅支持2000/XP:按下浏览器中的"搜索"按钮仅支持2000/XP:按下浏览器中的"收藏夹"按钮仅支持2000/XP:运行浏览器并转到主页仅支持2000/XP:切换系统静音状态仅支持2000/XP:减小系统音量仅支持2000/XP:增大系统音量仅支持2000/XP:在播放器中选择播放下一个轨道(影音媒体)仅支持2000/XP:在播放器中选择播放上一个轨道仅支持2000/XP:使播放器停止播放仅支持2000/XP:使播放器播放/暂停仅支持2000/XP:运行邮件客户端程序仅支持2000/XP:运行媒体播放器仅支持2000/XP:运行用户程序1仅支持2000/XP:运行用户程序2如果要发送ASCII字符A则参考下例(相当于ALT+065,按住ALT键并在数字键盘上顺序按下065)Send("{ASC065}")(在使用两位数的ASCII码时必须在前面加一个0,否则将使用437号代码页).如果要发送UNICODE字符则输入该字符代码,例如下例将发送一个中文字符Send("{ASC2709}")orSend("{ASC0xA95}")
可参考下例重复发送某按键.Send("{DEL4}");连续4次按下DEL键Send("{S30}");发送30个字符"S"Send("+{TAB4}");连续4次按下SHIFT+TABThekeywillbesendatleastonceevenifthecountiszero.如果要按住(保持按下状态)某个按键(通常用于游戏中)Send("{adown}");按住按键ASend("{aup}");松开按键A如果要改变capslock,numlock和scrolllock键的状态,可参考下例:Send("{NumLockon}");打开NumLockSend("{CapsLockoff}");关闭CapsLockSend("{ScrollLocktoggle}");切换ScrollLock的状态如果要用变量来指定重复发送的次数,参考下例:$n=4Send("+{TAB"&$n&"}")如果要用变量来指定要重复发送的ASCII字符(比如A),参考下例:$x=Chr(65)Send("{"&$x&"4}")大多数笔记本电脑的键盘上都会有一个特殊的Fn键,此键无法被模拟.若把标志参数的值设为1则"按键"参数将被原样发送.如果某些文本是从变量里拷贝而来,而您又希望完全按原样发送这些文本的话,就应该使用这一设置.例如,先打开文件夹选项窗口(位于控制面板),然后请尝试执行下面这些语句:Send("{TAB}")Send("+{TAB}")Send("^{TAB}")Send("^+{TAB}")Send("{SPACE}")Send("{+}")Send("{-}")Send("{NumPadMult}")切换到(焦点切换)下一个控件(按钮、复选框等)切换到上一个控件.切换到下一个窗口标签切换到上一个窗口标签.可用来切换复选框的选中状态或点击某个按钮.通常用来选中某个复选框(如果它"确实是"复选框的话)通常用来取消选中某个复选框.完全展开SysTreeView32控件内显示的文件夹.
组合Alt键使用可访问菜单项,请打开记事本窗口然后尝试执行下面这些语句:Send("!f")表示发送Alt+f,这是打开记事本的文件菜单的快捷键,您还可以试试其它的!Send("{DOWN}")Send("{UP}")Send("{LEFT}")Send("{RIGHT}")移动焦点到下一个菜单项.移动焦点到上一个菜单项.切换到左边的菜单或收缩子菜单.切换到右边的菜单或展开子菜单.如果您对快捷键(Alt+F4,PrintScreen,Ctrl+C等等)的重要性还不太了解,请查看Windows的帮助信息(按下热键Win+F1即可)以获得关于快捷键的完整列表.[注意哦]这是AU3中一个最常用的函数,一般我们用这个函数来模拟按键,实现软件的自动安装。在这里就不得不讲一个工具“窗口信息工具”。找了点资料。供参考。AutoIt窗口信息工具--控件(Controls)AutoItv3的其中一个最优秀的新功能就是提供了直接操作某些窗口控件的支持。我们在窗口上能看到的东西大多都是以下控件的一种:按钮、列表框、文本编辑框、静态文本等。比如说系统自带的记事本程序的主窗口也不过只是一个相对而言比较大一点的“编辑框(Edit)”控件罢了!正因为AutoIt提供了直接对控件操作的途径,我们再也不需要(也不应该)使用模拟键击等低级的方法来操作窗口了。注意:AutoIt仅支持标准的Microsoft控件-有些应用程序(的作者)自己写的自定义控件看起来很像是标准的MS控件,但却无法被脚本程序识别,那就只能靠您的经验判断了,实践出真理!运行AutoItWindowInfo之后您可以试着把鼠标移动到自己感兴趣的窗口上,在WindowInfo的窗口就会显示当前鼠标经过的控件的信息。这些信息包括:••••控件ID(ControlID)类别名(ClassNameNN)文本(Text)控件句柄(HWND)(这个不能利用AutoItWindowInfo获得,获得方法请看下文)如果你看到某个()函数要求提供控件ID(ControlID)作为参数(实际上大部分控件函数都需要此参数),那么您就可以使用这些信息中的任意一种来作为参数传递到函数中。具体使用哪一种方法其实主要看您的个人喜好以及从AutoItWindowInfo中能获得的信息类型,一般而言,最好的方法就是使用控件ID(ControlID),但如果控件ID无法获得或者是靠控件ID还不足以保证能识别目标控件(比如说同时有几个控件ID相同的控件存在,这种情况通常发生在静态文本控件上),那么就需要换为另外的三种方法之一了。控件ID(ControlID)控件ID是指Windows指定给每个控件的数值型标识符(实际上就是整数值)。通常这是用来识别控件的最好的方法。除了AutoItWindowInfo之外,还有其他的应用程序比如某些给盲人用的读屏软件或者其它使用MicrosoftAPI写的工具也能获得控件ID。类别名(ClassNameNN)
每个标准的Microsoft控件都具有“类别名”,比如“button(按钮)”或者“edit(编辑框)”等等。在AutoIt中还把它跟该控件的“实例”组合起来,并称为“ClassNameNN”。比如说某个对话框的上面有三个按钮,则通常它们的“ClassNameNN”就是"Button1","Button2","Button3"如此之类。当控件ID不适用的时候就可以考虑使用这个方法(这种情况通常发生在静态文本控件上)。文本(Text)也许你也注意到AU3Info(AutoItWindowInfo)还给出了控件上的文本信息,例如某个按钮Next则在AU3Info上看到的就是&Next(“&”号表示后面跟着的字符将带有下划线,其实我们还能在菜单和其它控件上发现这个符号)。如果您喜欢的话也可以用这些文本代替“ClassNameNN”来识别控件,但是如果有多个控件的文本都相同的话可就有麻烦了。控件句柄(ControlHandle(HWND))如果要获得某个控件的句柄则可使用ControlGetHandle函数。控件句柄是Windows赋予控件的(独一无二的)标识符。每个被创建的控件都具有不同的句柄。用户在使用控件句柄来对控件操作之前应该确定自己对句柄是非常熟悉的。请到这里函数说明(FunctionReference)窗口管理(WindowManagement)控件(Controls)查看控件函数的说明。以下转自SXD的博客3窗口信息工具的使用-基础篇默认分类2010-02-2722:16:17阅读140评论2字号:大中小今天我们来讲一下AU3的一个基本而又重要的功能,自动控制.所谓的自动控制就是我们通过编写AU3程序来让AU3代替我们去自动做一些事情(知道按键精灵的同学应该理解把)现在,先在桌面上新建一个文本文档,我想让AU3帮我用鼠标双击打开他,既然要用到鼠标,那我们肯定是使用鼠标相关的函数,通过查找帮助文件,我们发现函数参考分类(AU3所有的内置函数都在这里了)下有一个鼠标管理分类,里面都是鼠标相关操作,继续看,我们发现了MouseClick,鼠标点击,ok就是他了.我们来看他的函数说明
MouseClick("按钮"[,X坐标,Y坐标[,点击次数[,速度]]])我们可以看到除了第一个参数以外,其他都是可选参数,也就是说你不给出方括号内的参数,函数也能工作MouseClick("left")如果只这样写,也可以通过编译,执行.意思是在鼠标当前位置点击一下左键,这显然不能满足我们的要求,我们想AU3去双击我们的新建文本文档.看第二第三个参数,X坐标,Y坐标.相信顺利通过九年制义务教育的同学都知道,坐标就是通过X坐标和Y坐标来确定的,那么我们怎么知道我们的新建文本文档的坐标是多少呢这时候我们在AU3安装目录里打开工具(也可以在AU3工具箱内打开),这时候打开了窗口信息
这时候鼠标点住,查询工具的准星拖动鼠标至新建文本文档上,松开鼠标然后点击窗口信息工具的鼠标页这时候我们看到鼠标页里的坐标属性已经有值了,这就是我们刚才取的新建文本文档在我们电脑屏幕上的坐标,当然你的文档在桌面上的位置和我不同,所以这里的值也会不同.得到了他的位置我们就可以去点击他了.MouseClick('left',110,571)我们运行了一下后发现,只是选中了新建文本文档,而不是我们想要的双击打开,这时候我们发现了第四个参数,"点击次数".MouseClick('left',110,571,2)再运行,终于成功的双击打开了新建文本文档了.到此我们的需求就算实现了,但是实现结果是鼠标飘过去然后点击.似乎我们并不想这样,我们需要鼠标直接去点击.我们来看MouseClick的最后一个参数"移动速度",那这个速度到底应该怎么设置呢,我们来看参数说明:
[可选参数]鼠标移动速度,可设数值范围在1(最快)和100(最慢)之间.若设置速度为0则立即移动鼠标到指定位置.默认速度为10.通过说明我们可以了解到,如何我们需要鼠标立即移动过去就设置为lick('left',110,571,2,0)运行一下后发现只有一个字爽.至此我们已经完成一个解决需求的完整流程:产生需求-->分析需求-->组织思路-->根据思路寻找函数-->根据函数说明设置参数完成思路-->修改已经完成的程序达到更好的效果.虽然只有一句代码,但是以上的文章却已经从无到有的详细解释了一边,希望大家可以学习到这种方法,而不是直接复制一些代码去实现某些功能,学会了方法,任何需求都可以简单的应对.AU3窗口信息工具的使用-高级篇1默认分类2010-03-1423:38:54阅读182评论4字号:大中小在上一篇里,我们成功的通过AU3控制鼠标打开了一个文本文件,现在我们想往这个文本文件里输入一些文字.在'函数参考'中的'键盘控制管理'分类中我们找到了Send函数.现在我们打开一个'新建文本文档'们想用AU3来帮我们输入一些文字.,我新建一个脚本,写上:Send("我是用AU3打出来的!")
本文发布于:2024-02-08 09:15:59,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170735495967148.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |