李笑来AU3入门教程.docx
《李笑来AU3入门教程.docx》由会员分享,可在线阅读,更多相关《李笑来AU3入门教程.docx(50页珍藏版)》请在冰豆网上搜索。
李笑来AU3入门教程
1.搭建并熟悉基本环境
by李笑来
inAuto-It
1.下载并安装AutoItv3
AutoItv3的官方下载页面地址:
AutoItV3的安装文件下载地址:
AutoItv3的安装过程中,有一个选项需要注意:
建议选择”Editthescript“
这个页面是在设置在Windows资源管理器中双击.au3文件时的默认行为。
最好选择“Editthescript”。
早晚你会清楚,对于写程序的人来说,更多是在“Edit”而不是“Run”;另外,这也可以避免将来你“意外”执行了某个你并不想执行的AutoIt程序。
在其它的安装向导页面中一律直接按“Next>”键,直至安装完毕。
2.下载并安装SciTE4AutoIt3
尽管autoit-v3-setup.exe中已经默认安装了一个简版的SciTE,但是最好还是去下载一个专门为AutoIt定制的SciTE4AutoIt3,其安装文件下载地址为:
在它的安装向导页面中一律按“Next>”键,直至安装完毕。
3.修改一项Windows的默认设置
另外,Windows资源管理器中的默认设置之一是“隐藏已知文件类型的扩展名”[1],你最好将它改为“显示已知类性文件的扩展名”。
否则你将来仅通过文件名(无扩展名)和图标,根本无法分辨某个文件究竟是.au3源文件还是由.au3编译为.exe的可执行文件。
至于如何修改这个选项,请用Google搜索(早晚你会明白善用Google多么重要;不懂用Google多么可怜):
∙如果你使用的是中文版Windows请点这个链接:
隐藏已知文件类型的扩展名site:
∙如果你使用的是英文版Windows请点这个链接Donotshowhiddenfilesandfolderssite:
4.创建au3文件
AutoItv3的程序代码其实就是纯文本文件,你甚至可以用Windows自带的“记事本”程序(Notepad)编辑代码,而后保存为“.au3”文件(而非记事本程序默认的.txt文件)。
另外,我们也可以在Windows资源管理器里的任何位置(比如桌面上)点鼠标右键,即可以看到一个“New>AutoItV3Script”的菜单:
新建AutoItScript
5.修改“新建模板”
刚刚安装AutoItv3之后,在资源管理器里,通过点鼠标右键而后选择“New>AutoItv3Script”所创建的.au3文件里,都有一些预设的信息:
新建文件中的预设信息……
这些信息是可以修改的──它们都保存在“C:
\Windows\ShellNew\Template.au3”文件之内。
事实上,每个用户都有修改它的冲动。
比如,你很可能想把“myName”替换为你的名字。
而早晚你也会发现你有修改它的必要。
打开Windows资源管理器,浏览至“C:
\Windows\ShellNew”目录,在“Template.au3”文件的图标上点鼠标右键,选择“EditScript”,即可打开SciTE编辑器,编辑其中的内容……(我最初的做法是直接删除所有内容,因为我每次只想要一个空白文档……)
6.控制台输出窗口
最初使用SciTE的时候,它的“控制台输出窗口”是被“最小化”了的,你要把它的区域变得足够大,将来干起活来才方便。
放大控制台输出窗口
7.SciTE编辑器常用功能
SciTE是一款非常优秀的开源免费程序代码编辑器,理论上它支持所有的编程语言编辑(反正所有的程序代码基本上都保存为文本文件,只不过是尾缀各不相同而已)。
SciTE具备一切现代程序代码编辑器常用的功能,比如关键字高亮,代码自动补全,随文帮助等等。
请尝试着输入以下一行代码:
ConsoleWrite("Hello!
")
在输入“ConsoleWrite”的过程中,光标下方会出现一个提醒框;在你刚刚输入一个小写“c”的时候,屏幕显示是这样的:
再接着输入一个小写字母“o”,屏幕显示是这样的:
现在,你所需要输入的“ConsoleWrite”已经在“视野之中”了;你只需要按“下方向键”将蓝色条挪动到“ConsoleWrite”之上,
而后按回车键(Enter),刚刚你说输入的两个字母“co”就会被替换成大小写工整的ConsoleWrite:
现在,再输入一个左括号:
在光标的下方,可以看到该函数的简明介绍。
(注意:
暂且不要管“函数”是什么,也别管那简明介绍的内容究竟是什么意思……)
现在,再把光标挪回ConsoleWrite这一串字符中的任何一处,而后按F1键试试看。
SciTE会打开AutoIt的帮助文件,而后自动定位到“ConsoleWrite”这个函数的文档页面。
随文帮助功能
另外,SciTE还支持变量自动补全(再次,暂时不要管“变量”是什么)。
只要之前用到过的变量,它都会“光标跟随自动补全”:
变量的光标跟随自动补全功能
到此为止,你什么都没学会,倒是做了一堆事情。
脑子里是一堆问号:
“文本文件究竟是什么?
”、“变量是什么?
”,“函数是什么?
”……别急,急也没用,一点一点来就是了。
放心好了,这一切也许看起来很复杂,可实际上根本没有那么难。
另外,yonken将AutoIt3.1.1版本的帮助文件翻译成了中文,可以在网络上找到,其中一个可用的下载地址是:
可事实上,我希望这个教程的读者有初中以上的英语水平,能够阅读一些简单的英文文档。
计算机的帮助文件(以及其它相关文档)中所使用的是极为简单、极为格式化的英语,很容易读懂,不会有过难的语法现象;遇到生词查词典就是了。
将来你就会知道,所谓的编程工作中,1/3以上的时间是在阅读各种各样的文档;1/3以上的时间是在寻找相关的、且详尽的文档;剩下的有1/3不到的时间里,绝大部分在除错;如果代码量大到一定程度,那么还要花越来越长的时间写文档……其实只有极少的时间在写代码,与常人想象得恰恰相反,这其实很可能是整体工作量之中最没有技术含量的部分。
所以,必须从一开始就习惯大量阅读英文文档──这才是真正的基本功。
还有一个必须从一开始就适应阅读英文文档的原因在于,翻译过来的文档很可能有差错的同时,又总是来得慢一拍。
所以,我并不推荐你使用AutoIt中文版帮助。
作业
硬着头皮把AutoIt帮助文件中的两个章节读完(要精读,不论是否能够读懂──也就是说,即便读不懂(也当然不可能完全读懂),也要一个字不差地读完):
∙LanguageReference
∙Keyword/StatementReference
AutoIt教程:
2.最基本的概念
by李笑来on2010/04/29
inAuto-It
学习的一个秘密是:
无论什么东西,不一定非要先搞懂,而是可以先随便试试,胡乱用用。
年纪越大的人,越害怕“随便试试”;面对陌生的环境,越坚信自己还不懂,甚至不可能懂,宁可“无为而治”……
新建一个AutoIt文件,将其命名为Testing1.au3,输入以下代码:
$a=100
$b=100
$c=$a+$b
ConsoleWrite($c)
而后按F5键查看运行结果:
注意红框中的内容(点击上图看大图)
再新建一个AutoIt文件,将其命名为Testing2.au3,输入以下代码:
$s1="AutoIt"
$s2="Script"
$s3=$s1&$s2
ConsoleWrite($s3)
而后按F5键查看运行结果:
注意红框中的内容(点击上图看大图)
再新建一个AutoIt文件,将其命名为Testing3.au3,输入以下代码:
$b1=True
$b2=False
$b3=$b1And$b2
ConsoleWrite($b3)
$b4=$b1Or$b2
ConsoleWrite($b4)
而后按F5键查看运行结果:
注意红框中的内容(点击上图看大图)
计算机最擅长干的事(之一)当然是“计算”,不过,在编程语言里,我们更多使用“运算”这个术语,而不是“计算”,因为在自然语言中,“计算”这个动词的对象往往仅限于“数字”,而程序所要处理的“计算对象”,除了数字之外,还有很多种。
比如,你刚刚试过的三段代码,分别是数值运算、字符串运算,和逻辑运算。
1.“变量”(Variable)
在AutoIt中,“$”符号用来标识变量。
变量(variables)是用来保存数据(data)的,比如用来保存一个数值(digit),或者一个字符串(string),或者一个逻辑值(也称布林值,boolean)。
所以,一个变量由以下三个部分构成:
∙变量名(name)
∙变量类型(type)
∙变量值(value)
比如,
∙在Testing1.au3中,$a这个变量,它的名称是“$a”,类型是“数值”,值是“100“
∙在Testing2.au3中,$s1这个变量,它的名称是“$s1”,类型是“字符串”,值是“AutoIt”
∙在Testing3.au3中,$b1这个变量,它的名称是“$b1”,类型是“字符串”,值是“True”
在AutoIt中,
∙变量必须以“$”开头做为标识
∙变量名的第一个字符必须是大小写字母或者下划线,其它部分还可以由数字构成
2.运算符(Operator)
计算数值的运算符很直观:
∙加:
+
∙减:
-
∙乘:
*
∙除:
/
∙幂:
^
字符串的运算符最常用的只有一个:
∙合并:
&
逻辑运算符包括
∙与:
And
∙或:
Or
∙非:
Not
∙等于:
==
∙不等于:
<>
∙大于:
>
∙大于等于:
>=
∙小于:
<
∙小于等于:
<=
3.表达式(Expression)
表达式由变量(或“值”)与运算符构成。
最终,每个合法的表达式都有运算结果,可被保存为某个变量的值。
在这一行代码中:
$c=$a+$b
“$a+$b”就是一个表达式,它由两个变量($a、$b,它们各自已经拥有一个“数值类型”的“值”)和一个运算符(+)构成。
最终,这个表达式的值是200,该行代码执行过后,这个值(200)被保存到变量$c之中,即,从此之后,变量$c的值为200。
4.赋值(Assignment)
$a=100
或者
$c=$a+$b
看起来非常直观,可其中也有需要认真处理的细节。
新建一个AutoIt文件,将其命名为Testing4.au3,输入以下代码:
$a=100
$b=100
$c=$a+$b+$c
ConsoleWrite($c)
而后按F5键查看运行结果:
这一次,出错了……
SciTE提醒你,第3行第18个字符处(3,18)出了问题:
WARNING:
$c:
possiblyusedbeforedeclaration.
表达式中的任何变量,必须拥有“值”才能够参与运算。
在这一行代码执行之前,我们并没有定义$c这个变量的值,所以它无法参与运算──于是SciTE报错了。
让我们重新来过,新建一个AutoIt文件,将其命名为Testing5.au3,输入以下代码(这一次,不要急于按F5运行代码,先用脑子演练一番):
$a=100
$b=100
$c=$a+$b
$c=$a+$b+$c
ConsoleWrite($c)
这一次,这段代码中的每一个表达式中的每一个变量都有值。
∙第1行代码执行过后,变量$a的值为100;
∙第2行代码执行过后,变量$b的值为100;
∙第3行代码执行过后,变量$c的值为100+100,即,200;
∙……
现在,既是难点又是要点的东西来了:
“=”的意义。
这个平时被我们称为等号的符号是绝大多数新手所能遇到的第一个真正的障碍。
注意:
在程序代码中,“=”这个符号,并不对应这自然语言中的“等于”──在程序代码中,我们就不应该称它为“等号”!
“=”这个符号的意义用自然语言准确表述是这样的(稍微有点啰唆):
把它右边的表达式的运算结果保存为它左边的变量值。
也就是说,到了第4行代码,AutoIt编译器(又是一个暂时无需深入了解的概念)先去计算等号右边的表达式,$a+$b+$c,相当于100+100+200,即,最终结果为400;而后,把这个结果保存到$c中去,也就是说,在这一行代码结束之后,变量$c的值变了:
不再是原来第3行结束之时的200,而是400了。
现在,你可以按一下F5查看一下结果了……
为了避免歧义与误解,我们最好称“=”为赋值符号。
很多人嫌麻烦,“固执”地把“=”称为“等号”,而将来因此造成无数的麻烦以及相当不堪的后果……最可怜的是,当麻烦降临,后果不堪设想之时,他们全然不知根源竟然在这么个不起眼的地方。
AutoIt教程:
3.循环
by李笑来on2010/04/30
inAuto-It
尽管我从不相信速成,但也知道有些事情必须速战速决。
事实上,我一直在忽略一些(其实非常重要的)细节,带着读者向前向前向前……这并不是想要囫囵吞枣,而是为了尽快有个“概览”,而后再重新来过。
反刍,也是学习的诀窍之一。
计算机的另外一个长项是“不厌其烦”,无论你让它做什么,只要
∙你要求的是它确实能做的(比如它不大可能每天定时煎两个荷包蛋给你);
∙你说得足够清楚(程序正确无误);
那么它就会百分百照做,并且绝不怕重复——你让它做多少遍它就做多少遍。
我们小时候都计算过1+2+3…+10等于55;并且那时候我们还学过所谓的“优化算法”,
1+10=11
2+9=11
3+8=11
4+7=11
5+6=11
所以,只需要算5×11等于多少就可以了。
有了编程能力之后,你可以无需任何“优化算法”[1],迅速得知1+2+3…+n等于多少,无论n是多少……
现在,请分别建立以下三个文件,输入相应的代码,分别执行,查看结果。
Testing6.au3
$r=0
For$i=1To256
$r=$r+$i
Next
ConsoleWrite($r)
Testing7.au3
$r=0
$i=1
While$i<=256
$r=$r+$i
$i=$i+1
WEnd
ConsoleWrite($r)
Testing8.au3
$r=0
$i=1
Do
$r=$r+$i
$i=$i+1
Until$i>256
ConsoleWrite($r)
这三个程序的输出结果都是一样的,它们都在计算从1加到256的结果是多少:
32896(=1+2+3…+256)。
先让我们看看Testing6.au3的代码。
∙第1行,变量$r被设置了一个“初始值”,0。
∙第2行至第4行,For…Next,是一个循环结构。
在循环的过程中,变量$i的值从1开始依次递增,变为2、3、4…直至256为止。
此后才会接着执行第5行代码。
∙第3行代码处于循环结构之中,
o第一次执行的时候,$r=$r+1(这次$i的值是1);所以,$r=0+1,即,在这行代码执行过后,变量$r的值变成了1;
o第二次执行的时候,$r=$r+2(这次$i的值是2);所以,$r=1+2,即,在这行代码执行过后,变量$r的值变成了3;
o第二次执行的时候,$r=$r+3(这次$i的值是3);所以,$r=3+3,即,在这行代码执行过后,变量$r的值变成了6;
o以此类推……
o直至$i的值递增为256之时,之前的$r的值再次被加上256之后,循环至此结束
∙执行Next语句之后的代码,即第5行代码——输出结果,32896。
而Testing7.au3和Testing8.au3,只不过是用了另外两个循环结构而已:
While…WEnd和Do…Until。
这两个循环结构的语法更加接近自然语言,基本上就是“PlainEnglish”,很容易看懂。
请认真思考为什么Testing7.au3中的表达式($i<=256)用的是“<=”,而Testing8.au3中的表达式($i>256)用的是“>”?
作业:
∙仔细阅读AutoIt帮助文件中Keyword/StatementReference中的关于For…Next、While…WEnd、以及Do…Until的内容,把其中的每一个例子都尝试着运行一遍。
在运行之前,请用脑演练一遍代码,看看执行结果是否与想象得相同……
∙写一个程序,计算“从1乘到某个特定的数字”的结果。
∙把上面的程序总共写成三个版本,分别用For…Next、While…WEnd、以及Do…Until的循环结构,完成同样的功能。
Footnotes:
1.这个例子中所需要的计算太简单,所以,“算法”上的优化没有太大作用。
而在大型的软件工程中,算法优化非常重要,效果也异常惊人。
不过,大多数普通用户的“任务”,往往用“笨方法”更划算……
AutoIt教程:
4.输入与输出、判断与分支
by李笑来on2010/04/30
inAuto-It
学什么东西,往往并不需要脑袋聪明。
可是需要“头皮很硬”──因为你总是需要“硬着头皮读/做下去……”
新建一个AutoIt文件,将其命名为Testing9.au3,输入以下代码:
$n=InputBox("Input","Towhatnumberdoyouwanttoaddup?
")
$r=0
For$i=1To$n
$r=$r+$i
Next
MsgBox(0,"Output","Thesumfrom1to"&$n&"is"&$r)
请按F5查看执行结果。
先是跳出一个含有输入框的对话框,要求你输入一个数字,比如,1024:
而后跳出一个对话框,显示计算结果:
Testing9.au3看起来像是个真正的程序了,因为它包含了所谓程序的三个重要组成部分:
∙输入
∙处理
∙输出
所谓程序,就是一系列的操作说明──是你(作为程序的作者)用计算机能够理解的语言编写[1]的。
而后计算机去执行这些操作。
在操作过程中,有可能需要你(作为程序的用户)提供一些数据(输入)以便进行进一步的操作(操作),也有可能为了满足你(作为程序的用户)的需求而向你提供一定的反馈(输出)。
将来无论你去学哪一种新的编程语言,记住:
第一件事情是去搞清楚它的“输入/输出”的方式,因为你作为程序作者也好,作为程序用户也罢,必须与计算机“互动”。
在此之前,我们一致“硬着头皮”用ConsoleWrite()这个函数,现在我们又有了一个看起来比较“现代”的输出方式──MsgBox()……
Input()和MsgBox()都是函数(一个你到目前为止还必须“不懂装懂”的概念)。
你可以打开AutoIt帮助文件,去看看这两个函数的文档页面,看不懂没关系,但多看几遍,在没有任何人为你讲解的情况下,你都会渐渐明白更多。
现在要知道的是这些(请控制一下自己的好奇心,暂时只要知道下面这些就够了,以后有的是机会回来弄透──也必须回来弄透……):
在第1行,等号右边的Input()这个函数,相当于一个表达式,它的结果就是你在输入框里所输入的内容;于是,这一行代码执行过后,你输入的是什么,变量$n的值就是什么。
Input()里面有两个字符串,第一个是用来定义显示在对话框标题的(在这个程序中,我们将其定制为“Input”;当然,你可以随便改改试试看);第二个是用来定义对话框面板上的内容的(在这个程序里,“Towhatnumberdoyouwanttoaddupto?
”)。
在第6行,MsgBox()这个函数的执行结果是跳出一个对话框;括号里的第一个参数是“0”,它定义的是“对话框类型”,第二个参数“Output”,定义的是对话框的标题;而第三个参数,是一个表达式,把以下几个字符串合并起来,显示在对话框面板中:
"Thesumfrom1to"
$n
"is"
$r
现在的问题在于,万一这个程序的用户不是你自己,他在输入框里输入的不是正整数怎么办?
比如输入的是“ten”,或者,“-10”……你自己不妨反复试试看这些“非常规输入”。
至于最终结果为什么是“0”而不是别的什么,可以暂时不去理会──反正结果不是我们所预期的。
现在的问题是,作为程序作者的你,如何确保程序用户输入的是正确的数字呢?
让我们在第一行代码之后补上几行(Testing10.au3):
$n=InputBox("Input","Towhatnumberdoyouwanttoaddupto?
")
IfNotStringIsDigit($n)Then
MsgBox(0,"Warning!
","Youdidn'tinputavalidnumber.PressOKtoquit...")
Exit
EndIf
$r=0
For$i=1To$n
$r=$r+$i
Next
MsgBox(0,"Output","Thesumfrom1to"&$n&"is"&$r)
第2行里的StringIsDigit()又是一个函数。
如果作为参数传递给它的字符串全部由数字构成,那么这个函数将返回“True”这个逻辑值;否则的话,它就返回“False”这个逻辑值──暂时了解这些就够了,请你硬着头皮接着往下看……
第2行到第5行代码,是一个If…Then的“判断分支”语句,将其翻译成自然语言就是
如果$n不是数字的话,就显示对话框,提示用户“Youdidn’tinputavalidnumber.PressOKtoquit…”,而后退出程序
否则的话(即,如果$n是数字的话),就跳过Then…EndIf之间的代码,继续执行EndIf之后的代码……
可是,这样还是不令你满意,因为,你要的实际上是“如果用户输入的不是数字,那么就让他重新输入,直到用户输入正确数字,则为用户显示计算结果……”
注意这里的“直到……”,用编程语言表达的话,就是“用一个循环,直到某个条件满足跳出循环”。
请阅读以下的代码(Testing11.au3):
Do
$n=InputBox("Input","Towhatnumberdoyouwanttoaddupto?
")
IfNotStringIsDigit($n)