Autoit编程例.docx
《Autoit编程例.docx》由会员分享,可在线阅读,更多相关《Autoit编程例.docx(9页珍藏版)》请在冰豆网上搜索。
Autoit编程例
第1章初识AUTOIT
实例001打个招呼!
实例说明
输出一个对话框,向“AUTOIT”打个招呼!
可以说是AUTOIT最简单的
第一个程序!
运行结果如图1.1所示。
图1.1–输出对话框
程序代码
MsgBox(64,?
"第一个程序",?
"打个招呼:
"?
&?
@CRLF?
&?
'你好"AUTOIT"')
技术要点
(1)MsgBox函数的标志参数.64显示带"确定"按钮+信息图标的消息框.您可以实验各种不同的标志值,理解各种标志值的结果.如果你想要使用一个以上的标志值,只需把必需的值相加即可,或直接用“+”号连接各值.
(2)程序使用了“@crlf”作为回车换行符。
使用“&”作为字符串连接符。
宏指令首字符都是以”@”开头容易分辨。
和普通的变量一样,您可以在表达式中使用它们,但不能进行赋值操作.宏是已经预设好的值包括四大类:
AUTOIT相关宏,目录宏,系统信息宏,时间与日期宏。
相关的值可在
帮助“宏指令目录”找到。
(3)字符串以一对英文双引号括起来,也可以使用单引号括起来。
可以混合使用引号类型如要显示字符串中的双引号用单引号括起整个字符串:
'你好"AUTOIT"'
实例002简单求和程序
实例说明
设计一个简单求和程序。
掌握如何定义变量,赋值变量方法。
运行结果如图1.2所示。
图1.2–求10+20的和
程序代码
Dim?
$i=10,$n=20,$sum=0?
;声明变量,并赋初值$sum?
=?
$i+$n?
MsgBox(64,"一个完整的程序","计算结果:
"&$sum)
技术要点
(1)变量是将数据存储在内存中,以便可以快速访问.您可以把它想象为在内存中的邮箱,我们可以往里面存信也可以取信。
变量开头都是使用”$”,非常容易辨认。
本程序使用关键词“Dim”定义3个变量$i,$n,$sum,并使用“=”号分别赋值。
也可以先定义再赋值。
(2)使用数学运算符“+”号计算出结果并将结果赋值到$sum,$sum将得到新的值。
下面列出常用数学运算符:
实例003计算正方形面积
实例说明
输入正方形的边长,计算正方形面积。
这是一个简单的输入和输出程序。
运行结果如图1.3和1.4所示。
图1.3–输入正方形边长图1.4–输出正方形面积
程序代码
Dim?
$a?
=?
InputBox("输入","请输入正方形边长:
")Dim?
$s?
=?
$a?
^?
2?
?
MsgBox(64,"结果",$s)
技术要点
(1)定义变量$a接收inputbox函数的返回值,其返回值是输入的字符串。
不同的函数返回值都不同,具体看函数的帮助文档说明!
实例004计算圆的面积
实例说明
输入半径并计算出圆的面积,最后在屏幕居中显示出来。
掌握常量的定义和变量的不同意义。
运行结果如图1.5和1.6所示。
图1.5–输入圆的半径图1.6–显示圆的面积
程序代码
Dim?
Const?
$PI?
=?
3.1415926Dim?
$r?
=?
InputBox("计算圆的面积",?
"请输入半径:
")Dim?
$x,?
$y;屏幕居中显示工具提示$x?
=?
@DesktopWidth?
/?
2?
$y?
=?
@DesktopHeight?
/?
2ToolTip("圆面积为:
"?
&?
$r?
^?
2?
*?
$PI,?
$x,?
$y,?
"提示",?
1,2)?
Sleep(3000)?
;工具提示停留3000毫秒
技术要点
(1)常量使用Const关键字声明创建,并且必须具有初始化的值。
常量同样是以”$”开头。
跟变量不一样它是只读的,一旦已分配一个常数,后面不能更改它的值。
上面由于π的值是固定的不可以再更改,使用常量进行初始化。
一般用大写字母作为常量名用以区分变量
(2)这里使用了“工具提示”函数ToolTip来显示圆的面积。
宏@DesktopWidth是屏幕的宽度值,@DesktopHeight是屏幕的高度值。
两个除以2得到屏幕中间点的x,y的坐标。
(3)ToolTip工具提示跟Msgbox函数的对话框不一样,它并不会暂停程序的运行。
程序把所有语句执行完毕会自动退出,这时ToolTip工具提示框会立刻关闭。
上面添加了一个暂停程序的函数Sleep,将程序暂停运行指定的时间3000毫秒。
这样ToolTip就会停留3秒再关闭。
第2章选择和分支结构程序设计
实例005比较运算
实例说明
认识“关系运算符”,布尔值。
第一段是比较数字,第二段是比较字符串。
了解不同关系运算符返回的布尔值。
运行结果如图2.1和2.2所示。
图2.1–比较数字图2.2–比较字符串
程序代码
#cs=================================比较你是否已成年,返回true或false#ce=================================Dim?
$arg?
=?
18Dim?
$yrg?
=?
InputBox("输入",?
"请输入你的年龄:
")MsgBox(64,?
$arg?
&?
"等于"?
&?
$yrg,?
$arg?
=?
$yrg)MsgBox(64,?
$arg?
&?
"不等于"?
&?
$yrg,?
$arg?
<>?
$yrg)MsgBox(64,?
$arg?
&?
"大于"?
&?
$yrg,?
$arg?
>?
$yrg)MsgBox(64,?
$arg?
&?
"大于或等于"?
&?
$yrg,?
$arg?
>=?
$yrg)MsgBox(64,?
$arg?
&?
"小于或等于"?
&?
$yrg,?
$arg?
<=?
$yrg)#cs=================================比较字符串,返回true或false#ce=================================Dim?
$word?
=?
"HelloWord"Dim?
$new_word?
=?
InputBox("输入",?
"请输入世界你好英文:
")If?
$new_word?
=?
""?
Then?
;判断返回值?
?
?
MsgBox(16,?
"函数",?
"输入失败!
")?
?
?
Exit?
;退出程序EndIfMsgBox(64,?
$word?
&?
"等于"?
&?
$new_word,?
$word?
=?
$new_word)MsgBox(64,?
$word?
&?
"等于"?
&?
$new_word,?
$word?
==?
$new_word)?
;区分大小写
技术要点
(1)单行注释使用”;”号,而段注释是由#comments-start开头与#comments-end结尾,可以使用缩写的关键字:
#cs与#ce.注释并不会被程序执行。
关键的地方使用注释是良好的习惯,便于维护和阅读代码。
(2)关系运算符也叫比较运算符,有以下这些:
关系运算符,其运算结果是一个“布尔值”。
布尔值是一个逻辑值.只有两个布尔值存在:
true(真)与false(假).
在Autoit中数字0等于布尔值False其他任何数字等于布尔值True
注意:
空字符串单独用作比较运算时会自动转换为0,其结果也是为False
比较字符串的例子中,我们同样使用InputBox作为输入函数,函数执行之后会有“返回值”.返回值当成功时一般会返回有效的值,而失败时一般会返回空符
串或0。
例子里通过“条件判断语句”
进行比较当
InputBox返回值为空符串时则函数执行失败(按下了取消键或没有输入任何数据)可以从帮助中看到返回值成功和失败会返回什么值:
注意:
if…then用于执行单条件语句,可以不需要EndIf.
实例0063个数由小到大排序
实例说明
任意输入3个整数,编程实现对这3个整数由小到大排序,并将排序后结果显示在屏幕上。
运行效果如图2.3和2.4所示。
程序代码
#include?
#include?
"console.au3"CoutLine("请输入三个数字a,b,c:
",?
"亮青色")Dim?
$in?
=?
Cin()Dim?
$aNum?
=?
StringSplit($in,?
",");用作调试,查看数组的元素,可取消这句_ArrayDisplay($aNum,'Debug~~~')?
Dim?
$a,$b,$c,$t$a?
=?
Number($aNum[1])$b?
=?
Number($aNum[2])$c?
=?
Number($aNum[3]);判断大小,交换顺序If?
$a?
>?
$b?
Then?
?
?
$t?
=?
$a?
?
?
$a?
=?
$b?
?
?
$b?
=?
$tEndIfIf?
$a?
>?
$c?
Then?
?
?
$t?
=?
$a?
?
?
$a?
=?
$c?
?
?
$c?
=?
$tEndIfIf?
$b?
>?
$c?
Then?
?
?
$t?
=?
$b?
?
?
$b?
=?
$c?
?
?
$c?
=?
$tEndIfCoutLine("从小到大排序:
"?
&?
$a?
&?
","?
&?
$b?
&?
","?
&?
$c,?
"亮紫色")System("pause")
技术要点
(1)#include命令包含一个外部的autoit脚本到当前脚本中。
包含文件的内容在"#include"命令点插入到脚本-大多数情况下是在脚本的开头,以便包含文件内声明的变量或常量在脚本的其它部分可用.其格式为:
包含到当前脚本的文件名,路径可选.文件名必须是字符串,不能是变量.如果使用双引号"...",将从当前脚本目录开始查找该文件如果使用尖括号<...>,将从包含文件库目录中查找该文件.(通常汉化版默认安装的库包含文件目录为E:
\AutoIt3\Include,汉化版autoit还有一个E:
\AutoIt3\UserInclude目录)
上面例子中包含Array.au3脚本,它的代码已插入到当前文件中,可以使用它提供的“_ArrayDisplay”函数打印数组元素。
这种非内置(需要包含文件)使用的函数叫做“自定义函数”通常叫它的英文简写”UDF”,它通常以下划线”_”开头用以区别内置函数.
Console.au3是由笔者所写的一个用于控制台的udf。
如果大家使用的是笔者提供的版本console.au3已经放进include目录里。
(2)本例子主要还是熟悉if的用法,交换三个数的顺序。
例子里将变量的值进行两两比较,然后将变量交换。
由于变量的值重新赋值会删除前一个值,所以需要一个临时的变量$t作为临时保存值。
就像两杯水倒进对方的杯子里,需要一个空杯子将其中一个杯子的水临时保存。
实例007你学会了吗
实例说明
通过询问熟悉MsgBox的用法,掌握If...ElseIf...Else...EndIf的用法。
运行效果如图2.5和2.6所示。
图2.5–询问是否学会使用if
图2.6–选“是”弹出提示
程序代码
Dim?
$msg?
=?
MsgBox(32?
+?
3,?
"提问",?
"你学会使用if了吗?
")?
;是,否,取消If?
$msg?
=?
6?
Then?
?
?
MsgBox(64,?
"提示",?
"不错啊,这么快就学会了!
")ElseIf?
$msg?
=?
7?
Then?
?
?
If?
MsgBox(32?
+?
4,?
"提问",?
"你学会使用MsgBox了吗?
")?
=?
6?
Then?
;是,否?
?
?
?
?
MsgBox(64,?
"提示",?
"学会MsgBox也不错了,继续研究吧!
")?
?
?
Else?
?
?
?
?
MsgBox(64,?
"提示",?
"无语,请从第一章重新看!
")?
?
?
EndIfElse?
?
?
MsgBox(64,?
"提示",?
"革命尚未成功,同志们仍需努力!
")EndIf
技术要点
(1)If的两种形式:
1.If<表达式>Then语句单条件运行语句。
当表达式结果为true时执行then后面语句。
2.If<表达式>Then 语句 ...[ElseIf表达式-nThen [elseif语句...]] ...[Else [else语句] ...EndIf
多条件运行语句。
<>表示是必写,[]表示是可选(可写可不写)
条件表达式.果表达式为true,则执行"语句"块;如果不是,则执行第一个为true的"elseif语句..."块;如果以上都不成立,则执行"Else语句"块.
If语句允许嵌套使用.并且根据需要用圆括号组合使用
实例008成绩奖励系统
实例说明
输入用户名和密码登录“成绩奖励系统“,如果登录成功则输入语文和数学考试成绩。
如果语文考试大于80分或者数学考试大于90分则奖励100元,否则显示未达到要求,请下次继续努力!
运行效果如图2.7和2.8所示。
图2.7-输入用户名登录系统
图2.8–输入成绩获取奖励
程序代码
#include ;控制台用作提示CoutLine("请输入你的名字:
", "亮黄色")Dim $name = Cin() ;等待输入名字CoutLine('欢迎' & $name & '进入"成绩奖励系统"', "亮红色")CoutLine('请输入用户名和密码登录系统(区分大小写)', "亮青色")Dim $UserName = InputBox("提示", "请输入用户名:
")Dim $PassWord = InputBox("提示", "请输入密码:
", "", "*") ;使用密码字符CoutLine("正在验证...")Sleep(2000)If $UserName == "Admin" And $PassWord == "123456" Then CoutLine('登录成功,请输入语文和数学成绩', "亮青色") Dim $chiness = InputBox("提示", "请输入语文成绩:
") Dim $maths = InputBox("提示", "请输入数学成绩:
") If (Not $chiness) And (Not $maths) Then ;判断有没有输入 CoutLine("输入错误,退出系统!
", "亮红色") System("pause") Exit EndIf If $chiness > 80 Or $maths > 90 Then CoutLine("恭喜你,得到100元奖励!
", "亮红色") Else CoutLine("未达到要求,请下次继续努力!
", "亮红色") EndIfElse CoutLine("登录失败,用户名或密码错误!
", "亮红色")EndIfSystem("pause")
技术要点
(1)本例使用逻辑运算符结合if语句完成。
逻辑运算符如下:
And两个表达式全为true,其最终结果为true.
OR两边表达式只要有一个为true,其最终结果为true.
Not将true变为false,false变为true.
(2)当表达式内含有多个运算符时,其运算的先后顺序由运算符优先级别控制.AutoIt中运算符的优先级如下所示.处于同一优先级的两种运算符,则按从左到右的顺序运算.
从最高到最低的优先级:
Not ^ */ +- & <><=>==<>== AndOr
例如:
2+4*10---运算结果为42,运算顺序如下:
4*10 (等于40)
2+40 (等于42)
乘号*拥有比加号+更高的优先级.
您可以使用括号强制先计算表达式的一部分.
例如:
(2+4)*10---运算结果为60.
(3)逻辑运算符的惰性求值:
And第一个表达式为false时,其最终结果已确定为false,不会执行第二个表达式。
Or第一个表达式为true时,其最终结果已确定为true,不会执行第二个表达式.
小例子:
$and1 = True And MsgBox(0, "", "and1") ;第一个为true,执行第二个$and2 = False And MsgBox(0, "", "and2") ;第一个为false,不执行第二个$or1 = True Or MsgBox(0, "", "or1") ;第一个为true,不执行第二个$or2 = False Or MsgBox(0, "", "or2") ;第一个为false,执行第二个
实例009二元条件选择
实例说明
要求用户输入两个数a,b。
如果a能被b整除或者a加b大于100,则输出a的值,否则输出b的值。
运行效果如图2.9和2.10所示。
图2.9-输入a的值图2.10–输出结果
程序代码
Dim $a = InputBox("提示", "输入a的值:
")Dim $b = InputBox("提示", "输入b的值:
");~If((Mod($a,$b)=0)Or($a+$b>100))Then;~ MsgBox(64,"结果",$a);~Else;~ MsgBox(64,"结果",$b);~EndIfMsgBox(64, "结果", ((Mod($a, $b) = 0) Or ($a + $b > 100)) ?
$a :
$b)
技术要点
(1)本例使用二元条件选择语句。
格式如下:
如果表达式为true则返回表达式1的值。
如果表达式为false则返回表达式2的值。
通常可以用来替换If...Else...EndIf结构。
虽然在所有情况下没有必要,但还是强烈建议3个表达式括在括号中.
实例010工资年终调整
实例说明
李四的年终工作评定,如果定为A级,则工资涨500元,如果定为B级,则工资涨200元,如果定为C级工资不变,如果定为D级工资降200元,如果定为E级工资降500元.
设李四原工资为5000,请用户输入李四的评级,然后显示李四的工资。
运行效果图2.11和2.12所示
图2.11–输入李四评级图2.12–显示李四工资
程序代码
Dim $salay = 5000Dim $input = InputBox("输入", "请输入李四的评定等级(A-E)")Switch $input Case "A" $salay += 500 Case "B" $salay += 200 Case "C" ;工资不变 Case "D" $salay -= 200 Case "E" $salay -= 500 Case Else MsgBox(32, "错误", "只能输入字母ABCDE")EndSwitchMsgBox(64, "提示", "李四的工资为:
" & $salay & "元")
技术要点
(1)Switch…Case…EndSwitch条件语句
Switch<表达式> Case<值>[To<值>][,<值>[To<值>]...] 语句1 ... [Case<值>[To<值>][,<值>[To<值>]...] 语句2 ...] [CaseElse 语句N ...]EndSwitch
1.1根据表达式返回的值.此值将与每个case的值比较,直到找到一个匹配.
如果第一个case不匹配切换值,则继续比较其它Case节点,如果匹配,则该节Case被执行.如果没有匹配的case且没有定义其它的Case,则无任何操作发生.
1.2值To值指定范围,表达式值在两个值之间,执行Case后面语句
值,值…表达式值等于其中一个值,执行Case后面语句
下面小例子,判断星期六日是休息日,星期1-5是工作日
Dim $date = ""Switch @WDAY Case 7, 1 ;if@WDAY=7OR@WDAY=1 $date = "星期六日休息" Case 2 To 6 ;if@WDAY=2OR@WDAY=3OR@WDAY=4OR@WDAY=5OR@WDAY=6 $date = "星期1-5工作日"EndSwitchMsgBox(64,"提示",$date)
(2)例子使用了自增和自减赋值
$salay-=200相当于$salay=$salay-200表达式按照优先级先将右边$salay的值进行数学运算后赋值回$salay。
这种赋值方法比较方便和常见的。
实例011假期安排
实例说明
明天放假,输入明天的温度和天气情况,如果温度低于15度,在家玩游戏,否则如果天气是“晴”或“阴”,到外面逛街,否则如果天气是“雨”就到到电影院看戏,否则如果是其它天气(雷,风)通常会停电,这假期没法过。
运行效果图2.13和2.14所示
图2.13–输入明天天气图2.14–显示假期安排
程序代码
#include ;MsgBox常量定义Dim $tem = InputBox("输入","请输入明天温度:
")Dim $wea = InputBox("输入","请输入明天天气:
")Select Case $tem < 15 ;温度低于15度 MsgBox($MB_ICONINFORMATION,"郁闷","太冷只能在家玩游戏!
") Case $wea = "晴" Or $wea = "阴" MsgBox($MB_ICONINFORMATION,"高兴","到外面逛街!
") Case $wea = "雨" MsgBox($MB_ICONINFORMATION,"还好","到电影院看戏!
") Case Else ;风,雷 MsgBox($MB_ICONINFORMATION,"愤怒","电都停了,这假期没法过!
!
")EndSelect
技术要点
(1)Select…Case…EndSelect条件语句
Select Case<表达式1> 语句 ... [Case<表达式2> 语句2 ...] [Case<表达式n> 语句n ...] [CaseElse Else语句 ...]EndSelect
1.1执行多条件判断,Case表达式为真则执行语句,如果有多个Case表达式成立,则只执行第一个Case语句.
1.2表达式可以包含布尔运算符:
AND,OR,或NOT以及逻辑运算符:
<,<=,>,>=,=,==,与<>.根据需要可以用圆括号组合使用.
(2)无论是switch或select都是可以使用if语句来替换。
但是使用它们会使分支结构更加清淅,易于阅读!
备注
通常在Select或Switch结构中,当遇到下一个Case语句时,则结束当前Case块中的代码.运行ContinueCase通知AutoIt停止当前Case代码块的执行,并开始执行下一个Case代码块.AutoIt不进行下一个Case语句的比较-仅运行块内的代码.试图在Sele