本文其实是帮助文档tutorials部分的4个章节的翻译.我做了适当的省略和改写,也加上了一些自己的理解.希望能起到一个抛砖引玉的作用.如果有理解错误的地方,还望批评指正~
这四个章节,前三个是例子,第四个是对正则表达式的学习.
一.显示一个hello world的窗口 
就一条语句 
MsgBox(0, "Tutorial", "Hello World!") 
函数显示一个对话框,带3个参数:flag,title和message. 
flag是对话框的样式,其余两个是string类型的参数 
对于string的参数要用引号(单双引号都一样)
对于flag不同的值代表不同的样式,详见帮助,例如下面的 
MsgBox(1+64+256,"tutorial","helloworld") 
需要不同的样式,只需要将不同的值加在一起即可

二. 运行"记事本"自动输入一些内容,然后关闭
 
运行记事本程序的语句 
Run("notepad.exe")

然后可以用window info工具获取窗口的title,对于记事本一般是"无标题 - 记事本" 
当程序启动之后,我们要等待窗口出现并称为活动的(active 注1),然后才能按键. 
等待的过程可以使用WinWaitActive()函数 
WinWaitActive("无标题 - 记事本") 
大多数与窗口相关的函数都以窗口的title做参数


当窗口打开并且是活动的,是等待我们输入的状态(你可以看到输入光标在闪,表示当前的焦点就在那里),这个时候就可以输入文本了.可以使用Send()函数 
Send("This is some text.")
你可以测试脚本运行,就会看到效果了

然后是关闭窗口,使用WinClose()函数 
WinClose("无标题 - 记事本")

当关闭的时候会弹出对话框(对话框也是窗口window,注2)提示是否保存.使用info tool来得到对话框的细节 
加一行语句等待这个对话框成为活动的 
WinWaitActive("记事本", "文件 无标题") 
(这里使用了窗口里的文本来让函数更明确的区分这个窗口与原来的记事本窗口,我们这里使用的文本是"文件 无标题")

接下来我们想要实现自动的按下Alt-N 来按动"否"的按钮 
(窗口里面的字母有下划线表示是快捷键,一般加alt,所以这里用alt+Y为"是",alt+N为"否") 
使用Send()函数发alt键是发"!",所以alt+n就是 
Send("!n")

所以整个脚本如下 
Run("notepad.exe") 
WinWaitActive("无标题 - 记事本") 
Send("This is some text.") 
WinClose("无标题 - 记事本") 
WinWaitActive("记事本", "文件 无标题") 
Send("!n")

三 winzip 安装
 
这个例子很简单,只是过程复杂点,无非是反复的用上面的几个函数,对照文档看下即可 
在此略

四 正则表达式 
几乎所有的程序语言都有这个特性,这里只是简单的介绍AutoIt里面的StringRegExp()这个函数(简称SRE) 
函数形式 
StringRegExp( "test", "pattern" [, flag ] ) 
参数 
"test"  用于查找的字符串 
"pattern" 要查找的字符串 
flag 可选,用于告诉函数你是要知道是否找到,或者返回第一个匹配的,或者返回所有匹配的结果.

首先要了解一下正则表达式的基础知识,也就是这个函数的执行过程: 
pattern这个部分就是告诉函数逐个字符的对它进行检查匹配.例如检查"test",先是检查t是否匹配,只有匹配了才会检查下一个字符e.如果目的串的下一个字符是a,而不是你找的e就说明匹配失败了.如此进行下去.

例1 
MsgBox(0, "SRE Example 1 Result", StringRegExp("text", 'test')) 
其中StringRegExp("text", 'test')的返回值是0,表示没有找到匹配的

[]代表逻辑或,例如"[sx]"表示或者是s或者是x其中的一个 
例2 
MsgBox(0, "SRE Example 2 Result", StringRegExp("text", 'te[sx]t')) 
MsgBox(0, "SRE Example 2 Result", StringRegExp("test", 'te[sx]t')) 
结果都是1,因为都匹配

{}表示匹配的次数,也可以指定一个范围"{最小次数,最大次数}" 
例3 
MsgBox(0, "SRE Example 3 Result", StringRegExp("text", 't{1}e{1}[sx]{1}t{1}')) 
MsgBox(0, "SRE Example 3 Result", StringRegExp("aaaabbbbcccc", 'b{4}'))

以上都是flag默认为0的情况,与StringInStr() 函数的功能大多数情况都是一样的 
但是当flag的值为其他的时候,情况就不同了.例如你在玩游戏的时候会出现类似 
"Gnarly Monster hits you for 18 damage." (某怪兽打了你18个伤害) 
你现在想要知道你被打了多少下.当然不能匹配18.因为你也不知道你要匹配的具体字符是什么,只知道是数字而已.
现在要确定匹配的pattern的特点(之前的都是很明确的某个字符串,现在是未知的) 
1)它只包含数字 
2)有时是2个字符长 
2a)最大值是999 
2b)最小值是0 
3)肯定是1到3个字符长 
4)在目标串里面没有其他的数字
在回答这个问题前先看一个例子

例4 
$asResult = StringRegExp("This is a test example", '(test)', 1) 
If @error == 0 Then 
    MsgBox(0, "SRE Example 4 Result", $asResult[0]) 
EndIf 
$asResult = StringRegExp("This is a test example", '(te)(st)', 1) 
If @error == 0 Then 
    MsgBox(0, "SRE Example 4 Result", $asResult[0] & "," & $asResult[1]) 
EndIf

看第一句话StringRegExp("This is a test example", '(test)', 1) 
这里flag的值为1,还有分组符号"()" 
flag为1表示函数在做匹配成功以后,会返回一个数组,数组里的每个元素都是分组符号()里面的值 
所以这个里面返回的$asResult[0]就是括号里的test
再看StringRegExp("This is a test example", '(te)(st)', 1) 
同样先做匹配,确实匹配了te和st连在一起,匹配成功(做匹配类似将括号去掉) 
然后开始返回数组,数组里面的第一个值$asResult[0]是第一个括号的te,第二个值$asResult[1]是第二个括号里面的st 
说白了,()只是起到对返回的结果进行分割,分别放到不同的数组元素里面的作用.

然后回到打怪的问题中,对于我们感兴趣的pattern的定义写为"([0-9]{1,3})". 直接解释就是0到9之间的某个数字出现1到3次 
所以可以这么写 
例5 
$asResult = StringRegExp("Gnarly Monster hits you for 18 damage.", _ 
                               '([0-9]{1,3})', 1) 
If @error == 0 Then 
    MsgBox(0, "SRE Example 5 Result", $asResult[0]) 
EndIf
其中_为代码中的换行

如果游戏中出现的是 
"You deflect 36 of Gnarly Monster's 279 damage."你使279个伤害里面的36个打歪 
如果你运行上面的程序,会出现36而不是需要的279.所以现在要确定的样式是数字后面还要有" damage"(空格加damage),所以是 "([0-9]{1,3} damage)",但是这样函数返回的值是"279 damage"而不是"279".如何去掉呢,要使用非捕捉组的符号(说白了就是匹配,但是不返回),符号是 "(?:xxx)"xx为要匹配的字符串.所以可以写成 
例6 
$asResult = StringRegExp("You deflect 36 of Gnarly Monster's 279 damage.", '([0-9]{1,3})(?: damage)', 1) 
If @error == 0 Then 
    MsgBox(0, "SRE Example 6 Result", $asResult[0]) 
EndIf
其中'([0-9]{1,3})(?: damage)'即要匹配"前面0到3个数字"+"空格"+"damage",但是前面的数字要返回保存,后面的空格damage不返回. 
如果直接的写法可以写成 
'([0-9]{1,3})( damage)' 
'([0-9]{1,3}) damage' 
因为不管如何匹配,$asResult[0]都是放的第一个()里面的内容

总结: 
说这么多只是要说一下正则表达式的运行的理论基础.记住: 
1 是逐个字符匹配的 
2 [..]表示匹配括号里面的其中一个 
3 看看SRE这个函数的帮助,特别是Repeating Characters"这一节.这可以使你的代码易读.例如"*"与{0,} 一样,代表0到任意个字符.
注1: 
active也是windows的基本原理之一,也就是当前活动的窗口.一般也就是正在操作的窗口,高亮显示(也就是标题是亮蓝色的)
注2: 
窗口是windows操作系统的基本元素

本文转自yahoon 51CTO博客,原文链接:http://blog.51cto.com/yahoon/125038,如需转载请自行联系原作者

AutoIt 快速入门指南相关推荐

  1. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | GitHub    作者 | Jay Alammar 转自 | 机器之心 如 ...

  2. BERT模型超酷炫,上手又太难?请查收这份BERT快速入门指南

    2019-12-31 10:50:59 选自GitHub 作者:Jay Alammar 参与:王子嘉.Geek AI 如果你是一名自然语言处理从业者,那你一定听说过最近大火的 BERT 模型.本文是一 ...

  3. RMAN快速入门指南

    RMAN快速入门指南   1. What is RMAN? 什么是RMAN?    4 2. Terminology 专业词汇解释    4 2.1. Backup sets 备份集合    4 2. ...

  4. 150页书籍《PyTorch 深度学习快速入门指南》附PDF电子版

    为什么说是极简教程,首先本书只涵盖了150页.内容比较精简,特别适合作为 PyTorch 深度学习的入门书籍.为什么这么说呢?因为很多时候,一份厚重的书籍往往会削弱我们学习的积极性,在学习一门新的语言 ...

  5. h5py快速入门指南

    h5py是Python语言用来操作HDF5的模块.下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/lates... .该翻译仅为个人 ...

  6. 2017 Vue.js 2快速入门指南

    注意,据部分读者反映本文水多,怕湿身者勿进.后续推荐详解 Vue & Vuex 实践 2017 Vue.js 2快速入门指南翻译自Vue.js 2 Quickstart Tutorial 20 ...

  7. Flux快速入门指南

    翻译自 http://www.jackcallister.com/2015/02/26/the-flux-quick-start-guide.html 2015年2月26日 本文将概述如何使用Flux ...

  8. AngularJS快速入门指南09:SQL

    我们可以将之前章节中的代码用来从数据库中读取数据. 通过PHP Server从MySQL数据库中获取数据 <div ng-app="myApp" ng-controller= ...

  9. AngularJS快速入门指南03:表达式

    AngularJS通过表达式将数据绑定到HTML. AngularJS表达式 AngularJS表达式写在双大括号中:{{ 表达式语句 }}. AngularJS表达式绑定数据到HTML的方式与ng- ...

  10. AngularJS快速入门指南15:API

    API即Application Programming Interface(应用程序接口). AngularJS全局API AngularJS全局API是一组全局JavaScript函数,用来进行一些 ...

最新文章

  1. Css实现checkbox及radio样式自定义
  2. Ubuntu 14.04 安装 Sublime Text 3
  3. turbo译码器 matlab,短帧Turbo译码器的FPGA实现
  4. win7系统下载 ghost win7 Sp1 64位纯净3月版
  5. Python之编写登陆接口
  6. Agile PLM EC Understand the BOM Publishing Process
  7. Java System.in.skip()的作用
  8. oracle执行plus时跳出,oracle – 从shell脚本运行sqlplus时管理错误处理
  9. 【Python实例第24讲】稀疏的可逆协方差估计
  10. android Camera framework层解析
  11. 01 Python基础
  12. 求生之路2服务器无线跳,求生之路连跳宏 | 手游网游页游攻略大全
  13. 学习韩顺平java基础笔记 (自用)
  14. QRCode.js生成二维码
  15. 3d打印切片软件 linux,3D打印切片软件汇总分类
  16. 5分钟快速安装ASP.NET Core 网站运行环境
  17. 从总线式以太网到SDN交换机OpenVSwitch
  18. oracle 范鑫_【企业信息化研究所】TF—SWUFE Oracle Club招新宣讲,只为和你相遇
  19. Windows热键注册原理
  20. 知识点滴 - 非正式组织结构权力

热门文章

  1. 几款比较有名的刷流量软件
  2. golang string 转 int, int64, int32
  3. 解决ubuntu16.04插耳机没有声音的问题
  4. 供应链金融业务如何脱颖而出?
  5. 唐山新维计算机学校,WellDesign创景新维设计学员风采介绍
  6. OpenCV图像轮廓提取
  7. 运行 CTS 测试命令
  8. SYSLINUX 6.03不支持64bit的ext4
  9. android短信uri,Android开发,URI 如:发短信,发彩信,调用通讯录等
  10. ETS88 获取TesterID