KeyPress 函数

1.新手问题

1、第一次用按键精灵移动版，介绍一下软件界面和功能？
答：新手建议先看看按键精灵移动版PC端+手机端的大概功能图文介绍：http://bbs.anjian.com/thread-513216-1-1.html
2、手机没有ROOT可以使用吗？怎么ROOT？
答：必须ROOT过的手机才能使用按键精灵移动版，ROOT相关教程帖：http://bbs.anjian.com/thread-515762-1-1.html
3、手机连接电脑后为何PC助手一直显示连接中无法连上？
答：①请先确定已经打开了手机开发者选项中的USB调试模式；
②首次连接时会自动在手机端安装按键精灵，必须在手机的安全设置中勾选“允许安装未知来源应用”，并确认手机有足够的空间；
③确定电脑已经安装了手机驱动，可以用其他手机助手如360助手、91手机助手、豌豆荚等连接试试，一般就能自动安装驱动；
④彻底关闭其他手机助手及按键手机助手，重启手机后连接电脑，注意不要让任何手机助手抢先自动连接，然后打开手机助手进行连接；
⑤有些手机连接电脑时有很多连接模式，如媒体模式、照片模式、仅充电模式、大容量存储模式等，可尝试切换模式并重新拔插数据线；
⑥如果是有成功连接过偶尔断开后连不上了，重启一下电脑试试
⑦如果以上步骤依然无法连上，请联系官方提供手机型号进行测试。
4、手机连成功后，抓抓工具抓图时、运行脚本时会断开连接？
答：请先清空手机sdcard/MobileAnjian/MQTemp文件夹里文件（不要删除文件夹），重启电脑和手机重新连接试试看，如果开启游戏后才出现这个问题，不开没有问题，可能是手机内存不足导致手机按键无法启动。
5、为何手机明明已经ROOT了，运行按键精灵时候却提示未ROOT？
答：部分机型存在这个问题，解决方式是刷一个自带ROOT的ROM尝试解决，另外部分机型4.4以上版本安卓系统兼容性还不是太好，建议刷4.3或更低版本ROM。
6、如何抓图、抓坐标？
答：将手机用数据线连接电脑，在电脑上用按键精灵手机助手的抓抓工具，可以获取手机画面截图，并进行抓点、抓色、截图等操作。
7、手机上能抓坐标吗？
答：勾选【手机系统设置-开发者选项-指针位置】即可在屏幕顶端显示当前触摸位置坐标啦，其实大多数情况下我们只要估算一下想点击的按钮在屏幕中百分之多少的位置，然后代码里获取一下手机分辨率，乘上百分比就可以点到按钮了，不一定非要精确取到按钮坐标。
8、按键精灵移动版可以自行设计脚本界面UI吗？
答：支持一键插入UI函数进行界面设计，未来也会支持直观的用控件自行绘制界面。
9、横屏游戏在抓抓上截图是竖着的？脚本坐标怎么判定？
答：横屏游戏脚本开发注意事项请查看帖子: http://bbs.anjian.com/forum.php?mod=viewthread&tid=533032
10、为何有时候脚本运行一半就停止了？
答：请先检查屏幕右边的脚本控制浮窗是否消失，如果浮窗消失则可能是因为手机内存不足造成的，安卓系统内存不足时会自动清理后台程序，挂机时游戏属于前台程序，脚本属于后台程序，内存不足时就可能被系统清理，如果浮窗没有消失请检查代码是否陷入死循环，可使用TracePrint函数在PC端调试输出查看。
11、脚本运行过程中浮窗会挡住游戏画面影响找图或者点击，怎么办？
答：可以关闭浮窗，使用物理热键控制脚本，也可以使用浮窗位置设置函数SetControlBarPos来固定浮窗位置，防止挡住关键画面。
12、写好的脚本如何分享给其他人使用呢？
答：点击手机助手上方导出按钮，生成APK安装包，别人安装后即可使用
13、我用手机写脚本，怎么添加图片到附件然后使用找图功能？
答：手机上无法添加附件，如果一定要用找图功能，可以使用图片在手机上的绝对路径，用RE管理器等文件管理工具可以查看文件真实路径，然后在找图函数里使用绝对路径，如FindPic -0, 0, 1080, 1920, "sdcard/pictures/1.png",”000000”, 0, 0.8, intX, intY
14、写好的脚本可以对用户进行销售吗？
答：内置付费功已经在研发中，即将上线，敬请期待。


为何PC助手无法连接手机？

1、请先确定已经打开了手机开发者选项中的USB调试模式。
2、首次连接时会自动在手机端安装按键精灵，必须在手机的安全置中勾选“允许安装未知来源应用”，并确认手机有足够的空间。
3、确定电脑已经安装了手机驱动，可以用其他手机助手如360助手、91手机助手、豌豆荚等连接试试，一般就能自动安装驱动。
4、彻底关闭其他手机助手及按键手机助手，重启手机后连接电脑，注意不要让任何手机助手抢先自动连接，然后打开按键手机助手进行连接。
5、有些手机连接电脑时有很多连接模式，如媒体模式、照片模式、仅充电模式、大容量存储模式等，可尝试切换模式并重新拔插数据线。
6、如果是有成功连接过偶尔断开后连不上了，重启一下电脑试试。
7、如果以上步骤依然无法连上，请联系官方提供手机型号进行测试。


为何手机已经ROOT却提示没ROOT？

部分机型存在这个问题，解决方式是刷一个自带ROOT的ROM尝试解决，另外（1.6版本）部分机型对4.4以上版本的安卓系统兼容性不佳，建议刷4.3或更低版本ROM。


新手该如何抓图、抓坐标？

将手机用数据线连接电脑，在电脑上用按键精灵手机助手的抓抓工具，即可获取手机画面截图，并进行抓点、抓色、截图等操作。


手机上能抓坐标吗？

勾选【手机系统设置-开发者选项-指针位置】即可在屏幕顶端显示当前触摸位置坐标啦，其实大多数情况下我们只要估算一下想点击的按钮在屏幕中百分之多少的位置，然后代码里获取一下手机分辨率，乘上百分比就可以点到按钮了，不一定非要精确取到按钮坐标。


可以自行设计脚本界面UI吗？

支持一键插入UI函数进行界面设计，未来也会支持直观的用控件自行绘制界面。


横屏游戏抓坐标时和竖屏一样吗？

通常编写游戏脚本，游戏画面左上角坐标为(0,0)，但对手机横屏游戏来说，游戏画面实际上进行了90度翻转，那么就带来一个问题，(0,0)起点坐标究竟要在手机屏幕左上角，还是在游戏画面的左上角，两种方式各有利弊，经过按键研发团队仔细研究，决定在按键精灵安卓1.2公测版本中采用坐标固定方式，即无论画面如何翻转，起点坐标均以手机屏幕左上角为准，这种方式在代码和脚本使用上最容易理解上手。

下面就来谈谈横屏游戏编写具体有哪些注意事项：

1、PC抓抓工具在截取横屏游戏截图时，截图将竖着显示。
如图：

2、当需要使用找图功能时，我们截的附件图片也必须是竖着的。
如图：

3、对于可以向左或向右自动旋转的游戏来说，作者制作脚本时是朝哪个方向旋转，那么也需要在使用说明里告诉用户朝哪个方向旋转才能正常使用。

4、部分平板电脑的旋转方向可能和手机不一致导致脚本无法通用，需注意。


为何有时候脚本运行一半就停止了？

请先检查屏幕右边的脚本控制浮窗是否消失，如果浮窗消失则可能是因为手机内存不足造成的，安卓系统内存不足时会自动清理后台程序，运行时游戏属于前台程序，脚本属于后台程序，内存不足时就可能被系统清理，如果浮窗没有消失请检查代码是否陷入死循环，可使用TracePrint 函数调试输出查看。


脚本浮窗遮挡游戏画面怎么办？

可以关闭浮窗，使用物理热键控制脚本，也可以使用浮窗位置设置函数SetControlBarPos来固定浮窗位置，防止挡住关键画面。


写好的脚本如何分享给其他人使用呢？

点击手机助手上方“导出”按钮，填写相关信息生成APK安装包，发送他人安装后即可使用。


手机上写脚本如何使用找图功能？

手机上无法添加脚本附件，如果一定要用找图功能，可以使用图片在手机上的绝对路径，用RE管理器等文件管理工具可以查看文件真实路径，然后在找图函数里使用绝对路径。

如：
//在范围(0,0,1080,1920)内，查找图片("sdcard/pictures/1.png")，偏色(000000)，方向(0表示从左上往右下查找)，相似度(0.9)，返回坐标(IntX,IntY)。
Dim intX, intY
FindPic 0, 0, 1080, 1920, "sdcard/pictures/1.png", "000000", 0, 0.9, intX, intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > -1 And intY > -1 Then
//说明找到
End If


写好的脚本可以对用户进行销售吗？

打开一个脚本，进入“发布”菜单中选择“制作按键小精灵”，然后登录帐号后，勾选收费项，填写相应费用并生成即可。


为何感觉找图、找色速度较慢？

刚触按键精灵手机版的作者可能会发觉找图、找色的速度效率与按键精灵电脑版相比来说慢了一些，这是由于目前安卓系统手机机制与电脑上找图、找色有所区别，获取图像时不可避免会存在短暂延时，每次大约消耗100毫秒左右的时间，所以大家在写类似循环找图、找色时需注意添加适当的延时。

提高找图、找色效率的有以下3种方式：

1、善于利用按键手机版新增KeepCapture与ReleaseCapture函数。
KeepCapture：截取当前图片并保存在缓存中，并让接下来的所有找图、找色都在这张缓存图中查找。
ReleaseCapture：清除缓存中图片数据，之后的所有找图、找色函数都恢复获取最新手机画面进行查找。

2、在范围找图时，附件中的图片尽可能截取尺寸恰当。
附件中的图片尺寸要尽可能的小，在保证所需判断图像信息内，现在手机分辨率都很高，一张看上去很小的图，在电脑上看原始尺寸其实是很大的，查找越大图片耗时越长反之越短。

3、尽可能精确找图、找色的查找范围。
可以事先通过按键抓抓辅助工具确认一下图色的大致屏幕范围，越小范围查找图色耗时越短，反之越长。

下面我们举一个常见的循环找图、找色判断当前状态的脚本例子来说明一下如何提高速度

============普通找图、找色用法============
Dim rColor,intX,intY
Do
//范围查找图片1
FindPic 0,0,1080,1920,"Attachment:图片1.png","000000",0,0.9,intX,intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > 0 And intY > 0 Then
TracePrint "找到图片1"
End If
//范围查找图片2
FindPic 0,0,1080,1920,"Attachment:图片2.png","000000",0,0.9,intX,intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > 0 And intY > 0 Then
TracePrint "找到图片2"
Exit Do
End If
//范围找色颜色0000FF(红色)是否存在
FindColor 0, 0, 0, 0, "0000FF", 0, 0.9, intX, intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > -1 And intY > -1 Then
TracePrint "找色红色"
End If
//获取坐标点(100, 200)的颜色值
rColor = GetPixelColor(100, 200)
//对比获取颜色值是否为白色
If rColor="FFFFFF" Then
TracePrint "是白色"
End If
Loop

说明：
1、每次执行找图、找色命令则需从手机屏幕中获取最新图像信息存于内存用于信息匹配，每次耗时约100毫秒左右（与手机CPU配置与执行效率有关）。
2、以上例子是两次范围找图、一次范围找色与一次固定点取色对比判断，共4次。
3、大致计算下以上例子在获取图像信息步骤大约花费400毫秒时间，等于说每次循环至少耗时400毫秒左右。

============优化找图、找色用法============
Dim rColor,intX,intY
Do
//保存当前画面图像信息于内存中，之后所有找图、找色函数将在此图中查找
KeepCapture
//范围查找图片1
FindPic 0,0,1080,1920,"Attachment:图片1.png",0,0.9,intX,intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > 0 And intY > 0 Then
TracePrint "找到图片1"
End If
//范围查找图片2
FindPic 0,0,1080,1920,"Attachment:图片2.png",0,0.9,intX,intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > 0 And intY > 0 Then
TracePrint "找到图片2"
Exit Do
End If
//范围找色颜色0000FF(红色)是否存在
FindColor 0, 0, 0, 0, "0000FF", 0, 0.9, intX, intY
//如果没有找到，intX和intY的值都会被置为-1
If intX > -1 And intY > -1 Then
TracePrint "找色红色"
End If
//获取坐标点(100, 200)的颜色值
rColor = GetPixelColor(100, 200)
//对比获取颜色值是否为白色
If rColor="FFFFFF" Then
TracePrint "是白色"
End If
//释放之前保存在内存中的图像信息，之后所有找图、找色将恢复正常获取图像判断方式
ReleaseCapture
Loop

说明：
1、以上例子对比普通用法，只是在循环头尾加入了KeepCapture和ReleaseCapture函数。
2、在执行KeepCapture函数后，之后执行的找图、找色函数都将直接从以上保存的图像信息中进行查找，无需每次耗时100毫秒左右时间重新从屏幕中获取。
3、以此计算，每次循环等于就消耗开头执行KeepCapture函数后的100毫秒左右，提升效率显而易见，后面无论多少次的找图、找色函数都不会额外消耗获取图像信息的时间。
4、关于ReleaseCapture函数在此特别说明，如需恢复正常找图、找色方式，可执行释放，否则可直接执行KeepCapture函数进行后续查找。


如何写才能让脚本支持多种分辨率的手机呢？

善于利用SetScreenScale函数可以让脚本兼容多种分辨率。
参数说明：
参数1：数值类型，横坐标
参数2：数值类型，纵坐标
参数3：数值类型，为可选参数，开启或关闭；0表示开启，1表示关闭，不写表示1默认关闭

使用范例：
假设在540*960分辨率的手机屏幕中开发了脚本，并在720*1280的设备中运行。

效果说明如下：

//执行SetScreenScale函数
SetScreenScale 540,960,0

Tap 100,200
说明：执行触屏点击坐标(100,200)，由于之前执行开启屏幕自适应函数，此处实际点击坐标为：“100*(720/540),200*(1280/960)”，以此方式来让540*960下的坐标值对应同比例（≈1.33倍）720*1280分辨率所在坐标位置。

Dim IntX,IntY
FindMultiColor 0, 0, 720, 1280,"FFFFFF","5|10|0000FF,10|15|000000",0,0.9,intX,intY
说明：执行区域范围多点找色，以上参数中所有的坐标值都将按照“横坐标=横坐标*(当前屏幕横向分辨率X/540)，纵坐标=纵坐标*(当前屏幕纵向分辨率Y/960)。”

以此类推：
执行“SetScreenScale 横坐标,纵坐标,0”函数，开启自适应功能之后，全部横纵坐标都将以此公式进行换算后执行。
执行“SetScreenScale 横坐标,纵坐标,1”函数，关闭自适应功能之后，全部横纵坐标将恢复原始数值正常带入执行。


按键精灵手机版支持找字功能吗？

可以，但与按键精灵PC版本那般完善的找字方式不同。
找字的本质其实是逐一识别组成这个字的点阵是否匹配，需要事先准备好包含每个字点阵信息的字库文件，脚本根据字库中匹配的点阵来识别当前文字。
在安卓手机中，由于手机款式与系统版本不同，并无像PC电脑那般形成统一的字体格式，所以如果要识别文字或字符类型的图像信息，可以使用多点找色的方式来代替实现。

函数说明：FindMultiColor 函数

例子：
FindMultiColor 0, 0, 720, 1280,"FFFFFF-000000","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY
If intX <> -1 Then
TracePrint "找到，坐标在" & intX & "," & intY
End If

提示：常用于区域范围查找图像特征，相比找图函数，该函数更为高效，并可配合屏幕自适应函数兼容多种分辨率来使用，而找图却无法支持。


为何个别程序里点击和滑动有时会失效/不灵敏？

1、触屏点击(Tap x,y)操作的本质其实是按下(TouchDown x,y,标记)+等待(Delay 毫秒)+弹起(TouchUp 标记)。
2、滑动(Swipe x1,y1,x2,y2)操作的本质其实是按下(TouchDown x,y,标记)+等待(Delay 毫秒)+移动(TouchMove x,y,标记)+等待(Delay 毫秒)+弹起(TouchUp 标记)。

说明：
为了方便使用，按键精灵把它们直接封装为点击(Tap x,y)、滑动(Swipe x1,y1,x2,y2)两个函数，其中延时(Delay 毫秒)为写死的短暂固定延时。但个别软件中操作时，限制了按下后的等待时间要大于若干毫秒，再弹起才是有效的点击操作，否则判定为误操作。
同理，对于滑动操作也有此类限制，滑动操作速度如果过快，则判定无效操作，或者滑动后有惯性继续移动，导致滑动(Swipe x1,y1,x2,y2)函数中固定的延时无法起到精确划动效果。遇到这些特殊情况时，可更换按下(TouchDown x,y,标记)，再拖拽划动(TouchMove x,y,标记)，然后等待一定时间(Delay 毫秒)，再弹起(TouchUp 标记)的方式，来解决此类问题。


不同手机颜色差异问题怎么兼容？

1、在安卓设备中即使是同一个软件画面，在不同款式手机屏幕中的颜色也有可能存在细微差别。
2、在此建议找图、找色的相似度设置0.8~0.9，少数情况也可能需要设置0.7~0.8相似度来兼容识别。

提示：正常找图、找色相似度不可低于0.7，否则容易存在较大的误判。


找图函数支持透明图和BMP格式吗？

都支持，查找透明图只要图片四个直角点的颜色一致，则被脚本引擎认为背景色，在找图过程中是被过滤的颜色，只查找非背景色部分。

提示：作图可以利用其他图片处理工具自行涂改制作透明图，后期官方也会优化相关工具。


颜色对比要怎么写？

如果需要对单个坐标点做多个颜色判断，可以使用CmpColor函数来解决。
函数说明：CmpColor 函数


如何调用LUA插件？

1、下载官方发布的lua插件文件，放到按键精灵安装目录下的plugin文件夹中。
2、在脚本源码开头执行导入插件文件函数，即可正常调用lua文件中编写好的lua命令。

例如调用FileEx.lua插件文件：
//导入插件
Import "FileEx.lua"
//写入文本信息（路径，内容）
Call FileEx.Write("/storage/sdcard0/MobileAnjian/anjian.txt","我爱按键精灵")
//读取文本信息（路径）
Dim 返回值
返回值=FileEx.Read("/storage/sdcard0/MobileAnjian/anjian.txt")
TracePrint 返回值

下载FileEx.lua插件文件与详解


函数语法中的[ ]是什么意思？

[]内的参数表示可以省略不写。
例如：
SetControlBarPos location[, state]

第一种（省略[]内的内容）
SetControlBarPos 0
第二种（不省略参数，完整调用函数）
SetControlBarPos 0,1


主界面

在这里可以查看软件主体功能，可由此处进行新建脚本、编辑脚本等操作。

如图:


脚本列表

点击“我的脚本”便可打开脚本列表查看各个脚本的名单分类。

如图:


编辑界面

在此界面可以对当前打开脚本进行编写制作。

如图:


命令界面

可在此查看按键安卓版最常用的命令功能，并插入编写脚本。

如图:


脚本界面设计

界面设计可以插入对应控件命令来编写UI界面。

如图：


脚本附件界面

可把常规找图用到的图片添加进入，用于找图命令调用。

如图：


设备连接

该处可点击启用设备连接或断开，此外在默认打开按键精灵安卓版（或按键抓抓）时也将自动连接。

如图：


导出安卓APK

导出“小精灵”独立APK安装包，即可安装在手机上使用。

说明：
1、在编辑界面上方功能栏中可查看到“发布”功能点开,然后选择制作按键小精灵。
2、对应界面内容填写包名，更换个人喜爱的头像图标，选择脚本适用分辨率

点击“生成小精灵”按钮即可。（注意图标格式PNG，分辨率不可超出144*144）

如图：


如果获取Root权限图文教程

一、在按键精灵手机版主界面，点击“一键Root”按钮，开启Root工具界面。

如图：

二、点击“一键Root”后进入等待。

如图：

三、在成功获取Root权限后即可完成第一个步骤。

如图：

最后：在Root成功后，手机将会自动安装一个Root管理软件，打开即可进行权限设置，默认情况开启相关应用程序也会由所提示。

如图：


如何使用按键抓抓辅助工具

一、新版功能。

1、支持图片多标签显示。
描述：勾起“在新标签页中打开图片”选项，点击“截屏”按钮，即可获取最新手机图像在新的标签页中显示。
如图：

2、截图在新标签中打开。
描述：如上图所示，勾起功能选项后，重新截图一律会新建标签中显示。
注意：目前版本标签只支持10页，多出则提示无法打开。
如图：

3、连续截图在新标签中打开。
描述：勾起“连续截屏”与“在新标签页中打开图片”选项 ，并在下拉框中选择好截图的次数，在点击“截屏”按钮时即可连续截多图。
用意：在动态画面效果下，由于从手机获取图片存在一定延时，无法截到满意画面，则可利用该功能进行多图连续截屏获取。
如图：

4、加载本地图片。
描述：点击“加载”按钮，即可选择本地PNG格式图片加入抓抓工具。
如图：

二、更新功能。

1、取色区。
描述：功能上依然开设十个单点颜色信息记录功能，增加颜色框显示功能。
方式1：点击“取色”选项下列颜色框，鼠标即切换为取色模式，则会自动打开放大镜，查看当前标签中图片，左键点击即可记下当前颜色信息。
方式2：热键“Ctrl+1”也可快捷方式开启取色模式。（序号0-9）
如图：

2、命令生成调试。
描述1：选取范围，点击后可对当前标签图片进行范围选取，方便获取范围坐标。（具体效果就请自行使用便知）
描述2：生成命令选择，支持三个找色模式代码生成，分别是“区域多点找色（FindMultiColor）”、“区域多色找色（FindColor）”与“固定多点比色。（CmpColorEx）”。
细节介绍：以上三种判断颜色方式所去的特征信息均由“取色区”列表选择后勾选而来。
如图：

区域范围：默认（0,0,0,0）在手机按键中指当前全屏范围。
相似度：一般建议设置0.9，指百分之九十相似度匹配。（范围：0.0-1.0，一般相似度不建议低于0.7，推荐0.7-0.9，否则可能判断到别的类似颜色去）
以下是三种模式根据以上取色区的信息生成的代码。（注：取色区十个颜色记录位置必须勾起才可以生成，多个颜色可自行决定是否选入）

① 区域多点找色（FindMultiColor）
FindMultiColor 0,0,0,0,"A54152","10|34|C571A4,19|57|CE65AD",0,0.9,intX,intY
If intX>-1 And intY>-1 Then
//找到多点特征，全屏范围查找多点颜色，未找到IntX与IntY返回均为-1
End If

② 区域多色找色（FindColor）
FindColor 0,0,0,0,"A54152|C571A4|CE65AD",0,0.9,intX,intY
If intX>-1 And intY>-1 Then
//找色范围颜色，全屏范围查找以上三种颜色，任意一种找到则返回坐标
End If

③ 固定多点比色
If CmpColorEx("331|311|A54152,341|345|C571A4,350|368|CE65AD",0.9)=1 Then
//以上三个坐标位置颜色匹配一致
End If

或

Dim 返回值
返回值=CmpColorEx("331|311|A54152,341|345|C571A4,350|368|CE65AD",0.9)
If 返回值=1 Then
//以上三个坐标位置颜色匹配一致
End If

三、其它功能。

1、保存图片。
描述：点击“保存”按钮，即可对当前标签图片进行本地保存。

2、图片拖拽。
描述：鼠标左键按住，即可对当前标签图片进行拖拽操作。

3、剪裁图片。
描述：点击“剪裁”按钮，即可对当前标签图片进行剪裁操作。


如何使用抓抓制作字库图文教程

整体流程图：如下图

以提取手机上按键精灵文字做字库具体演示例子：

一、连接好手机后在按键精灵手机版主界面，点击“抓抓”按钮，打开抓抓界面，手机画面切换到按键精灵程序所在页面然后点击截屏一次

如下图：

二、点击抓抓界面“选取范围”按钮后鼠标移回图片区域会变成华丽箭头状态，此时圈选截屏画面上的“按键精灵”四个文字后双击鼠标左键或点击确定按钮，右边二值化区域会显示出圈选后得到图片

如下图：

三、成功圈选图片后，此时进入取点操作，目前有3种取点方法（一般是取图像中所占比例最高的点）

1、 点击相应点的取色框（下图红色框框位置），鼠标移动到相应坐标点后鼠标左键点击(推荐此方法)

2、 鼠标移动到相应坐标点直接按快捷键 “Ctrl”+1-9 数字键（1代表点1,2代表点2，依此类推）

3、 在相应坐标点右击鼠标选择加入到第几个点 如下图：

四、取色点完毕后记得勾选上相应色点，此时查看二值化区域显示内容对相应点进行偏色调节，直到二值化区域能清晰的显示出文字或图片二值化后的图像

勾选色点后未调节偏色前 如下图:

勾选色点后逐步调节偏色后 (偏色范围一般可以111111,222222,333333,444444逐步上升) 如下图：

五、清晰二值化所选择图像后点击抓抓右上角制作字库按钮，切换到制作字库视图，可以开始提取点阵信息做字库（建议单个提取，多个提取由于目前还没有作间距功能，通常提取的单个字符是分开的,需要额外多取一个粘连的点，这边就不具体演示了）

提取单个点阵信息 如下图：

六、选中此点阵定义其对应的文字名，定义好文字并回车添加到字库文件后，此时相应字库文件里就会有该条点阵信息（此时根据需要可以如法炮制再选取其他范围图像继续提取点阵信息继续添加），另外识别结果框里会自动识别出该点阵信息所对应的文字名 如下图

七、字库都添加添加完毕后可以点击字库另存为选项把字库文件放到自己想放的路径下

八、综上所述，只含有按键精灵点阵信息的字库文件就做好了，可以直接添加到附件进行找字命令使用了,其实制作字库的方法与大漠做字库的方法基本一致，所有用大漠制作的字库也是通用的(大漠字库识别时要注意进行颜色值RGB-BGR的转换)


KeyPress 按键

命令名称： KeyPress 按键
命令功能： 按一次指定键
语法格式： KeyPress virtual_key
参数说明：
virtual_key：可以是字符串类型，表示某个键的名字；也可以是数值类型，
表示某个键的编码
返回值： 无
脚本例子：

KeyPress "Home" //模拟按一次<房子>键
KeyPress "A"        //模拟按一次字母A键
备注：
我们在使用键盘的时候有两种操作，一种是“按下”键，一种是“弹起”键，
将这两个动作连续进行，就是一个完整的“按键”动作

按键功能   按键名称（不区分大小写）
----------------------------------
主页键     Home
返回键     Back
打电话     Call
挂电话     EndCall
音量增加   VolUp
音量减少   VolDown
电源键     Power
相机键     Camera
菜单键     Menu
向上翻页   PageUp
向下翻页   PageDown
数字键     0123456789
字母键     26个字母
标点键     ,.-=[]/\;@+

【键码表】
虚拟键码 字符常量   说明
0        无         未知键
1        无         未知键
2        无         未知键
3        home       home键
4        back       返回键
5        call       拨打电话键
6        endcall    挂电话键
7        0          数字0
8        1          数字1
9        2          数字2
10       3          数字3
11       4          数字4
12       5          数字5
13       6          数字6
14       7          数字7
15       8          数字8
16       9          数字9
17       *          *号
18       #          #号
19       dpadup     导航键 向上
20       dpaddown   导航键 向下
21       dpadleft   导航键 向左
22       dpadright  导航键 向右
23       dpadcenter 导航键 确定键
24       volup      音量加
25       voldown    音量减
26       power      电源键
27       camera     相机
28       无         无
29       A          A键
30       B          B键
31       C          C键
32       D          D键
33       E          E键
34       F          F键
35       G          G键
36       H          H键
37       I          I键
38       J          J键
39       K          K键
40       L          L键
41       M          M键
42       N          N键
43       O          O键
44       P          P键
45       Q          Q键
46       R          R键
47       S          S键
48       T          T键
49       U          U键
50       V          V键
51       W          W键
52       X          X键
53       Y          Y键
54       Z          Z键
55       ,          逗号
56       .          .号
57       altleft    altleft
58       altright   altright
59       shiftleft  shiftleft
60       shiftright shiftright
61       tab        tab
62       space      空格
63       无         未知键
64       无         未知键
65       无         未知键
66       enter      回车
67       del        del
68       `          `键
69       -          减号
70       =          等号
71       [          方括号
72       ]          方括号
73       \          未知键
74       ;          分号
75       '          单引号
76       /          /键
77       @          @符号
78       无         未知键
79       无         未知键
80       focus      拍照对焦键
81       +          加号
82       menu       菜单
83       notification     通知键
84       search           搜索键
85       mediaplaypause   多媒体暂停/播放
86       mediastop        多媒体键 停止
87       medianext        多媒体键 下一首
88       mediaprevious    多媒体键 上一首
89       mediarewind      多媒体键 快退
90       mediafastforward 多媒体键 快进
91       mute       话筒静音键
92       pageup     上一页
93       pagedown   下一页
94       无         未知键
95       无         未知键
96       gamepadbuttonsA          游戏手柄按钮 A
97       gamepadbuttonsB          游戏手柄按钮 B
98       gamepadbuttonsC          游戏手柄按钮 C
99       gamepadbuttonsX          游戏手柄按钮 X
100      gamepadbuttonsY          游戏手柄按钮 Y
101      gamepadbuttonsZ          游戏手柄按钮 Z
102      gamepadbuttonsL1         游戏手柄按钮 L1
103      gamepadbuttonsL2         游戏手柄按钮 L2
104      gamepadbuttonsR1         游戏手柄按钮 R1
105      gamepadbuttonsR2         游戏手柄按钮 R2
106      gamepadbuttonsLeftThumb  Left Thumb Button
107      gamepadbuttonsRightThumb Right Thumb Button
108      gamepadbuttonsStart      游戏手柄按钮 Start
109      gamepadbuttonsSelete     游戏手柄按钮 Select
110      gamepadbuttonsMode       游戏手柄按钮 Mode
111      esc        ESC键
112      backspace  删除键
113      ctrlleft   ctrlleft键
114      ctrlright  ctrlright键
115      capslock   大写锁定键
116      scrolllock 滚动锁定键
117      未知       未知键
118      未知       未知键
119      未知       未知键
120      未知       未知键
121      pause      pause键
122      movehome   光标移动到开始
123      moveend    光标移动到末尾
124      insert     insert键
125      未知       未知键
126      mediaplay   多媒体键 播放
127      mediapause  多媒体键 暂停
128      mediaclose  多媒体键 关闭
129      mediaeject  多媒体键 弹出
130      mediarecord 多媒体键 录音
131      f1         f1键
132      f2         f2键
133      f3         f3键
134      f4         f4键
135      f5         f5键
136      f6         f6键
137      f7         f7键
138      f8         f8键
139      f9         f9键
140      f10        f10键
141      f11        f11键
142      f12        f12键
143      numlock    小键盘锁
144      0          小键盘0
145      1          小键盘1
146      2          小键盘2
147      3          小键盘3
148      4          小键盘4
149      5          小键盘5
150      6          小键盘6
151      7          小键盘7
152      8          小键盘8
153      9          小键盘9
154      /          除号
155      *          乘号
156      -          减号
157      +          加号
158      .          点号
159      ,          逗号
160      enter      回车键
161      =          等号
162      (          左括号
163      )          右括号
164      volmute    扬声器静音键
165      无         未知键
166      无         未知键
167      无         未知键
168      zoomin     放大键
169      zoomout    缩小键
170      无         未知键
171      无         未知键
172      无         未知键
173      无         未知键
174      无         未知键
175      无         未知键
176      无         未知键
177      无         未知键
178      无         未知键
179      无         未知键
180      无         未知键
181      无         未知键
182      无         未知键
183      无         未知键
184      无         未知键
185      无         未知键
186      无         未知键
187      无         未知键
188      gamepadbuttons1  通用游戏手柄按钮#1
189      gamepadbuttons2  通用游戏手柄按钮#2
190      gamepadbuttons3  通用游戏手柄按钮#3
191      gamepadbuttons4  通用游戏手柄按钮#4
192      gamepadbuttons5  通用游戏手柄按钮#5
193      gamepadbuttons6  通用游戏手柄按钮#6
194      gamepadbuttons7  通用游戏手柄按钮#7
195      gamepadbuttons8  通用游戏手柄按钮#8
196      gamepadbuttons9  通用游戏手柄按钮#9
197      gamepadbuttons10 通用游戏手柄按钮#10
198      gamepadbuttons11 通用游戏手柄按钮#11
199      gamepadbuttons12 通用游戏手柄按钮#12
200      gamepadbuttons13 通用游戏手柄按钮#13
201      gamepadbuttons14 通用游戏手柄按钮#14
202      gamepadbuttons15 通用游戏手柄按钮#15
203      gamepadbuttons16 通用游戏手柄按钮#16
204      无         未知键
205      无         未知键
206      无         未知键
207      无         未知键
208      无         未知键
209      无         未知键
210      无         未知键
211      无         未知键
212      无         未知键
213      无         未知键
214      无         未知键
215      无         未知键
216      无         未知键
217      无         未知键
218      无         未知键
219      无         未知键
220      无         未知键
221      无         未知键
222      无         未知键


KeyDown 按住

命令名称： KeyDown 按下
命令功能： 按住指定键不放
语法格式： KeyDown virtual_key
参数说明：
virtual_key：可以是字符串类型，表示某个键的名字；也可以是数值类型，
表示某个键的编码
注意：KeyDown命令与KeyUp命令需配套使用
返回值： 无
脚本例子：

//下面是模拟手动关机的例子
KeyDown "Power"  //模拟按住电源键不放
Delay 3000    //延时3秒
KeyUp "Power"   //松开电源键
备注：
我们在使用键盘的时候有两种操作，一种是“按下”键，一种是“弹起”键
将这两个动作连续进行，就是一个完整的“按键”动作
切记，有“按下”就必须要有“弹起”，千万不要只“按下”，不“弹起”


KeyUp 弹起

命令名称： KeyUp 弹起
命令功能： 弹起指定键
语法格式： KeyUp virtual_key
参数说明：
virtual_key：可以是字符串类型，表示某个键的名字；也可以是数值类型，
表示某个键的编码
返回值： 无
脚本例子：

//下面是模拟手动关机的例子
KeyDown "Power"  //模拟按住电源键不放
Delay 3000    //延时3秒
KeyUp "Power"   //松开电源键
备注：
我们在使用键盘的时候有两种操作，一种是“按下”键，一种是“弹起”键，
将这两个动作连续进行，就是一个完整的“按键”动作。
切记，有“按下”就必须要有“弹起”，千万不要只“按下”，不“弹起”。


Swipe 划动

命令名称： Swipe 划动
命令功能： 模拟手指在屏幕上的划动操作,从点1划动到点2，可以设置划动耗时。
语法格式： Swipe x1,y1,x2,y2[,time]
参数说明：
x1:整数型,划动的起点x坐标
y1:整数型,划动的起点y坐标
x2:整数型,划动的终点x坐标
y2:整数型,划动的终点y坐标
time:整数型,划动耗时(可省略),单位毫秒,省略默认为100毫秒
返回值： 无
脚本例子：

//用300毫秒的时间，从点100,100划动到点200,200
Swipe 100,100,200,200,300
备注：
坐标是通过抓抓来获取的，不管你的设备画面是横屏还是竖屏，
所有坐标一律都是以抓抓显示为准。
注意划动耗时的单位是毫秒，1秒 = 1000毫秒。滑动(Swipe x1,y1,x2,y2)
操作的本质其实是:按下(TouchDown x,y,标记)+等待(Delay 毫秒)+
移动(TouchMove x,y,标记)+等待(Delay 毫秒,已被固定写死)+弹起(TouchUp 标记)


Tap 点击

命令名称： Tap 点击
命令功能： 短暂点击屏幕上指定的位置
语法格式： Tap x1,y1
参数说明：
x1:整数型,横坐标
y1:整数型,纵坐标
返回值： 无
脚本例子：
//点击屏幕坐标100,100位置
Tap 100,100
备注：
坐标是通过抓抓来获取的，不管你的设备画面是横屏还是竖屏，
所有坐标一律都是以抓抓显示为准。
注意:触屏点击(Tap x,y)操作的本质其实是按下(TouchDown x,y,标记)+
等待(Delay 毫秒,被固定写死)+弹起(TouchUp 标记)


Touch 按住一段时间

命令名称： Touch 按住一段时间
命令功能： 点击屏幕上的指定位置，并持续按住一段时间
语法格式： Touch x1,y1,time
参数说明：
x:整数型,横坐标
y:整数型,纵坐标
time:整数型,持续时间,单位为毫秒
返回值： 无
脚本例子：
//点击屏幕坐标(100,100)的点，并持续按住100毫秒（0.1秒）
Touch 100,100,100
备注：
坐标是通过抓抓来获取的，不管你的设备画面是横屏还是竖屏，所有坐标一律都是以抓抓显示为准。
注意持续时间的单位是毫秒，1秒 = 1000毫秒。


TouchDown 按住不放

命令名称： TouchDown 按住不放
命令功能： 按下屏幕上指定位置的点,目前支持同时按下5个点
语法格式： TouchDown x1,y1[,id]
参数说明：
x:整数型,横坐标
y:整数型,纵坐标
id:整数型,可选参数，这个触点的自定义ID,建议取值范围为[-9999,9999]

注意：TouchDown命令与TouchUp命令需配套使用
返回值： 无
脚本例子：

//以下是多点触控的例子
TouchDown 100, 100, 1//按住屏幕上的100,100坐标不放，并设置此触点ID=1
TouchDown 200, 200, 2//按住屏幕上的200,200坐标不放，并设置此触点ID=2
TouchMove 300, 300, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标
TouchMove 500, 500, 2, 200//将ID=2的触点花200毫秒移动至500,500坐标
TouchUp 1//松开弹起ID=1的触点
TouchUp 2//松开弹起ID=2的触点
备注：
坐标是通过抓抓来获取的，不管你的设备画面是横屏还是竖屏，
所有坐标一律都是以抓抓显示为准。
如果同时按下5个点，可以通过设置不同的触点ID，配合TouchMove与TouchUp
对每一个位置的触点进行单独移动弹起。


TouchMove 滑动

命令名称： TouchMove 滑动
命令功能： 模拟滑动操作
语法格式： TouchMove x1,y1[,id,time]
参数说明：
x:整数型,要移动到的目标横坐标
y:整数型,要移动到的目标纵坐标
id:整数型,可选参数，这个触点的自定义ID，建议取值范围为[-9999,9999]
time：滑动到目标点的耗时，可省略，单位毫秒，如果省略的话默认是100毫秒
返回值： 无
脚本例子：

//以下是多点触控的例子
TouchDown 100, 100, 1//按住屏幕上的100,100坐标不放，并设置此触点ID=1
TouchDown 200, 200, 1//按住屏幕上的200,200坐标不放，并设置此触点ID=2
TouchMove 300, 300, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标
TouchMove 500, 500, 2, 200//将ID=2的触点花200毫秒移动至500,500坐标
TouchUp 1//松开弹起ID=1的触点
TouchUp 2//松开弹起ID=2的触点
备注：
坐标是通过抓抓来获取的，不管你的设备画面是横屏还是竖屏，所有坐标一律都是以抓抓显示为准。
注意滑动耗时的单位是毫秒，1秒 = 1000毫秒。
此命令需要配合TouchDown方可有效


TouchUp 弹起

命令名称： TouchUp 弹起
命令功能： 弹起TouchDown命令按下的点
语法格式： TouchUp [id]
参数说明：
id:整数型,可选参数，这个触点的自定义ID
返回值： 无
脚本例子：

//以下是多点触控的例子
TouchDown 100, 100, 1//按住屏幕上的100,100坐标不放，并设置此触点ID=1
TouchDown 200, 200, 1//按住屏幕上的200,200坐标不放，并设置此触点ID=2
TouchMove 300, 300, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标
TouchMove 500, 500, 2, 200//将ID=2的触点花200毫秒移动至500,500坐标
TouchUp 1//松开弹起ID=1的触点
TouchUp 2//松开弹起ID=2的触点
备注：
此命令需要配合TouchDown方可有效。


If 如果..则 (判断表达式并执行语句)

命令名称： If 如果..则 (判断表达式并执行语句)
命令功能： 如果条件表达式成立，则执行对应语句
语法格式：
If 条件  Then
执行语句
End If
参数说明：
参数1 条件型，任意有效表达式
返回值： 无
脚本例子：

例子1：
Dim i=0
If i=0 Then
    TracePrint "条件判断符合被通过!!"
End If
//通过判断表达式的取值，来执行后面的动作或控制
例子2：
Dim i=0
If i=0 Then
    TracePrint "条件判断符合被通过!!"
ElseIf i=1 Then
    TracePrint "否则条件判断符合被通过!!"
Else
    TracePrint "否则!!"
End If
//通过判断表达式的取值，来执行后面的动作或控制
备注：
If判断相当于我们口语中说的如果……则……否则如果……则……否则……
一个If判断必须要有一个End If来配对，里面的ElseIf可以有多个，
但是Else最多只能有一个，并且Else只能放在最后一个条件上
Select Case语句与If语句类似，但是两者也有区别
If主要用于多个不同条件的判断，而Select Case则是用于同一个条件多个不同结果的判断


Select Case 情况条件选择

命令名称： Select Case 情况条件选择
命令功能： 根据情况条件来选择执行对应语句
语法格式：
Select Case 变量
Case 值1[,值2,...]
执行语句1
Case Else
执行语句2
End Select
循环体
Wend
参数说明：
变量：任意有效变量，检查是否与下面值相等。
值：任意有效值，不支持判断语句，多个值用逗号“,”隔开表示逻辑运算中的“或”运算。
执行语句：任意有效代码语句。
返回值： 无
脚本例子：

//不支持判断语句 如：Case a>0
//<>---------------------------------------------以下是选择条件结结构判断
Dim 变量=1
Select Case 变量
Case 0,1    可支持判断多个值,中间以逗号隔开
    TracePrint "你输入的数字为：0或者1"
Case 2
    TracePrint "你输入的数字为：2"
Case 3
    TracePrint "你输入的数字为：3"
Case 4
    TracePrint "你输入的数字为：4"
Case 5
    TracePrint "你输入的数字为：5"
Case 6
    TracePrint "你输入的数字为：6"
Case 7
    TracePrint "你输入的数字为：7"
Case 8
    TracePrint "你输入的数字为：8"
Case 9
    TracePrint "你输入的数字为：9"
Case Else
    TracePrint "你输入的数字不正确，请输入（0~9）数字！"
End Select
备注：
Select Case后面跟的是一个变量，下面Case条件跟的是值，
不能跟判断语句，比如i>0之类的不支持
一个Select Case判断必须要有一个End Select来配对，里面的Case可以有多个，
但是Case Else最多只能有一个，并且Case Else只能放在最后一个条件上
Select Case语句与If语句类似，但是两者也有区别
If主要用于多个不同条件的判断，而Select Case则是用于同一个条件多个不同结果的判断


Do 循环

命令名称： Do 循环
命令功能： 条件循环语句。可以是无限循环，也可以是有限循环
语法格式：
5种语法格式，详见例子1—5
参数说明：
参数1 条件：判断条件表达式
参数2 循环体：任意有效代码语句
返回值： 无
脚本例子：
例子1：
//支持Exit Do 命令退出循环
Do
    TracePrint "我停不下来啦!!快住手"
Loop
//最常见的无限循环（死循环）

例子2：
Dim i=0
Do While i=0
    TracePrint "我停不下来啦!!快住手"
Loop
//当循环条件成立的时候，反复执行循环体

例子3：
Dim i=0
Do Until i=0
    TracePrint "为什么没有循环到我呢？"
Loop
TracePrint "循环结束"
//当循环条件成立的时候，离开循环体

例子4：
Dim i=0
Do Until i=1
    TracePrint "我停不下来啦!!快住手"
Loop
//当循环条件不成立的时候，反复执行循环体

例子5：
Dim i=0
Do
   TracePrint "ok"
Loop While i <> 0
//条件放后面，前面的循环内容可以执行一次！

例子6：
Dim n=0
Do While true
    TracePrint "我将循环10次停下来!!"
    If n>=10 Then
        //当循环条件成立的时候，离开循环体
        Exit do
    End if
    n=n+1
Loop
TracePrint n & "次"
备注：
Do循环通常用于无限循环与条件循环，要注意While和Until的位置与条件，
如果怕弄迷糊的话，那么就使用If结合Exit Do作为退出条件
Exit Do只能退出当前的Do循环。


For 循环一定次数

命令名称： For 循环一定次数
命令功能： 循环语句。可以循环一定次数，也可以按照变量的起始数值到终止数值循环（如果不指定步长数值，默认步长为1）
语法格式：
2种语法格式,详见例子1、2

For 次数
执行语句
Next
参数说明：
参数1 整数型，循环次数
返回值： 无
脚本例子：

例子1：固定循环次数后离开
For 10 '固定循环10次跳出
    TracePrint "循环中……"
Next
TracePrint "离开循环"

例子2：范围循环
Dim i
For i = 0 To 9 '这里没写步长，默认每次循环结束 i 都+1，
那么10次后等于9，第11次等于10，大于9，离开循环
    TracePrint "循环中，i=" & i
Next
TracePrint "离开循环，i=" & i

Dim i
For i = 0 To 19 Step 2 '步长为2，每次循环结束 i 都+2，
那么10次后等于18，第11次等于20，大于19，离开循环
    TracePrint "循环中，i=" & i
Next
TracePrint "离开循环，i=" & i

Dim i
For i = 9 To 0 Step -1 '步长为-1，每次循环结束 i 都-1，
那么10次后等于0，第11次等于-1，小于0，离开循环
    TracePrint "循环中，i=" & i
Next
TracePrint "离开循环，i=" & i

例子3：循环离开
Dim i
i=5
For i=0 To 10
    TracePrint "循环中，i=" & i
    If i=5 Then
        Exit For '离开当前For循环
    End If
Next
备注：
For循环通常是用于表示有限次数循环，故最好避免将步长设置为0
或者在循环体中改变循环变量的值
Exit For只能退出当前的For循环


For Each...In 遍历数组

命令名称： For Each...In 遍历数组
命令功能： 对数组中的每个元素重复执行一组语句
语法格式：
For Each 变量名 in 数组
执行语句
Next
参数说明：
参数1 变量名,临时数组元素
参数2 数组,待遍历数组
返回值： 无
脚本例子：

Dim Arr
Arr=Array("我","爱","按","键","精","灵","!")
For Each a In Arr
TracePrint  a    //输出数组的所有元素
Next
备注：
变量名存放的是临时数组元素，可不定义


While 如果..则 (判断表达式并执行语句)

命令名称： While 如果..则 (判断表达式并执行语句)
命令功能： 如果条件表达式成立，则循环执行对应语句
语法格式：
While 条件
循环体
Wend
参数说明：
参数1 条件型，任意有效表达式
返回值： 无
脚本例子：

例子1
Dim i=0
While i=0
    TracePrint "我停不下来啦!!快住手"
Wend
//当循环条件成立的时候，反复执行循环体

例子2
Dim i
i = 0
//跳出循环
While i < 10
   i = i + 1
   TracePrint "正在循环中，i=", i
   If i = 5 then
      TracePrint "准备退出循环"
      Exit While
   End If
Wend
TracePrint "循环结束，i=", i
备注：
While循环通常用于无限循环与条件循环，但是灵活性不如Do循环，推荐使用 Do 循环
Exit While只能退出当前的While循环


Function 函数

命令名称： Function 函数
命令功能： 定义一个函数
语法格式：
Function 函数名([自定义参数1, 自定义参数2, ...])
执行语句
[函数名=返回值]
End Function
参数说明：
函数名：任意有效标识符。
执行语句：任意有效代码语句。
自定义参数：可选参数，允许多个，任意有效标识符
返回值： 可选，自定义返回值
脚本例子：

例子1：自定义函数调用
Call 自定义函数()
EndScript
Function 自定义函数()
    TracePrint "我是自定义函数,被你调用了"
End Function

例子2：自定义函数调用并传入参数，参数可支持多个。
Dim 变量1,变量2
变量1="我是字符串信息"
变量2=123
Call 子程序(变量1,变量2,"第三个参数",456)
EndScript
//定义一个过程,可以在脚本中调用这个过程
Function 自定义函数(参数1,参数2,参数3,参数4)
    TracePrint "我是自定义函数,被你调用了"
    TracePrint "参数1=" & 参数1
    TracePrint "参数2=" & 参数2
    TracePrint "参数3=" & 参数3
    TracePrint "参数4=" & 参数4
End Function
//支持Exit Function 命令直接退出子程序过程

例子3：Function与Sub的区别，支持返回值
Dim 返回值
返回值=自定义函数()
TracePrint 返回值
EndScript
Function 自定义函数()
    TracePrint "我是自定义函数,被你调用了"
    自定义函数="把过程中想要返回的信息写这里"
End Function

例子4：自定义函数加法运算
Dim 返回值
返回值=加法运算(1,2)
TracePrint 返回值
EndScript
Function 加法运算(参数1,参数2)
    TracePrint "我是自定义函数,被你调用了"
    Dim 计算结果
    计算结果=参数1+参数2
    加法运算=计算结果
End Function
备注：
函数可以代替所有子程序，而子程序无法代替所有函数，因为函数有返回值，子程序没有返回值


Sub 子程序

命令名称： Sub 子程序
命令功能： 定义一个过程（子程序）
语法格式：
Sub 子程序名([自定义参数1, 自定义参数2, ...])
执行语句
End Sub
参数说明：
子程序名：任意有效标识符
执行语句：任意有效代码语句
自定义参数：可选参数，允许多个，任意有效标识符
返回值： 无
脚本例子：

例子1：子程序调用
Call 子程序()
EndScript
Sub 子程序()
    TracePrint "我是子程序,被你调用了"
End Sub

例子2：子程序调用并传入参数，参数可支持多个。
Dim 变量1,变量2
变量1="我是字符串信息"
变量2=123
Call 子程序(变量1,变量2,"第三个参数",456)
EndScript
//定义一个过程,可以在脚本中调用这个过程
Sub 子程序(参数1,参数2,参数3,参数4)
    TracePrint "我是子程序,被你调用了"
    TracePrint "参数1=" & 参数1
    TracePrint "参数2=" & 参数2
    TracePrint "参数3=" & 参数3
    TracePrint "参数4=" & 参数4
End Sub
//支持Exit Sub 命令直接退出子程序过程
备注：
函数可以代替所有子程序，而子程序无法代替所有函数，因为函数有返回值，子程序没有返回值
若省略调用关键字Call与参数的括号，则子程序与自定义参数之间必须用空格隔开


Rem 标记

命令名称： Rem 标记
命令功能： 标记命令
语法格式：
Rem identifier
参数说明：
identifier 字符串型，过程名，任意有效标识符
返回值： 无
脚本例子：

//不支持数字开头的和符号作为标记名
Rem 脚本开始
备注：
Rem既可以作为标记，配合 Goto 跳转 使用，也可以作为注释


Goto 跳转到标记

命令名称： Goto 跳转到标记
命令功能： 跳转到Rem标记处
语法格式：
Goto sign
参数说明：
sign: 字符串型，标记,由Rem定义的任意有效标识符
返回值： 无
脚本例子：

Goto 标记
Delay 100
Rem 标记
TracePrint "你直接跳到这里了!!,上面的延迟没有被执行!!"
//跳转语句，可以跳转到rem标记过的标记处继续执行
备注：
可以适当使用Goto，但是不能过度滥用Goto


EndScript 脚本停止运行

命令名称： EndScript 脚本停止运行
命令功能： 强制结束脚本的执行
语法格式：
EndScript
参数说明：
无
返回值： 无
脚本例子：
TracePrint "脚本开始执行"
EndScript
TracePrint "上面强制停止了，这里不会输出"
备注：
无条件强制结束一个脚本的执行，包括多线程也会停止


Call 调用过程

命令名称： Call 调用过程
命令功能： 调用函数或者子程序
语法格式：
Call 过程名([自定义参数1, 自定义参数2, ...])
参数说明：
参数1:字符串型，过程名
参数2:自定义参数：可选参数，允许多个，根据调用的过程确定参数的数量。
返回值： 无
脚本例子：
例子1
Call 子程序("我是子程序,被你调用了")
EndScript
//支持中文名变量
Sub 子程序(参数)
    TracePrint 参数
End Sub
//定义一个过程,可以在脚本中调用这个过程

例子2
Call 函数()
TracePrint "调用函数结束了"
Function 函数()
   TracePrint "我是被你调用的函数"
End Function
备注：
若调用子程序时，省略调用关键字Call与参数的括号，则子程序与自定义参数之间必须用空格隔开
子程序使用Call调用时，无法保存返回值到变量中


CmpColor 对比指定点颜色

命令名称： CmpColor 对比指定点颜色
命令功能： 比较指定坐标点的颜色,支持多色、偏色、相似度比较
语法格式： CmpColor(x,y,color,sim)
参数说明：
x:整数型,需要对比颜色的X坐标
y:整数型,需要对比颜色的Y坐标
color:字符串,待比较的16进制颜色,格式为"BBGGRR",多个颜色用“|”号分隔,
支持偏色,比如"FFFFFF-101010|123456"
sim:双精度浮点数,相似度,取值范围0-1
返回值： 整数型:返回匹配的颜色序号,从0开始索引.如果全部不相等则返回-1
脚本例子：
Dim 是否相等
是否相等 = CmpColor(100,200,"FFFFFF|00FF00-101010",0.9)
If 是否相等 > -1 Then
    TracePrint "匹配颜色的序号为："&是否相等
Else
    TracePrint "没有匹配的颜色"
End If
备注：
偏色是微调，指对RBG三色分别确定取色范围
相似度是粗调，指对颜色整体做百分比判断


CmpColorEx 对比多个点颜色

命令名称： CmpColorEx 对比多个点颜色
命令功能： 同时比较指定的多个坐标点的颜色，支持多色、偏色、相似度比较
语法格式： CmpColorEx(mul_color,sim)
参数说明：
mul_color:字符串,需要对比的点xy坐标和16进制颜色,格式为(X坐标|Y坐标|16进制颜色),
多个颜色用“|”号分隔,需要偏色用“-”号分隔,多个点信息用“,”号分隔，
比如"100|200|FFFFFF|123456-000000,300|500|FFFFFF"
sim:双精度浮点数,相似度,取值范围0-1
返回值： 整数型:返回0代表没找到，返回1代表找到
脚本例子：

If CmpColorEx("300|500|FFFFFF|123456-102030,305|505|FFFFFF",0.9) = 1 Then
    TracePrint "全部点颜色相等"
Else
    TracePrint "有一个或多个颜色不符合"
End If
备注：
偏色是微调，指对RBG三色分别确定取色范围
相似度是粗调，指对颜色整体做百分比判断


ColorDiff 获取俩个颜色BGR差值之和

命令名称： ColorDiff 获取俩个颜色BGR差值之和
命令功能： 求两个颜色的红、绿、蓝三个分量的差值之总和
语法格式： ColorDiff(color1,color2)
参数说明：
color1：16进制颜色,格式为"BBGGRR",或者10进制颜色
color2：16进制颜色,格式为"BBGGRR",或者10进制颜色
返回值： 整数型:两个颜色的红、绿、蓝三个分量的差值之总和
脚本例子：

Dim 颜色差值
颜色差值 = ColorDiff("FFFFFF", 123456)
TracePrint "两个颜色差值为:" & 颜色差值
备注：
返回值常用于计算颜色相似度上


ColorToRGB 分解颜色成RGB

命令名称： ColorToRGB 分解颜色成RGB
命令功能： 把颜色分解为红、绿、蓝三个分量
语法格式： ColorToRGB(color,r,g,b)
参数说明：
color:颜色值可以为16进制字符串,格式为"BBGGRR",也可以为十进制
r:整数型,十进制颜色红分量
g:整数型,十进制颜色绿分量
b:整数型,十进制颜色蓝分量
返回值： 无,结果保存在变参指针中
脚本例子：
Dim r,g,b
ColorToRGB("FF00AA",r,g,b)
TracePrint r,g,b
备注：
RGB三分量常用于计算颜色相似度上


EnableFastCapture 开启快速截图取色模式

命令名称： EnableFastCapture 开启快速截图取色模式
命令功能： 开启快速截图取色模式，提高相关图色函数效率
语法格式： EnableFastCapture(BOOL)
参数说明：
布尔型，True为开启，False为关闭
返回值： 布尔型，True为开启成功，False为开启失败
脚本例子：

Dim t
//用于计算时间
t = TickCount()
For i = 1 To 100
    //如果这里不TracePrint，时间还会缩短不少
    TracePrint GetPixelColor(100, 100)
Next
TracePrint TickCount() - t

//以下是开启快速截图模式的测试例子，请自行测试效果，对照时间
Dim result
//开启快速截图模式，如果在Android 4.2以上，会返回FALSE，表示打开失败
result = EnableFastCapture(true)
TracePrint result
//用于计算时间
t = TickCount()
For i = 1 To 100
    //如果这里不TracePrint，时间还会缩短不少
    TracePrint GetPixelColor(100, 100)
Next
TracePrint TickCount() - t
备注：
该命令仅在低于安卓4.2系统内有效，原理是找图找色时，只截取指定范围图片，提高效率


FindColor 寻找颜色

命令名称： FindColor 寻找颜色
命令功能： 在指定区域内查找指定的颜色
语法格式： FindColor(x1, y1, x2, y2, color,dir,sim,intX,intY)
参数说明：
x1：整数型,区域左上角x坐标
y1：整数型,区域左上角y坐标
x2：整数型,区域右下角x坐标
y2：整数型，区域右下角y坐标
color 字符串:要对比的16进制颜色,格式为"BBGGRR"多个颜色用“|”号分隔,
如果需要对比偏色则中间用“-”号分隔,比如"FFFFFF|123456-000000|00FF00-101010"
sim 双精度浮点数:相似度,取值范围0-1
dir:整数型,查找方向
0: 表示从左上向右下；
1: 表示从中心往四周查找；
2: 表示从右下向左上查找；
3: 表示从左下向右上查找；
4：表示从右上向左下查找
intX:变参指针,返回X坐标
intY:变参指针,返回Y坐标
返回值： 整数型:返回找到的颜色的序号,从0开始索引.没找到返回-1
脚本例子：

Dim IntX,IntY
FindColor 0,0,0,0,"123456-000000|aabbcc-030303|ddeeff-202020",0,1.0,intX,intY
If intX >-1 then
    Traceprint "找到"
Else
    Traceprint "没有找到"
End If

Dim intX, intY,返回值
返回值=FindColor(0, 0, 0, 0, "0000FF-101010|FFFFFF-000000|FF00FF",0, 0.9, intX, intY)
'当需要函数返回值时需要加括号
If 返回值 > -1 Then
    TracePrint "找到的颜色序号为"&返回值&",坐标在"&intX&","&intY
Else
    TracePrint "全部没找到"
End If
备注：
当区域范围均为0时，表示全屏查找颜色
偏色是微调，指对RBG三色分别确定取色范围
相似度是粗调，指对颜色整体做百分比判断


FindMultiColor 多点找色

命令名称： FindMultiColor 多点找色
命令功能： 根据指定的多点查找颜色坐标
语法格式： FindMultiColor x1,y1,x2,y2,first_color,offset_color,dir,sim,intX,intY
参数说明：
x1:整数型,查找区域左上X坐标
y1:整数型,查找区域左上Y坐标
x2:整数型,查找区域右下X坐标
y2:整数型,查找区域右下Y坐标
first_color:要对比的16进制颜色,多个颜色用"|"号分隔,
如果需要对比偏色则中间用“-”号分隔,比如"FFFFFF|123456-000000|00FF00-101010"
sim:双精度浮点数,相似度,取值范围0-1
offset_color:字符串,偏移颜色
dir:整数型,查找方向.
0:表示从左上向右下查找;
1:表示从中心往四周查找;
2:表示从右下向左上查找;
3:表示从左下向右上查找;
4:表示从右上向左下查找;
intX:变参指针,返回找到的X坐标
intY:变参指针,返回找到的Y坐标
color:字符串,16进制颜色值,格式为"BBGGRR"
返回值： 无
脚本例子：

Dim IntX,IntY
FindMultiColor 0,0,0,0,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY
If intX > -1 Then
    TracePrint "找到啦，坐标在"&intX&","&intY
Else
    TracePrint "没找到"
End If
备注：
当区域范围均为0时，表示全屏查找颜色
偏色是微调，指对RBG三色分别确定取色范围
相似度是粗调，指对颜色整体做百分比判断


GetColorNum 获取区域颜色数量

命令名称： GetColorNum 获取区域颜色数量
命令功能： 获取指定区域的颜色数量，支持偏色、多色、相似度
语法格式： GetColorNum(x1,y1,x2,y2,color,sim)
参数说明：
x1:整数型,区域左上X坐标
y1:整数型,区域左上Y坐标
x2:整数型,区域右下X坐标
y2:整数型,区域右下Y坐标
color:字符串,要找的16进制颜色,格式为"BBGGRR",多个颜色用“|”号分隔,支持偏色,
比如"FFFFFF-000000|123456"
sim:双精度浮点数,相似度,取值范围0-1
返回值： 整数型:返回找到的颜色数量
脚本例子：

Dim 颜色数量
颜色数量 = GetColorNum(26,20,31,26,"FFFFFF|123456-000000",1.0)
TracePrint "找到的颜色数量有" & 颜色数量 & "个"
备注：
偏色是微调，指对RBG三色分别确定取色范围
相似度是粗调，指对颜色整体做百分比判断


GetPixelColor 获取指定点颜色

命令名称： GetPixelColor 获取指定点颜色
命令功能： 得到某点的颜色
语法格式： GetPixelColor(x,y[,type])
参数说明：
x：整数型,屏幕x坐标
y：整数型,屏幕y坐标
type:浮点型,返回类型,可省略,默认为0
注意：返回类型为0时:颜色值是16进制,格式为"BBGGRR",不为0时:颜色值是10进制数值
返回值： 此点的颜色值
脚本例子：

Dim rColor
rColor = GetPixelColor(300, 300,0)
TracePrint "这个点的颜色为："&rColor
备注：
要根据返回类型参数来确定返回值的数据类型


RGB 合并颜色

命令名称： RGB 合并颜色
命令功能： 返回代表RGB颜色值的整数
语法格式： RGB(red,green,blue)
参数说明：
red:0到255间的整数,代表颜色中的红色成分
green:0到255间的整数,代表颜色中的绿色成分
blue:0到255间的整数,代表颜色中的蓝色成分
返回值： 10进制颜色值
脚本例子：

Dim Col
Col = RGB(1,1,0)
Traceprint Col
备注：
返回值常用于计算颜色相似度上


FindPic 找图

命令名称： FindPic 找图
命令功能： 查找指定的图片，支持多图、偏色、相似度查找，支持查找透明图,只返回第一个找到的坐标
语法格式： FindPic x1,y1,x2,y2,pic_name,delta_color,dir,sim,intX,intY
参数说明：
x1:整数型,查找区域左上X坐标
y1:整数型,查找区域左上Y坐标
x2:整数型,查找区域右下X坐标
y2:整数型,查找区域右下Y坐标
pic_name:字符串,要找的图片名字,多个图片用“|”号分隔
delta_color:16进制字符串,偏色
sim:双精度浮点数,相似度,取值范围0-1
dir:整数型,查找方向:
0:表示从左上向右下查找;
1:表示从中心往四周查找;
2:表示从右下向左上查找;
3:表示从左下向右上查找;
4:表示从右上向左下查找;
intX:变参指针,返回找到的X坐标
intY:变参指针,返回找到的Y坐标
返回值： 返回找到的图片的序号,从0开始索引.如果没找到返回-1
脚本例子：

Dim intX, intY
FindPic 0, 0, 0, 0, "Attachment:1.png","000000",0, 0.8, intX, intY
If intX >-1 then
    TracePrint "找到啦，坐标是"&intX&","&intY
Else
    TracePrint "没找到"
End If

Dim intX, intY,返回值
返回值=FindPic(0, 0, 0, 0, "Attachment:1.png|Attachment:2.png","000000",0, 0.8, intX, intY)
'需要用函数返回值时要加个括号
If 返回值>-1 then
     TracePrint "找到的图片序号为"&返回值&",坐标为"&intX&","&intY
Else
     TracePrint "全部没找到"
End If
备注：
当区域范围均为0时，表示全屏查找颜色
偏色是微调，指对RBG三色分别确定取色范围
相似度是粗调，指对颜色整体做百分比判断
透明图是指当你图片4个角的颜色均相同时，
则这张图片中所有这个颜色将被视为透明色，在找图匹配点过程中
忽略这些点的颜色另外，透明图也支持PNG格式图片中的透明点


KeepCapture 截图至内存

命令名称： KeepCapture 截图至内存
命令功能： 截取当前屏幕内容保留在内存,随后执行的图色函数均从内存中快速查找，直到用 ReleaseCapture 删除内存中的截图 取消
语法格式： KeepCapture
参数说明：
无参数
返回值： 无
脚本例子：

//截图至内存中,后续执行GetPixelColor、FindColor、FindPic等图色函数的时候,
直接在此次截取的屏幕内容上取色或查找
KeepCapture
TracePrint "这里开始的图色函数均从内存中查找"
TracePrint "也就意味着，查找的并非即时屏幕画面，而是保存在内存中的那张截图。"
//删除内存中的截图，并恢复正常屏幕画面的图色操作
ReleaseCapture
TracePrint "这里开始恢复即时屏幕画面的查找了"
备注：
当调用KeepCapture后，所有的图色操作都将从内存中的那张图片中查找执行。
虽然速度很快，但内存中的图片一直未更新，
意味着操作的图色都是截图时候的，并非最新的屏幕内容
当没有调用KeepCapture，或者KeepCapture的截图被取消的时候，
每次执行GetPixelColor、FindColor、FindPic等图色函数的时候，
都会自动截取当前屏幕内容。虽然速度较慢，但总是能得到最新的屏幕内容


ReleaseCapture 释放(即删除)内存中的截图

命令名称： ReleaseCapture 释放(即删除)内存中的截图
命令功能： 释放(即删除)保留在内存中的屏幕内容截图
语法格式： ReleaseCapture
参数说明：
无参数
返回值： 无
脚本例子：

//截图至内存中,后续执行GetPixelColor、FindColor、FindPic等图色函数的时候,
直接在此次截取的屏幕内容上取色或查找
KeepCapture
TracePrint "这里开始的图色函数均从内存中查找"
TracePrint "也就意味着，查找的并非即时屏幕画面，而是保存在内存中的那张截图。"
//删除内存中的截图，并恢复正常屏幕画面的图色操作
ReleaseCapture
TracePrint "这里开始恢复即时屏幕画面的查找了"
备注：
当调用KeepCapture后，所有的图色操作都将从内存中的那张图片中查找执行
虽然速度很快，但内存中的图片一直未更新
意味着操作的图色都是截图时候的，并非最新的屏幕内容
当没有调用KeepCapture，或者KeepCapture的截图被取消的时候
每次执行GetPixelColor、FindColor、FindPic等图色函数的时候
都会自动截取当前屏幕内容。虽然速度较慢，但总是能得到最新的屏幕内容


SnapShot 截图至文件

命令名称： SnapShot 截图至文件
命令功能： 截屏并保存为PNG文件
语法格式： SnapShot file_name[,x1,y1,x2,y2]
参数说明：
file_name:字符型，文件名（即截取范围图片后，要保存的路径）
x1：整数型,区域左上角x坐标
y1：整数型,区域左上角y坐标
x2：整数型,区域右下角x坐标
y2：整数型,区域右下角y坐标
返回值： 无
脚本例子：

//例子1
//全屏截图,命名为test.png并保存至sd卡
SnapShot "/sdcard/test.png"

//例子2
//只截取屏幕左上角100,100到右下角300,,300范围图片,命名为test.png并保存至sd卡
SnapShot "/sdcard/test.png",100,100,300,300
备注：
目前已可设置截图的区域范围,这是2.3版新增功能
如果省略区域范围默认是全屏截图在手机中的路径可以使用RE管理器之类的应用查看


SetDict 设置字库文件

命令名称： SetDict 设置字库文件
命令功能： 设置（加载）字库文件
语法格式： SetDict(index,file-name)
参数说明：
index 整形数:字库的序号,取值为0-9,目前最多支持10个字库
file-name 字符串:字库路径及其文件名
返回值： 整形数,失败返回0，成功返回1
脚本例子：

TracePrint SetDict(0, "Attachment:s1.txt")//设置附件中的s1.txt文档为0号字库
TracePrint SetDict(1, "Attachment:s2.txt")//设置附件中的s2.txt文档为1号字库
备注：
目前可设置的字库文件序号为0-9
此函数速度较慢，全局初始化时调用一次即可，切换字库用UseDict
字库点阵的提取与制作是用大漠来做的，与大漠做字库的方法一致，注意字库图片的截取要在手机抓抓图片里截取
修改字库文件后记得更新到脚本附件，目前只支持直接调用放在附件中的字库文档，还不支持绝对路径,具体格式参考例子


UseDict 使用字库

命令名称： UseDict 使用字库
命令功能： 设置使用哪个字库文件进行识别(index范围:0-9) 设置之后，永久生效，除非再次设定
语法格式： UseDict(index)
参数说明：
index 整形数:字库编号(0-9)
返回值： 整形数，失败返回0，成功返回1
脚本例子：

TracePrint SetDict(0, "Attachment:s1.txt")//设置附件中的s1.txt文档为0号字库
TracePrint SetDict(1, "Attachment:s2.txt")//设置附件中的s2.txt文档为0号字库
TracePrint UseDict(0)//使用0号字库文件，之后的找字、识别都在这个文件点阵中匹配
'相关找字、识别文字代码
TracePrint SetDict(1)//这里开始切换到0号字库进行识别
'相关找字、识别文字代码
备注：
目前可设置的字库文件序号为0-9


Findstr 区域找字

命令名称： Findstr 区域找字
命令功能： 在屏幕范围(x1,y1,x2,y2)内,查找string(可以是任意个字符串的组合),并返回符合color_format的坐标位置, 相似度sim同Ocr接口描述.(多色,差色查找类似于Ocr接口,不再重述)
语法格式： 索引值=FindStr(x1,y1,x2,y2,string,color_format,sim,intX,intY)
参数说明：
x1：整形数:区域的左上X坐标
y1：整形数:区域的左上Y坐标
x2：整形数:区域的右下X坐标
y2：整形数:区域的右下Y坐标
string 字符串:待查找的字符串,可以是字符串组合，比如"长安|洛阳|大雁塔",中间用"|"来分割字符串
color_format：字符串:颜色格式串. 可以包含换行分隔符,语法是","后加分割字符串. 具体可以查看下面的示例.
sim：双精度浮点数:相似度,取值范围0.1-1.0
intX 变参指针:返回X坐标 没找到返回-1
intY 变参指针:返回Y坐标 没找到返回-1
返回值： 索引值:整形数， 返回字符串的索引 没找到返回-1, 比如"长安|洛阳",若找到长安，则返回0，找到洛阳则返回1
脚本例子：

TracePrint SetDict(0, "Attachment:s1.txt")//设置附件中的s1.txt文档为0号字库
TracePrint UseDict(0)//使用0号字库文件，之后的找字、识别都在这个文件点阵中匹配
Dim 索引值,intX,intY
索引值 = FindStr(0,0,2000,2000,"长安","9f2e3f-000000",1.0,intX,intY)
If intX >= 0 and intY >= 0 Then
    Tap intX,intY
End If

索引值 = FindStr(0,0,2000,2000,"长安|洛阳","9f2e3f-000000",0.9,intX,intY)
If intX >= 0 and intY >= 0 Then
     Tap intX,intY
End If

索引值 = FindStr(0,0,2000,2000,"长安|洛阳","9f2e3f-000000",0.9,intX,intY)
Select Case 索引值
Case 0
    Traceprint "找到长安"
Case 1
    Traceprint "找到洛阳"
End Select
备注：
字库点阵的提取与制作是用大漠来做的，与大漠做字库的方法一致，注意字库图片的截取要在手机抓抓图片里截取
修改字库文件后记得更新到脚本附件，目前只支持直接调用放在附件中的字库文档，还不支持绝对路径
颜色格式串的设置跟大漠有区别，大漠得到的颜色是RGB，这边需要转换成按键的BGR格式
目前不支持HSV颜色、背景色识别、识别后得到的字符串也不支持用分割符隔开
四个坐标范围都为0则默认为全屏查找，建议设置好相应的查找范围，会有效提高找字效率


Ocr 文字识别

命令名称： Ocr 文字识别
命令功能： 识别指定范围内符合指定相似度的颜色偏移特征组的字符串
语法格式： string=Ocr(x1,y1,x2,y2,color_format,sim)
参数说明：
x1：整形数:区域的左上X坐标
y1：整形数:区域的左上Y坐标
x2：整形数:区域的右下X坐标
y2：整形数:区域的右下Y坐标
color_format：字符串:颜色格式串. 可以包含换行分隔符,语法是","后加分割字符串. 具体可以查看下面的示例.
sim：双精度浮点数:相似度,取值范围0.1-1.0
返回值： string：字符串 返回识别到的字符串，失败返回空
脚本例子：

TracePrint SetDict(0, "Attachment:s1.txt")//设置附件中的s1.txt文档为0号字库
TracePrint UseDict(0)//使用0号字库文件，之后的找字、识别都在这个文件点阵中匹配
Dim  识别文字
//BGR单色识别
识别文字=Ocr(0,0,0,0,"9f2e3f-000000",0.9)
Traceprint 识别文字
//BGR单色差色识别
识别文字= Ocr(110,160,250,250,"9f2e3f-030303",0.9)
Traceprint 识别文字
//BGR多色识别(理论上最多支持128种,每种颜色用"|"分割)
识别文字 = Ocr(0,0,0,0,"9f2e3f-030303|2d3f2f-000000|3f9e4d-100000",0.9)
Traceprint 识别文字
备注：
字库点阵的提取与制作是用大漠来做的，与大漠做字库的方法一致，注意字库图片的截取要在手机抓抓图片里截取
修改字库文件后记得更新到脚本附件，目前只支持直接调用放在附件中的字库文档，还不支持绝对路径
颜色格式串的设置跟大漠有区别，大漠得到的颜色是RGB，这边需要转换成按键的BGR格式
目前不支持HSV颜色、背景色识别、识别后得到的字符串也不支持用分割符隔开
四个坐标范围都为0则默认为全屏查找，建议设置好相应的查找范围，会有效提高找字效率


GetDeviceID 获取设置唯一编号

命令名称： GetDeviceID 获取设置唯一编号
命令功能： 得到当前设备的唯一编号，即手机串号imei
语法格式： GetDeviceID()
参数说明：
无
返回值： 整数型:设备的唯一编号
脚本例子：

Dim 返回值
返回值=GetDeviceID()
TracePrint "当前设备唯一编号：" & 返回值
备注：
GSM手机获取得到的是IMEI
CDMA手机获取得到的是MEID或者ESN


GetScreenColorDep 获取屏幕颜色深度

命令名称： GetScreenColorDep 获取屏幕颜色深度
命令功能： 得到当前屏幕的颜色深度
语法格式： GetScreenColorDep()
参数说明：
无
返回值： 整数型:当前屏幕的颜色深度
脚本例子：

Dim 返回值
返回值=GetScreenColorDep()
TracePrint "当前屏幕深度：" & 返回值
备注：
手机颜色深度类似于电脑中的屏幕颜色质量


GetScreenX 获取屏幕横向分辨率

命令名称： GetScreenX 获取屏幕横向分辨率
命令功能： 得到当前屏幕的横向分辨率
语法格式： GetScreenX()
参数说明：
无
返回值： 整数型:屏幕宽度,以像素为单位
脚本例子：

Dim 屏幕横坐标X,屏幕纵坐标Y
屏幕横坐标X=GetScreenX()
屏幕纵坐标Y=GetScreenY()
TracePrint 屏幕横坐标X,屏幕纵坐标Y
备注：
类似于电脑中的屏幕横向分辨率


GetScreenY 获取屏幕纵向分辨率

命令名称： GetScreenY 获取屏幕纵向分辨率
命令功能： 得到当前屏幕的纵向分辨率
语法格式： GetScreenY()
参数说明：
无
返回值： 整数型:屏幕高度,以像素为单位
脚本例子：

Dim 屏幕横坐标X,屏幕纵坐标Y
屏幕横坐标X=GetScreenX()
屏幕纵坐标Y=GetScreenY()
TracePrint 屏幕横坐标X,屏幕纵坐标Y
备注：
类似于电脑中的屏幕纵向分辨率


GetScreenRotation 获取屏幕旋转方向

命令名称： GetScreenRotation 获取屏幕旋转方向
命令功能： 返回当前屏幕的旋转方向
语法格式： GetScreenRotation()
参数说明：
无
返回值： 返回值为0,表示屏幕没有旋转 返回值为1.表示屏幕逆时针旋转90度 返回值为2.表示屏幕逆时针旋转180度 返回值为3.表示屏幕逆时针旋转270度
脚本例子：

Dim 返回值
返回值=GetScreenRotation()
If 返回值=0 Then
TracePrint "屏幕没有旋转"
ElseIf 返回值 = 1 Then
TracePrint "屏幕逆时针旋转90度"
ElseIf 返回值 = 2 Then
TracePrint "屏幕逆时针旋转180度"
ElseIf 返回值 = 3 Then
TracePrint "屏幕逆时针旋转270度"
End If
备注：
无


GetRunningApp 读取运行中的应用程序包名列表

命令名称： GetRunningApp 读取运行中的应用程序包名列表
命令功能： 读取设备中正在运行的应用程序包名列表
语法格式： arr = GetRunningApp()
参数说明：
无
返回值： arr：字符型数组，返回运行中的所有应用程序包名的字符数组
脚本例子：
Dim arr() //定义一个数组变量
arr=GetRunningApp() //获取所有应用程序包名并将它们合并到arr数组中保存
For each n in arr
    TracePrint n //遍历arr数组并输出所有获取的包名字符
Next
备注：
无


GetTempDir 获取临时目录

命令名称： GetTempDir 获取临时目录
命令功能： 返回存储卡上按键精灵的临时文件目录,可以在此目录中进行文件操作
语法格式： GetTempDir()
参数说明：
无
返回值： 字符串型，存储卡上按键精灵的临时文件目录
脚本例子：

Dim 返回值
返回值=GetTempDir()
TracePrint "当前设备的临时目录为：" & 返回值
备注：
可以把常用的文件操作放在这个临时目录中


GetSdcardDir 获取Sdcard目录

命令名称： GetSdcardDir 获取Sdcard目录
命令功能： 获取当前手机的Sdcard目录
语法格式： GetSdcardDir()
参数说明：
无
返回值： 字符串型，返回当前手机的sdcard目录
脚本例子：

Dim 返回值
返回值=GetSdcardDir()
TracePrint "当前手机的SdCard目录为：" & 返回值
备注：
无


KeepScreen 设置屏幕是否常亮

命令名称： KeepScreen 设置屏幕是否常亮
命令功能： 控制屏幕状态
语法格式： KeepScreen b_state
参数说明：
b_state:当指定的Bool类型表达式为True的时候，保持屏幕常开状态；
否则，关闭屏幕常开功能（屏幕会自动关闭）
返回值： 无
脚本例子：

KeepScreen True   //屏幕常亮，不人为干预的话则不会自动关闭屏幕
备注：
屏幕如果被关闭了，会影响按键精灵的图色操作，所以有时候需要开启屏幕常亮功能


PlaySound 播放音频

命令名称： PlaySound 播放音频
命令功能： 播放指定的音频文件
语法格式： PlaySound file_name
参数说明：
file_name:字符型,指明了音频文件的存储位置,文件名如果以 "Attachment:" 开始，表明后面的部
分是附件中的文件。按键精灵会自动从附件中找到该文件并播放，不需要将附件释放到存储卡上。
返回值： 无
脚本例子：

//从附件中播放我爱按键精灵.mp3
PlaySound "Attachment:我爱按键精灵.mp3"
备注：
无


ResetScreenScale 取消屏幕缩放

命令名称： ResetScreenScale 取消屏幕缩放
命令功能： 取消屏幕比例缩放设置,一般与SetScreenScale配套使用
语法格式： ResetScreenScale
参数说明：
无
返回值： 无
脚本例子：

//假设作者在540*960分辨率下开发脚本，要在720*1280设备中运行
SetScreenScale 540,960,0
ResetScreenScale
备注：
当你不需要屏幕缩放时，就用这个命令取消好了


SetScreenScale 设置屏幕缩放

命令名称： SetScreenScale 设置屏幕缩放
命令功能： 设置当前脚本开发环境的屏幕分辩率，使脚本适配不同分辩率的设备
语法格式： SetScreenScale width,height,scale
参数说明：
width:整数型,脚本开发时使用的设备宽度
height:整数型,脚本开发时使用的设备高度
scale:可选参数,默认为1,0代表只对传入函数的坐标进行缩放,
从函数返回坐标的不缩放,即为当前使用设备真实坐标。
1代表传入函数的坐标进行缩放，函数返回的坐标进行反向缩放
返回值： 无
脚本例子：

//假设一名作者在540*960分辨率的手机中开发了脚本，
要在720*1280的设备中运行
SetScreenScale 540,960,0
备注：
受屏幕缩放命令影响的命令有： Tap 短暂点击、Touch 按住一段时间、
TouchDown 按住不放、TouchMove 模拟滑动、Swipe 模拟划动、
GetPixelColor 得到指定点颜色、FindColor 寻找颜色、CmpColor 对比指定点颜色、
CmpColorEx 对比多个点颜色、FindMultiColor 多点找色。


Shake 摇动命令

命令名称： Shake 摇动命令
命令功能： 摇一摇手机
语法格式： Shake()
参数说明：
无
返回值： 无
脚本例子：
Call Shake()
备注：
并不是所有机型都支持该命令


Vibrate 震动

命令名称： Vibrate 震动
命令功能： 在具有震动功能的设备上，维持震动一段时间
语法格式： Vibrate time
参数说明：
time:整数型,震动时间,单位毫秒
返回值： 无
脚本例子：

//持续震动1000毫秒（1秒）
Vibrate 1000
备注：
注意持续时间的单位是毫秒，1秒 = 1000毫秒


Dim 定义变量

命令名称： Dim 定义变量
命令功能： 定义一个或多个变量，数组
语法格式： Dim 变量[, 数组(), ...]
参数说明：
参数：变量名或者数组名，支持多个变量或者数组
返回值： 无
脚本例子：

Dim a, b(), c
a = 123
b(0) = "按键精灵"
c = True
TracePrint a, b(0), c
备注：
无


Delay 延时

命令名称： Delay 延时
命令功能： 脚本暂停执行一段时间
语法格式：
Delay time
参数说明：
time:数值表达式,延时时间,单位毫秒
返回值： 无
脚本例子：

//延迟6000毫秒（6秒）
Delay 6000
备注：
注意时间单位是毫秒，1秒=1000毫秒


InputText 输入内容

命令名称： InputText 输入内容
命令功能： 在当前窗口中输入文字
语法格式：
InputText str_in
参数说明：
str_in:字符串型,待输入的字符串
返回值： 无
脚本例子：

//在当前窗口输入"你好，我是按键精灵"
//注意：当使用此函数后直至脚本结束,其他输入法无法调用
InputText "你好，我是按键精灵"
备注：
使用前，记得要先激活当前窗口的输入框，如果遇到无法输入情况，可以考虑使用KeyPress模拟输入法进行输入


// 注释

命令名称： // 注释
命令功能： 添加脚本注释
语法格式：
请看例子说明
参数说明：
无
返回值： 无
脚本例子：

双斜杠//或者单引号'表示单行注释，比如：

//我是注释内容

'我是注释内容

斜杠加星号表示多行注释，格式为/*……*/比如：

/*

我是第一行注释

我是第二行注释

我是第三行注释

*/
备注：
用最直白的话来讲，注释是写给人看的，不是写给计算机看的，注释可以帮助程序员理解这段代码的含义等
计算机执行到注释语句时，会当成没看见，直接跳过。或许你会觉得，我写的代码，难道我看不懂吗？
但是你要注意如果你翻出一年前的代码，你能准确的知道每一句代码的作用，你当时写脚本的思路吗？


TracePrint调试输出

命令名称： TracePrint调试输出
命令功能： 在按键精灵手机助手的调试窗口打印文字
语法格式：
TracePrint str_1,str_2,...
参数说明：
TracePrint支持一个或多个参数，最多可以到1024个。如果输入多个参数时，它会自动把所有参数串起来，中间用逗号分隔，
这些参数支持字符串、数字、null或bool型
返回值： 无
脚本例子：
//向按键精灵手机助手的调试信息窗口中输出“按键精灵，我爱你”
TracePrint"按键精灵，我爱你"
备注：
该命令相当重要，脚本调试排错什么的都是靠这个命令来分析原因的，可支持同时输出多个参数
与 ShowMessage 显示信息 相比，他是输出显示到按键精灵手机助手上的，给作者调试纠错使用


ShowMessage 显示信息

命令名称： ShowMessage 显示信息
命令功能： 在屏幕上显示提示信息，此信息维持一段时间后自动消失
语法格式：
ShowMessage  Msg
参数说明：
Msg:提示信息,如果提示信息不是字符串类型,会自动转换为字符串类型进行显示
返回值： 无
脚本例子：

//在屏幕上显示"我爱按键精灵
ShowMessage "我爱按键精灵"
备注：
与 TracePrint 调试输出 相比，他是输出显示到手机屏幕上，供用户了解脚本的即时情况


KillApp 关闭应用

命令名称： KillApp 关闭应用
命令功能： 关闭指定应用程序
语法格式：
KillApp package_name
参数说明：
package_name:字符串型,包名
返回值： 无
脚本例子：

//关闭微信
KillApp "com.tencent.mm"
备注：
应用程序的包名可以通过“按键精灵手机助手”右边的“脚本命令”中的“其他命令”查看


RunApp 运行应用

命令名称： RunApp 运行应用
命令功能： 指定某个应用程序的包名，启动这个应用程序
语法格式：
RunApp package_name,component_name
参数说明：
package_name:字符串型,某个应用程序的包名
component_name:可选参数,字符串型,某个应用程序的组件名,可省略
返回值： 无
脚本例子：

//启动微信
RunApp "com.tencent.mm"
备注：
应用程序的包名可以通过按键精灵手机助手右边的脚本命令中的其他命令查看
应用程序的组件名需要反编译安装包，查看AndroidManifest.xml文件来获得


Import 导入命令

命令名称： Import 导入命令
命令功能： 导入一个命令库mql文件或者插件lua文件，导入后可以直接使用这个命令库或者插件
语法格式：
Import file
参数说明：
file:字符串型，命令库mql文件或插件lua文件
返回值： 无
脚本例子：

//下面例子使用Import导入第三方lua字符串插件，注意同个脚本只需导入一次
Import "Str.lua"
Dim 当前时间
当前时间 = Str.Now()
TracePrint 当前时间
备注：
1. 在导入插件前，请先将相应插件文件放到按键精灵安卓版安装目录的“Plugin”文件夹内
2. 在脚本开头使用Import "XX.XX"命令导入相应插件前，请将相应插件修改成插件文件名
3. 生成小精灵APK会自动打包插件，所以无需添加附件之类的操作。


PutAttachment 释放附件

命令名称： PutAttachment 释放附件
命令功能： 把当前脚本包含的附件释放到指定的目录下
语法格式：
PutAttachment path[,file]
参数说明：
path:字符串型,路径,手机一定要存在此路径,否则释放失败。
file:字符串型,文件名,可省略
注意:如果路径为Null或空字符串,
会把附件释放到按键精灵的临时文件目录下。
临时文件目录可以通过调用 GetTempDir() 获得要释放的文件（可选参数）为字符串类型，
可以指定只释放附件中的一个或几个文件，支持通配符 * 和 ? ，
当不指定要释放的文件，或指定为Null或空字符串时，表示要释放本脚本附件中的所有文件。
返回值： 无
脚本例子：

//把所有扩展名为png的文件释放到按键精灵的临时文件目录下。
PutAttachment "", "*.png"
备注：
脚本支持附件路径找图，格式为"Attachment:\图片名"，
但是不支持直接读取TXT附件之类的，所以部分附件内容还是需要释放出来再使用。
通配符 * 表示0个或多个任意字符。
通配符 ? 表示1个任意字符。


SetControlBarPos 设置浮窗

命令名称： SetControlBarPos 设置浮窗
命令功能： 设置控制台（浮窗）在屏幕右侧的高度及其锁定状态
语法格式：
SetControlBarPos location[, state]
参数说明：
location:“位置比例”,浮窗在右侧的高度比例，取值范围为0-1.0，0表示最上面，1表示最下面
state：“锁定状态”,为可选参数，当其为空或为0时表示不锁定，非0表示锁定
返回值： 无
脚本例子：

//移动浮窗到右上角并锁定禁止移动
SetControlBarPos 0,1
备注：
有的时候浮窗会挡住屏幕导致图色判断不准确，故需要此功能来调整浮窗位置


GetNetworkTime 获取网络时间

命令名称： GetNetworkTime 获取网络时间
命令功能： 获取当前的网络时间
语法格式： GetNetworkTime()
参数说明：
无
返回值： 返回当前的网络时间，比如：2015-09-01 10:54:49
脚本例子：

Dim 网络时间
网络时间=GetNetworkTime()
Traceprint 网络时间
备注：
无


ReadUIConfig 读取界面配置

命令名称： ReadUIConfig 读取界面配置
命令功能： 读取脚本的界面配置值
语法格式：
ReadUIConfig(name[, def_val])
参数说明：
name:界面元素名称
def_val：界面上元素的默认值，可省略
返回值： 返回脚本的界面配置值，如果没有取到，则返回默认值
脚本例子：
//读取界面元素名称为"账号"的默认值,如果该元素未设置默认值则读出100
ReadUIConfig("账号","100")
备注：
输入框返回值为字符串型，若需要使用数值型，请强制转换
多选框返回值为布尔型，可以直接用于If判断
下拉框返回值为整数型，表示选中的选项序号


ReadConfig 读取配置

命令名称： ReadConfig 读取配置
命令功能： 读取脚本的配置值
语法格式：
ReadConfig(name[, def_val])
参数说明：
name:配置项名称
def_val：默认值,可省略
返回值： 返回WriteConfig写入的脚本配置值,如果没有取到，则返回默认值
脚本例子：

//向移动配置项写入一个数据8
WriteConfig ("移动", 8,true)
//结束脚本后运行
traceprint ReadConfig("移动", 6)
//输出为8，而不是默认的6
备注：
这个命令是配合 WriteConfig 写入配置 使用的，读取的值是由WriteConfig写入，并非从界面元素中读取


WriteConfig 写入配置

命令名称： WriteConfig 写入配置
命令功能： 写入的配置值
语法格式：
WriteConfig(name,val,state)
参数说明：
name:配置项名称
val：写入的值，可以是字符串、数值、布尔等
state：布尔值，是否立即写入,如果需要立即写入文件,设为true，默认为False，不会立即写入到文件中
返回值： 无
脚本例子：
////向移动配置项立即写入一个数据8
WriteConfig ("移动", 8,true)
备注：
这个命令是配合 ReadConfig 读取配置 使用的，写入的配置是在文件中，并非在界面元素中


Device.Getip 获取设备IP

命令名称： Device.Getip 获取设备IP
命令功能： 获取设备的IP
语法格式： Device.Getip()
参数说明：
无
返回值： 返回设备的IP值,格式如：10.0.3.15
脚本例子：
Dim 设备IP
设备IP = Device.GetIp()
TracePrint 设备IP
备注：
自己手机的IP通常可以在设置里的关于手机选项里查看到


Device.GetModel 获取设备型号

命令名称： Device.GetModel 获取设备型号
命令功能： 获取设备的型号(手机机型), 比如：HTC One
语法格式： Device.GetModel()
参数说明：
无
返回值： 返回设备的型号,比如：HTC One
脚本例子：
Dim 设备型号
设备型号 = Device.GetModel()
TracePrint 设备型号
备注：
自己手机的型号通常可以在设置里的关于手机选项里查看到


Device.GetImsi 获取设备IMSI号

命令名称： Device.GetImsi 获取设备IMSI号
命令功能： 获取设备的imsi号(区别移动用户的标志)
语法格式： Device.GetImsi()
参数说明：
无
返回值： 返回设备的imsi号,比如：310260000000000
脚本例子：
Dim 设备imsi号
设备imsi号 = Device.GetImsi()
TracePrint 设备imsi号
备注：
IMSI即国际移动用户识别码，是15位的十进制数,它是区别移动用户的标志
储存在SIM卡中，可用于区别移动用户的有效信息


Device.GetIccid 获取设备SIM卡ID

命令名称： Device.GetIccid 获取设备SIM卡ID
命令功能： 获取设备的SIM卡的ID号
语法格式： Device.GetIccid()
参数说明：
无
返回值： 设备SIM卡的ID号，比如：89014103211118510720
脚本例子：
Dim SIM卡ID
SIM卡ID = Device.GetIccid()
TracePrint SIM卡ID
备注：
SIM卡为20位十进制数字，它好比就是人的身份证号码
不过SIM卡的名字是他所表示的手机号码，ID是识别SIM 卡唯一性的一个编号


Phone.Dial 输入电话号码

命令名称： Phone.Dial 输入电话号码
命令功能： 调用手机的系统拨号盘，拨打指定的电话号码，但暂不拨出
语法格式： Phone.Dial 电话号码
参数说明：
号码：整数型或字符串，欲拨打的电话号码，可以是文本或者数字
返回值： 无
脚本例子：
Phone.Dial 10086
Phone.Dial "10001"
备注：
无


Phone.DialOut 拨打电话号码

命令名称： Phone.DialOut 拨打电话号码
命令功能： 调用手机系统的拨号程序，直接拨出指定的电话号码
语法格式： Phone.DialOut 电话号码
参数说明：
号码：整数型或字符串，欲拨打的电话号码，可以是文本或者数字
返回值： 无
脚本例子：
Phone.DialOut 10086
Phone.DialOut "10001"
备注：
无


Phone.Message 发短信

命令名称： Phone.Message 发短信
命令功能： 调用手机系统的发短信程序，直接发送短信
语法格式： Phone.Message 电话号码, 内容
参数说明：
号码：整数型或字符串，欲拨打的电话号码，可以是文本或者数字
内容：字符串，发送的短信内容，长度由手机自身的限制决定（如160个字符）
返回值： 无
脚本例子：
Phone.Message 10086, "11"
备注：
无


Sys.GetClipText 读取剪贴板

命令名称： Sys.GetClipText 读取剪贴板
命令功能： 读取系统剪贴板
语法格式： 结果 = Sys.GetClipText()
参数说明：
无
返回值： 字符串，读取到的剪贴板内容，如果系统剪贴板为空，则返回空字符串
脚本例子：

Dim 剪贴板内容
剪贴板内容 = Sys.GetClipText()
TracePrint 剪贴板内容
备注：
无


Sys.SetClipText 设置剪贴板

命令名称： Sys.SetClipText 设置剪贴板
命令功能： 设置系统剪贴板里的内容为指定内容
语法格式： Sys.SetClipText 内容
参数说明：
内容：字符串，放入剪贴板中的内容
返回值： 字符串，读取到的剪贴板内容，如果系统剪贴板为空，则返回空字符串
脚本例子：

Dim 剪贴板内容
Sys.SetClipText "按键精灵"
剪贴板内容 = Sys.GetClipText()
TracePrint 剪贴板内容
备注：
无


dir.Copy 复制文件或文件夹

命令名称： dir.Copy 复制文件或文件夹
命令功能： 将一个文件或文件夹拷贝到另一个文件路径中保存
语法格式： dir.Copy(dir1,dir2)
参数说明：
dir1:字符串型,为原文件或文件夹路径
dir2:字符串型,为新文件或文件夹路径
返回值： 布尔值，复制文件成功返回true，否则返回false
脚本例子：

Dim 返回值,文件路径1="/sdcard/MobileAnjian/anjian.txt",内容="我爱你"
Dim 文件路径2="/sdcard/MobileAnjian/UFO.txt"
Call File.Write(文件路径1,内容)  //先将内容写入到文本中
dir.Copy(文件路径1,文件路径2)  //将路径1文件的拷贝到路径2文件
返回值=File.Read(文件路径2) //读取文件路径2中的文本内容
TracePrint 返回值  //输出"我爱你"
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


dir.Create 创建文件夹

命令名称： dir.Create 创建文件夹
命令功能： 创建一个文件夹
语法格式： dir.Create(dir)
参数说明：
dir:字符串型,为文件夹路径
返回值： 布尔值，创建文件成功返回true，否则返回false
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt",内容="我爱你",返回值
返回值=Dir.Create(文件路径) //创建一个文件夹
TracePrint 返回值 //返回值为true，说明创建文件夹成功
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


dir.Delete 删除文件

命令名称： dir.Delete 删除文件
命令功能： 将一个指定文件或文件夹删除
语法格式： dir.Delete (dir)
参数说明：
dir:字符串型,为文件或文件夹路径
返回值： 布尔值，删除文件成功返回true，否则返回false
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt",内容="我爱你"
Call File.Write(文件路径,内容)  //先将内容先入文本中
TracePrint File.Read(文件路径) //读取并输出文本内容"我爱你"
Dir.Delete (文件路径) //删除该文本文件
TracePrint File.Read(文件路径) //再次尝试读取并输出文本内容，结果为null，代表该文件已被删除
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


dir.Exist 判断文件是否存在

命令名称： dir.Exist 判断文件是否存在
命令功能： 判断一个文件或文件夹是否存在
语法格式： dir.Exist (dir)
参数说明：
dir:字符串型,为文件或文件夹路径
返回值：
判断文件存在则返回1
判断文件夹存在返回2
判断文件或文件夹都不存在返回0
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt"
Call Dir.Create(文件路径) //先创建一个文件夹
TracePrint Dir.Exist(文件路径) //返回1表示该文件夹存在
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


dir.Move 移动文件

命令名称： dir.Move 移动文件
命令功能： 将一个文件或文件夹移动到另一个文件路径中保存
语法格式： dir.Move(dir1,dir2)
参数说明：
dir1:字符串型,为原文件或原文件夹路径
dir2:字符串型,为新文件或新文件夹路径
返回值： 布尔值，移动文件成功返回true，否则返回false
脚本例子：

Dim 返回值,文件路径1="/sdcard/MobileAnjian/anjian.txt",内容="我爱你"
Dim 文件路径2="/sdcard/MobileAnjian/UFO.txt"
Call File.Write(文件路径1,内容) //先将内容写入到文本中
dir.move(文件路径1,文件路径2) //将文件路径1中的文本移动到文件路径2中保存
返回值=File.Read(文件路径2) //读取文件路径2中的文本内容
TracePrint 返回值 //返回"我爱你"
TracePrint File.Read(文件路径1) //返回 null 表示文件路径1中的文件已经被移走
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


dir.Rename 重命名文件

命令名称： dir.Rename 重命名文件
命令功能： 将一个文件或文件夹重命名并可使其移动到另一个文件路径中保存
语法格式： dir.Rename(dir1,dir2)
参数说明：
dir1:字符串型,为原文件或原文件夹路径
dir2:字符串型,为新文件或新文件夹路径
返回值： 布尔值，重命名文件成功返回true，否则返回false
脚本例子：

Dim 返回值,文件路径1="/sdcard/MobileAnjian/anjian.txt",内容="我爱你"
Dim 文件路径2="/sdcard/MobileAnjian/UFO.txt"
Call File.Write(文件路径1,内容)  //先将内容写入路径1的文本中
Dir.Rename(文件路径1,文件路径2) //将路径1文件重命名并移动到文件路径2中
返回值=File.Read(文件路径2) //读取已被重命名的文件路径2中的文本内容
TracePrint 返回值 //返回"我爱你"
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


Log.Close 关闭日志记录

命令名称： Log.Close 关闭日志记录
命令功能： 关闭日志记录功能
语法格式： Log.Close
参数说明：
virtual_key：可以是字符串类型，表示某个键的名字；也可以是数值类型，表示某个键的编码
返回值： 无
脚本例子：
TracePrint "日志被开启，这句话会被记录到日志文件中"
Log.Close
TracePrint "日志被关闭，这句话不会被记录到日志文件中"
备注：
使用Log.Open后，所有TracePrint命令的输出内容都会同时写入日志文件,
直到脚本执行结束，或者是使用Log.Close关闭日志文件
日志文件的存储路径是存储卡上按键精灵的临时文件目录
（可用GetTempDir()获得）下的log子目录
日志文件名是脚本启动时的系统时间（精确到秒）


Log.Open 开启日志记录

命令名称： Log.Open 开启日志记录
命令功能： 打开日志文件,并开始记录日志
语法格式： Log.Open
参数说明：
无
返回值： 如果日志文件打开成功,则返回True,否则返回False
脚本例子：

Log.Open
TracePrint "日志被开启，这句话会被记录到日志文件中"
Log.Close
TracePrint "日志被关闭，这句话不会被记录到日志文件中"
备注：
使用Log.Open后，所有TracePrint命令的输出内容都会同时写入日志文件,
直到脚本执行结束，或者是使用Log.Close关闭日志文件
日志文件的存储路径是存储卡上按键精灵的临时文件目录
（可用GetTempDir()获得）下的log子目录
日志文件名是脚本启动时的系统时间（精确到秒）


UTF8.InStr 查找字符

命令名称： UTF8.InStr 查找字符
命令功能： 返回某字符串在另一字符串中第一次出现的位置
语法格式： 结果 = UTF8.InStr(起始位置, 原字符串, 搜索字符串[, 对比方式])
参数说明：
起始位置：整数型，开始搜索的字符位置
原字符串：字符串，被搜索的字符串任意有效字符串表达式
搜索字符串：字符串，要搜索的字符串任意有效字符串表达式
对比方式：布尔值，可选。是否忽略大小写，默认False，即不忽略大小写
返回值： 数值型，返回搜索字符串在原字符串中第一次出现的位置
脚本例子：

Dim 结果
结果 = UTF8.InStr(1, "您好,按键精灵欢迎您", "按键")
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.InStrRev 反向查找字符

命令名称： UTF8.InStrRev 反向查找字符
命令功能： 反方向查找字符第一次出现的位置，返回正方向开始数的位置
语法格式： 结果 = UTF8.InStrRev(原字符串, 搜索字符串, 起始位置[, 对比方式])
参数说明：
原字符串：字符串，被搜索的字符串任意有效字符串表达式
搜索字符串：字符串，要搜索的字符串任意有效字符串表达式
起始位置：整数型，正方向数起开始搜索的字符位置，-1表示从最后一个字符开始搜索
对比方式：布尔值，可选。是否忽略大小写，默认False，即不忽略大小写
返回值： 数值型，返回反方向搜索字符串在原字符串中第一次出现的正方向位置
脚本例子：

Dim 结果
结果 = UTF8.InStrRev("您好,按键精灵欢迎您", "按键", -1)
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.Left 取左边字符

命令名称： UTF8.Left 取左边字符
命令功能： 返回某字符串从左边数起的指定数量字符
语法格式： 结果 = UTF8.Left(原字符串, 数量)
参数说明：
原字符串：字符串，任意有效字符串表达式
数量：整数型，截取的字符数量
返回值： 字符串，返回原字符串从左边数起指定数量的字符
脚本例子：

Dim 结果
结果 = UTF8.Left("您好,按键精灵欢迎您", 6)
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.Len 获取字符串数目

命令名称： UTF8.Len 获取字符串数目
命令功能： 返回某字符串的字符数量
语法格式： 结果 = UTF8.Len(字符串)
参数说明：
字符串：字符串，任意有效字符串表达式
数量：整数型，截取的字符数量
返回值： 整数型，返回字符串的数量（长度）
脚本例子：

Dim 结果
结果 = UTF8.Len("您好,按键精灵欢迎您")
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.Mid 截取字符串

命令名称： UTF8.Mid 截取字符串
命令功能： 从字符串的指定位置开始截取一定数量的字符
语法格式： 结果 = UTF8.Mid(字符串)
参数说明：
字符串：字符串，任意有效字符串表达式
开始位置：整数型，正方向数起的截取开始位置
截取数量：整数型，截取的字符数量
返回值： 字符串，返回截取出来的字符串
脚本例子：
Dim 结果
结果 = UTF8.Mid("您好,按键精灵欢迎您",6,2)
TracePrint 结果//输出"精灵"
备注：

该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置。如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.Right 取右边字符

命令名称： UTF8.Right 取右边字符
命令功能： 返回某字符串从右边数起的指定数量字符
语法格式： 结果 = UTF8.Right(原字符串, 数量)
参数说明：
原字符串：字符串，任意有效字符串表达式
数量：整数型，截取的字符数量
返回值： 字符串，返回原字符串从右边数起指定数量的字符
脚本例子：

Dim 结果
结果 = UTF8.Right("00" & 1, 3)  //数字前面补0的技巧
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.StrCut 移除指定数目字符

命令名称： UTF8.StrCut 移除指定数目字符
命令功能： 用于在字符串中移除指定位置与长度的字符,并返回移除后的字符组合，起始位置从1开始递增
语法格式： str= UTF8.StrCut(string,position,size)
参数说明：
string:字符串型,任意有效的字符串表达式
position:整数型,任意可以计算其值的数值表达式
size:整数型,任意可以计算其值的数值表达式
返回值： str：字符串型，返回移除了指定字符后的字符串
脚本例子：
Dim 结果
结果 = UTF8.StrCut("您好按键精灵欢迎您", 3,7)
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.StrGetAt 获取指定位置字符

命令名称： UTF8.StrGetAt 获取指定位置字符
命令功能： 用于在字符串中获取指定位置的字符，返回字符串中指定位置的字符，字符位置从1开始递增
语法格式： str= UTF8.StrGetAt(string,position)
参数说明：
string:字符串型,任意有效的字符串表达式
position:整数型,任意可以计算其值的数值表达式
返回值： str：字符串型，返回字符串中指定位置的字符
脚本例子：
Dim a="我爱你",b
b = UTF8.StrGetAt(a, 2)
TracePrint b //返回"爱"
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


UTF8.StrReverse 返回方向相反的字符串

命令名称： UTF8.StrReverse 返回方向相反的字符串
命令功能： 返回方向相反的字符串
语法格式： 结果 = UTF8.StrReverse(字符串)
参数说明：
字符串：字符串，任意有效字符串表达式
返回值： 字符串，与原方向相反的字符串
脚本例子：

Dim 结果
结果 = UTF8.StrReverse("我爱按键精灵")
TracePrint 结果
备注：
该命令的汉字占用1个字符位置，而 字符串函数 中汉字占用3个字符位置
如果参数中只包含英文、数字与半角符号的时候，建议使用原命令


Encode.Md5 字符串Md5加密

命令名称： Encode.Md5 字符串Md5加密
命令功能： 用于计算并返回字符串的Md5值，即进行Md5加密
语法格式： str=Encode.Md5(string)
参数说明：
string:字符串型,任意有效的字符串表达式
返回值： str：字符串型,返回字符串的Md5值"
脚本例子：

Dim a="我爱你",b
b = Encode.Md5(a)
TracePrint b  //返回"我爱你"的MD5值"4f2016c6b934d55bd7120e5d0e62cce3"
备注：
无


Abs 绝对值

命令名称： Abs 绝对值
命令功能： 求数字的绝对值
语法格式： Abs(number)
参数说明：
number：可以是任意有效的数值表达式
返回值： 浮点型：返回数字的绝对值
脚本例子：

Dim MyNumber
MyNumber = Abs(-50.3)
Traceprint MyNumber
备注：
绝对值是指一个数，去掉它的正负号，比如-5的绝对值是5，5的绝对值是5，0的绝对值是0


Atn 反正切

命令名称： Atn 反正切
命令功能： 求数值的反正切值
语法格式： Atn(number)
参数说明：
number：可以是任意有效的数值表达式
返回值： 浮点型：返回数值的反正切值
脚本例子：

Dim pi
pi = 4 * Atn(1)
TracePrint "圆周率pi的值" & pi
备注：

Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧度值。
此比值是该角对边的长度与邻边长度之比。结果的范围是从 -pi/2 到 pi/2 弧度
弧度变换为角度的方法是将弧度乘以 pi/180。反之，角度变换为弧度的方法是将角度乘以180/pi
注意：Atn 是 Tan（将角作为参数返回直角三角形两边的比值）的反三角函数。
不要混淆 Atn 与余切（正切的倒数 (1/tangent)）函数


Cos 余弦

命令名称： Cos 余弦
命令功能： 求某个角的余弦值
语法格式： Cos(number)
参数说明：
number：可以是任何将某个角表示为弧度的有效数值表达式
返回值： 浮点型：返回某个角的余弦值
脚本例子：

Dim MyAngle, MyCos
MyAngle = 1.3
MyCos =Cos(MyAngle)
备注：
Cos 函数取某个角并返回直角三角形两边的比值。
此比值是直角三角形中该角的邻边长度与斜边长度之比。结果范围在 -1 到 1 之间。
角度转化成弧度方法是用角度乘以 pi/180。反之，
弧度转化成角度的方法是用弧度乘以 180/pi


Exp 自然对数的幂次方

命令名称： Exp 自然对数的幂次方
命令功能： 求e（自然对数的底）的幂次方
语法格式： Exp(number)
参数说明：
number:可以是任意有效的数值表达式
返回值： 浮点型：返回e（自然对数的底）的幂次方
脚本例子：

//常数e的值约为2.718282
Dim MyAngle, MyValue
MyAngle = 1.3
MyValue = Exp(MyAngle)
备注：
如果 数值 参数超过 709.782712893，则出现错误。常数 e 的值约为 2.718282
Exp 函数完成 Ln 函数的反运算，并且有时引用为反对数形式


Fix 取整

命令名称： Fix 取整
命令功能： 返回数字的整数部分
语法格式： Fix(number)
参数说明：
number:可以是任意有效的数值表达式
返回值： 整数型：数字的整数部分
脚本例子：

//如果number为负数,Fix函数返回大于或等于number的第一个负整数,Fix函数将-8.4转换为-8
Dim MyNumber
MyNumber = Fix(-8.4)
备注：

Int 和 Fix 函数都删除 数值 参数的小数部分并返回以整数表示的结果
Int 和 Fix 函数的区别在于如果 数值 参数为负数时，Int 函数返回小于或等于 数值 的第一个负整数，
而 Fix 函数返回大于或等于 数值 参数的第一个负整数


Int 取整

命令名称： Int 取整
命令功能： 返回数字的整数部分
语法格式： Int(number)
参数说明：
number :可以是任意有效的数值表达式
返回值： 整数型：数字的整数部分
脚本例子：

//如果number为负数,Int函数返回小于或等于number的第一个负整数例如,Int将-8.4转换为-9
Dim MyNumber
MyNumber = Int(-8.4)
备注：
Int 和 Fix 函数都删除 数值 参数的小数部分并返回以整数表示的结果
Int 和 Fix 函数的区别在于如果 数值 参数为负数时，Int 函数返回小于或等于 数值 的第一个负整数，
而 Fix 函数返回大于或等于 数值 参数的第一个负整数


Ln 自然对数为底的对数

命令名称： Ln 自然对数为底的对数
命令功能： 返回数值的自然对数
语法格式： Ln(number)
参数说明：
number:是任意大于0的有效数值表达式
返回值： 浮点型：数值的自然对数
脚本例子：

Dim MyNumber
MyNumber = Ln(99.8)
TracePrint MyNumber
备注：
自然对数是以 e 为底的对数。常数 e 的值约为 2.718282。
用 n 的自然对数除 x 的自然对数，可以得到以 n 为底的 x 的对数。如下所示：
Logn(x) = Ln(x) / Ln(n)


Oct 转换成八进制

命令名称： Oct 转换成八进制
命令功能： 返回表示数字八进制值的字符串
语法格式： Oct(number)
参数说明：
number :是任意有效的表达式,如果不是整数,则在进行运算前,将其四舍五入到最接近的整数
返回值： 无
脚本例子：

//下面的示例利用 Oct 函数返回数值的八进制数:
Dim MyOct
MyOct = Oct(4)     ' 返回 4。
MyOct = Oct(8)     ' 返回 10。
MyOct = Oct(459)   ' 返回 713。
备注：
无


Randomize 初始化随机数

命令名称： Randomize 初始化随机数
命令功能： 初始化随机数生成器
语法格式： Randomize [number]
参数说明：
number:有效的数值表达式,可省略
返回值： 无
脚本例子：

//要产生指定范围的随机整数，请使用以下公式：
//Int((最大值 - 最小值 + 1) * Rnd() + 最小值)
//例如产生2到6之间的随机数:
Dim MyValue
Randomize
MyValue = Int(((6-2+1） * Rnd()) + 2)
Traceprint MyValue
备注：
Randomize只能在随机数生成前调用一次，以后都不需要再次调用
生成随机数请使用示例注释中的公式


Rnd 随机数

命令名称： Rnd 随机数
命令功能： 返回一个随机数
语法格式： Rnd([number])
参数说明：
number:可以是任意有效的数值表达式,可省略
返回值： Rnd函数返回一个小于1但大于或等于0的值
脚本例子：

//要产生指定范围的随机整数，请使用以下公式：
//Int((最大值 - 最小值 + 1) * Rnd() + 最小值)
//例如产生2到6之间的随机数:
Dim MyValue
Randomize
MyValue = Int((（6-2+1） * Rnd()) + 1)
Traceprint MyValue
备注：
Randomize只能在随机数生成前调用一次，以后都不需要再次调用
生成随机数请使用示例注释中的公式


Round 四舍五入

命令名称： Round 四舍五入
命令功能： 返回四舍五入后的数值
语法格式： Round(expression,[, digit])
参数说明：
expression:有效的数值表达式
digit:四舍五入时保留的小数位数，可省略, 默认为0，即不保留小数位
返回值： 整数型：四舍五入后的数值
脚本例子：

Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi)     'MyVar=3
备注：
2.0版本开始支持自定义小数位


按键精灵安卓版命令帮助

命令名称： Sgn 数字符号
命令功能： 返回表示数字符号的整数
语法格式： Sgn(number)
参数说明：
number可以是任意有效的数值表达式
返回值： 如果number大于零,返回1 如果number等于零,返回0 如果number小于零,返回-1
脚本例子：
//下面的示例利用 Sgn 函数决定数值的符号:
Dim MyVar1, MyVar2, MyVar3, MySign
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0
MySign = Sgn(MyVar1)    ' 返回 1。
MySign = Sgn(MyVar2)    ' 返回 -1。
MySign = Sgn(MyVar3)    ' 返回 0。
备注：
可以通过返回的数字来判断是正数，还是负数，还是0


Sin 正弦

命令名称： Sin 正弦
命令功能： 计算某个角的正弦值
语法格式： Sin(number)
参数说明：
number:可以是任何将某个角表示为弧度的有效数值表达式
返回值： 浮点型:返回某个角的正弦值
脚本例子：

Dim MyAngle, MySin
MyAngle = 1.3
MySin = Sin(MyAngle)
备注：
Sin 函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的对边长度与斜边长度之比。结果的范围在 -1 到 1 之间
角度转化成弧度方法是用角度乘以 pi/180。反之，弧度转化成角度的方法是用弧度乘以 180/pi


Sqr 平方根

命令名称： Sqr 平方根
命令功能： 求一个数值的平方根
语法格式： Sqr(number)
参数说明：
number :可以是任意大于或等于零的有效数值表达式
返回值： 无
脚本例子：

Dim My1
My1 = Sqr(4)  'My1=2
备注：
无


Tan 正切

命令名称： Tan 正切
命令功能： 计算某个角的正切值
语法格式： Tan(number)
参数说明：
number:可以是任何将某个角表示为弧度的有效数值表达式
返回值： 浮点型:返回某个角的正切值
脚本例子：

Dim MyAngle, MyTan
MyAngle = 1.3
MyTan = Tan(MyAngle)
备注：
Tan 取某个角并返回直角三角形两个直角边的比值。此比值是直角三角形中该角的对边长度与邻边长度之比
角度转化成弧度方法是用角度乘以 pi/180。反之，弧度转化成角度的方法是用弧度乘以 180/pi


Asc 获得ANSI码

命令名称： Asc 获得ANSI码
命令功能： 返回与字符串的第一个字母对应的 ANSI 字符代码
语法格式： Asc(string)
参数说明：
string:是任意有效的字符串表达式
返回值： 整数型:与字符串的第一个字母对应的ANSI字符代码
脚本例子：

Dim MyNumber
MyNumber = Asc("A")      '返回 65
MyNumber = Asc("a")      '返回 97
MyNumber = Asc("Apple")  '返回 65
备注：
如果是字符串，则返回第一个字母对应的ANSI代码


Chr 获得字符

命令名称： Chr 获得字符
命令功能： 返回与指定ANSI对应的字符
语法格式： Chr(charcode)
参数说明：
charcode：数值型，可以标识字符的数字
返回值： 字符串型，返回指定ANSI对应的字符
脚本例子：

Dim MyChar
MyChar = Chr(65)    'MyChar = A
MyChar = Chr(97)    'MyChar = a
MyChar = Chr(62)    'MyChar = >
MyChar = Chr(37)    'MyChar = %
备注：
无


Hex 转十六进制

命令名称： Hex 转十六进制
命令功能： 转化为十六进制数字值的字符串
语法格式： Hex(number)
参数说明：
number:浮点型,任意有效的数值表达式
如果number参数不是整数,则在进行运算前将其四舍五入为最接近的整数
返回值： 字符串型:十六进制数字值的字符串
脚本例子：

Dim MyHex
MyHex = Hex(5)    ' 返回 5
MyHex = Hex(10)   ' 返回A
MyHex = Hex(459)  '返回 1CB
备注：
您可以通过在数字前面添加前缀 &H 来表示十六进制数。
例如，在十六进制计数法中，&H10 表示十进制数 16


Instr 查找字符

命令名称： Instr 查找字符
命令功能： 求某字符串在另一字符串中第一次出现的位置
语法格式： InStr(start,string1,string2[,comparision])
参数说明：
start:数值表达式,用于设置每次搜索的开始位置
string1:要搜索的字符串表达式
string2:被搜索的字符串表达式
comparision:对比方式，是否忽略大小写，可省略，默认False，即不忽略大小写
返回值： 整数型:字符串在另一字符串中第一次出现的位置
脚本例子：

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"
SearchChar = "P"
MyPos = Instr(4, SearchString, SearchChar)   'MyPos =9
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.InStr命令


InStrRev 反方向查找字符

命令名称： InStrRev 反方向查找字符
命令功能： 求某字符串在另一个字符串中出现的从结尾计起的位置
语法格式： InStrRev(string1,string2,start[,comparision])
参数说明：
string1:接受搜索的字符串表达式
string2:被搜索的字符串表达式
start:数值表达式，用于设置每次搜索的开始位置。如果为-1,表示从最后一个字符的位置开始搜索
comparision:对比方式，是否忽略大小写，可省略，默认False，即不忽略大小写
返回值： 整数型: 返回字符串2在字符串1中出现的从结尾计起的位置
脚本例子：

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"
SearchChar = "P"
MyPos = InstrRev(SearchString, SearchChar, 10)  'MyPos = 9
备注：
查找的方向为反向搜索，位置参数定义为正方向位置，返回结果为正方向位置
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.InStrRev命令


Join 合成字符串

命令名称： Join 合成字符串
命令功能： 将数组以指定的分隔符合并成字符串
语法格式： Join(list,delimiter)
参数说明：
list：待合成字符串的一维数组
delimiter：分隔符，字符串型，以分隔符将数组中每个元素合并起来
返回值： 返回一个字符串
脚本例子：

Dim MyString
Dim MyArray(4)
MyArray(0) = "Mr."
MyArray(1) = "John "
MyArray(2) = "Doe "
MyArray(3) = "III"
MyString = Join(MyArray,"")    'MyString 包含 "Mr.John Doe III"
MyString = Join(MyArray,",")   'MyString 包含 "Mr.,John ,Doe ,III"
备注：
无


LCase 转小写

命令名称： LCase 转小写
命令功能： 求字符串的小写形式
语法格式： LCase(string)
参数说明：
string:字符串型,有效的字符串表达式
返回值： 字符串型:返回字符串的小写形式
脚本例子：

Dim MyString
Dim LCaseString
MyString = "VBSCript"
LCaseString = LCase(MyString) ' LCaseString 包含 "vbscript"
备注：
无


Left 取左边字符

命令名称： Left 取左边字符
命令功能： 求指定数目的从字符串的左边算起的字符
语法格式： Left(string, length)
参数说明：
string:字符串表达式,其最左边的字符被返回
length:数值表达式,指明要返回的字符数目
返回值： 指定数目的从字符串的左边算起的字符
脚本例子：

//下面的示例利用Left 函数返回MyString的左边三个字母:
Dim MyString, LeftString
MyString = "VBSCript"
LeftString = Left(MyString, 3) 'LeftString 包含 "VBS"
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.Left命令


Len 获得字符串数目

命令名称： Len 获得字符串数目
命令功能： 求字符串内字符的数目
语法格式： Len(string )
参数说明：
string:任意有效的字符串表达式
varname:任意有效的变量名
返回值： 整数型,字符串内字符的数目
脚本例子：

Dim MyString
MyString = Len("VBSCRIPT") 'MyString =8
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.Len命令


LTrim 去掉字符串左边空格

命令名称： LTrim 去掉字符串左边空格
命令功能： 去掉前导空格
语法格式： LTrim(string)
参数说明：
string参数是任意有效的字符串表达式
返回值： 无前导空格的字符串
脚本例子：

//下面的示例利用 LTrim, RTrim, and Trim 函数
分别去除前导空格，末尾空格，前导空格和末尾空格都去除:
Dim MyVar
MyVar = LTrim("  vbscript ")  'MyVar 包含 "vbscript "
MyVar = RTrim("  vbscript ")  'MyVar 包含 "  vbscript"
MyVar = Trim("  vbscript ")   'MyVar 包含"vbscript"
备注：
经测试，去掉的空格字符串包括Chr(9)、Chr(10)、Chr(13)、Chr(32)等


Mid 取指定字符串

命令名称： Mid 取指定字符串
命令功能： 从字符串中返回指定数目的字符
语法格式： Mid(string, start, length)
参数说明：
string：字符串表达式，从中返回字符
start:string中被提取的字符部分的开始位置
length:要返回的字符数目
返回值： 返回指定数目的字符串
脚本例子：

Dim MyVar
MyVar = Mid("VB Script is fun!", 4, 6) 'MyVar 包含 "Script"
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.Len命令


Replace 替换字符

命令名称： Replace 替换字符
命令功能： 用指定的字符串替换某子字符串
语法格式： Replace(expression,find,replacewith[, comparision])
参数说明：
expression:字符串表达式,包含要替代的子字符串
find:被搜索的子字符串
replacewith:用于替换的子字符串
comparision:对比方式，可省略,是否忽略大小写，默认False，即不忽略大小写
返回值： 字符串:返回经过替换后的字符串
脚本例子：

Dim MyString
MyString = Replace("XXpXXPXXp", "p", "Y")  '返回 "XXYXXPXXY"
备注：
无


Right 取右边字符

命令名称： Right 取右边字符
命令功能： 从字符串右边返回指定数目的字符
语法格式： Right(string, length)
参数说明：
string:字符串表达式，其最右边的字符被返回
length:数值表达式，指明要返回的字符数目
返回值： 返回右边指定数目的字符
脚本例子：

Dim AnyString, MyStr
AnyString = "Hello World"      '定义字符串
MyStr = Right(AnyString, 1)    '返回 "d"
MyStr = Right(AnyString, 6)    ' 返回 " World"
MyStr = Right(AnyString, 20)   ' 返回 "Hello World"
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.Len命令


RTrim 去掉字符串右边空格

命令名称： RTrim 去掉字符串右边空格
命令功能： 去掉末尾空格
语法格式： LTrim(string)
参数说明：
string参数是任意有效的字符串表达式
返回值： 无末尾空格的字符串
脚本例子：

//下面的示例利用 LTrim, RTrim, and Trim 函数
分别去除前导空格，末尾空格，前导空格和末尾空格都去除:
Dim MyVar
MyVar = LTrim("  vbscript ")  'MyVar 包含 "vbscript "
MyVar = RTrim("  vbscript ")  'MyVar 包含 "vbscript"
MyVar = Trim("  vbscript ")   'MyVar 包含"vbscript"
备注：
经测试，去掉的空格字符串包括Chr(9)、Chr(10)、Chr(13)、Chr(32)等


Space 空格

命令名称： Space 空格
命令功能： 求由指定数目的空格组成的字符串
语法格式： Space(number)
参数说明：
number：为字符串中用户所需的空格数
返回值： 无
脚本例子：

Dim MyString
MyString = Space(10)                     ' 返回具有 10 个空格的字符串
MyString = "Hello" & Space(10) & "World" ' 在两个字符串之间插入 10 个空格
备注：
无


StrComp 对比俩个字符串

命令名称： StrComp 对比俩个字符串
命令功能： 返回两个字符串比较结果
语法格式： StrComp(string1, string2[,comparision])
参数说明：
string1:任意有效的字符串表达式
string2:任意有效的字符串表达式
comparision:对比方式,是否忽略大小写,可省略，默认False，即不忽略大小写
返回值：
string1小于string2返回-1
string1等于string2返回0
string1大于string2返回1
string1或string2为Null 返回Null
脚本例子：
Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd"
MyComp = StrComp(MyStr1, MyStr2)          'MyComp = -1
MyComp = StrComp(MyStr2, MyStr1)          'MyComp = 1
MyComp = StrComp(MyStr2, MyStr1,true)     'MyComp = 0
备注：
无


String 生成重复字符串

命令名称： String 生成重复字符串
命令功能： 求具有指定长度的、重复字符组成的字符串
语法格式： String(number, character)
参数说明：
number:返回字符串的长度
character:指定字符或字符串表达式的字符代码，其中字符串表达式的第一个字符用于组成返回的字符串
返回值： 字符串型:具有指定长度的、重复字符组成的字符串
脚本例子：

Dim MyString
MyString = String(5, "*")           ' 返回"*****"
MyString = String(5, 42)           ' 返回"*****"
MyString = String(10, "ABC")    ' 返回"AAAAAAAAAA"
备注：
无


StrnComp 比较字符串

命令名称： StrnComp 比较字符串
命令功能： 字符串比较（含对比长度）
语法格式： str=StrnComp(string1,string2,size,compare)
参数说明：
string:字符串型,任意有效的字符串表达式
position:整数型,任意可以计算其值的数值表达式
返回值：
string1小于string2返回-1
string1等于string2返回0
string1大于string2返回1
脚本例子：
Dim a="aabd",b="aabc",c
c = StrnComp(a, b, 3)
TracePrint c //对比长度为3，
则比较两个字符串的前3位字符"aab"，比较结果为相等，返回0

c = StrnComp(a, b, 4)
TracePrint c //对比长度为4，
则比较前4位字符"aabd"与"aabc"的大小，比较结果为前者大于后者，返回1
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.StrnComp命令


StrReverse 颠倒字符串

命令名称： StrReverse 颠倒字符串
命令功能： 求字符串，此字符串与指定字符串顺序相反
语法格式： StrReverse(string1)
参数说明：
string1 参数是要进行字符反向的字符串。如果 string1 是零长度字符串 ("")，
则返回零长度字符串。如果 string1 为 Null，则会出现错误
返回值： 与指定字符串顺序相反的字符串
脚本例子：

Dim MyStr
MyStr = StrReverse("VBScript") 'MyStr 包含 "tpircSBV"
备注：
该命令的汉字占用3个字符位置，而 UTF8字符插件 中汉字占用1个字符位置
如果参数中包含汉字，建议使用UTF8.Len命令


Trim 去掉字符串左右俩边空格

命令名称： Trim 去掉字符串左右俩边空格
命令功能： 去掉前导空格和末尾空格
语法格式： Trim(string)
参数说明：
string参数是任意有效的字符串表达式
返回值： 无前导空格和末尾空格的字符串
脚本例子：

KeyPress "Home" //下面的示例利用 LTrim, RTrim, and Trim 函数
分别去除前导空格，末尾空格，前导空格和末尾空格都去除:
Dim MyVar
MyVar = LTrim("  vbscript ")  'MyVar 包含 "vbscript "
MyVar = RTrim("  vbscript ")  'MyVar 包含 "  vbscript"
MyVar = Trim("  vbscript ")   'MyVar 包含"vbscript"
备注：
经测试，去掉的空格字符串包括Chr(9)、Chr(10)、Chr(13)、Chr(32)等


Ucase 转大写

命令名称： Ucase 转大写
命令功能： 求字符串的大写形式
语法格式： UCase(string)
参数说明：
string:字符串型,任意有效的字符串表达式
返回值： 字符串型:返回字符串的大写形式
脚本例子：

Dim MyWord
MyWord = UCase("Hello World")    ' 返回"HELLO WORLD"
备注：
无


Array 合成数组

命令名称： Array 合成数组
命令功能： 返回一个数组
语法格式： Array(arglist)
参数说明：
arglist:数组元素的值的列表（用逗号分隔）
返回值： 返回一个数组
脚本例子：

Dim i
i = Array(1,"字符串1", 2.2) 'i(0)=1,i(1)"字符串1",i(2)=2.2
备注：
无


UBound 数组长度

命令名称： UBound 数组长度
命令功能： 获取数组的长度
语法格式： UBound(arr)
参数说明：
arr:数组变量
返回值： 用于确定数组的大小，返回指定数组的最大下标（仅限一维数组）
脚本例子：

Dim a=array("一","二","三","四","五")
Function UBound(arr)
    Dim i = -1
    For Each str In arr
        i = i + 1
    Next
    UBound = i
End Function
TracePrint UBound(a) //返回4
备注：
无


Split 分割数组

命令名称： Split 分割数组
命令功能： 分隔数据返回基于0的一维数组
语法格式： Split(expression,delimiter)
参数说明：
expression:字符串表达式，待分隔的数据
delimiter:分隔符，以分隔符将数据分开保存到数组的各个元素中
返回值： 返回一个数组
脚本例子：

Dim MyString, MyArray
MyString = Split("VBScriptXisXfun!","X")
TracePrint MyString(0)
TracePrint MyString(1)
TracePrint MyString(2)
备注：
无


Clone 拷贝数组

命令名称： Clone 拷贝数组
命令功能： 将一个数组的所有元素值拷贝给别一个数组（对其进行值拷贝)
语法格式： Clone(arr)
参数说明：
arr:数组变量
返回值： 返回另一个相同元素数组
脚本例子：

dim a(),b()
a(0) = 1
a(1) = 2
b = Clone(a)
TracePrint b(0), b(1)
b(0) = 30
TracePrint a(0) //a数组中的第一个元素值并未发生改变，依旧等于1

反例
dim a(),b()
a(0) = 1
a(1) = 2
b = a
TracePrint b(0), b(1)
b(0) = 30
TracePrint a(0) //a数组中的第一个元素值已改变为30
备注：
无


CBool 转布尔

命令名称： CBool 转布尔
命令功能： 尝试将表达式转换为Boolean类型
语法格式： CBool(expression)
参数说明：
expression:任意有效的表达式
如果expression是零,则返回False;否则返回True
返回值： 转换成功后返回布尔数据类型的值
脚本例子：

Dim A,B
A = 5
B = CBool(A)      'A=True
备注：
数字0转成布尔值为False，非0的数转为布尔值为True


CDbl 转浮点数

命令名称： CDbl 转浮点数
命令功能： 尝试将表达式转换为双精度浮点类型
语法格式： CDbl(expression)
参数说明：
expression:任意有效的表达式
返回值： 转换成功后返回双精度浮点数的值
脚本例子：

Dim MyCurr, MyDouble
MyCurr = "234"
MyDouble = CDbl(MyCurr)   'MyDouble=234
备注：
无


CInt 转整数

命令名称： CInt 转整数
命令功能： 尝试将表达式转换为短整数型
语法格式： CInt(expression)
参数说明：
expression:任意有效的表达式
返回值： 转换成功后返回短整型数据类型的值,注意：返回此数值是经过四舍五入的结果
脚本例子：

Dim MyDouble, MyInt
MyDouble = 2345.5678
MyInt = CInt(MyDouble)  'MyInt = 2346
备注：
短整型数取值范围：-32,768 到 32,767


CLng 转整数

命令名称： CLng 转整数
命令功能： 尝试将表达式转换为长整型整数
语法格式： CLng(expression)
参数说明：
expression:任意有效的表达式
返回值： 转换成功后返回长整型数据类型的值,注意：返回此数值是经过四舍五入的结果
脚本例子：

Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45: MyVal2 = 25427.55
MyLong1 = CLng(MyVal1)   'MyLong1 = 25427
MyLong2 = CLng(MyVal2)   'MyLong2 = 25428
备注：
长整型数取值范围：-2,147,483,648 到 2,147,483,647


CSng 转浮点数

命令名称： CSng 转浮点数
命令功能： 尝试将表达式转换为单精度浮点类型
语法格式： CSng(expression)
参数说明：
expression:任意有效的表达式
返回值： 转换成功后返回单精度浮点数数据类型的值
脚本例子：

Dim My1,My2
My1 = "75.23"
My2 =CSng(My1)   'My2=75.23
备注：
无


CStr 转字符串

命令名称： CStr 转字符串
命令功能： 尝试将表达式转换为字符串类型
语法格式： CStr(expression)
参数说明：
expression:任意有效的表达式
返回值： 转换成功后返回字符串型后数据类型的值
脚本例子：

Dim MyInteger, MyString
MyInteger = 437
MyString =CStr(MyDouble)    'MyString="437"
备注：
无


Date 获得系统日期

命令名称： Date 获得系统日期
命令功能： 得到当前系统日期,格式为"年/月/日"
语法格式： Date()
参数说明：
无
返回值： 字符串型,返回当前系统日期
脚本例子：

Dim MyDate
MyDate = Date()
TracePrint  MyDate
备注：
无


Now 获得系统日期和时间

命令名称： Now 获得系统日期和时间
命令功能： 返回系统当前的日期和时间组成的字符串
语法格式： Now()
参数说明：
无
返回值： 字符串,返回当前的日期和时间
脚本例子：

Dim MyVar
MyVar = Now()
TracePrint MyVar
备注：
无


TickCount 获取脚本运行时间

命令名称： TickCount 获取脚本运行时间
命令功能： 获取当前脚本运行时间，单位毫秒
语法格式： TickCount()
参数说明：
无
返回值： 返回值为数值类型，脚本运行的时间
脚本例子：

Dim MyTime
MyTime = TickCount()
TracePrint MyTime
备注：
无


Time 获得系统时间

命令名称： Time 获得系统时间
命令功能： 得到当前系统时间
语法格式： Time()
参数说明：
无
返回值： 返回值为数值类型,表示当前系统从1970年1月1日至今所经过的秒数
脚本例子：

Dim MyTime
MyTime = Time()
TracePrint MyTime
备注：
无


IsArray 判断是否为数组

命令名称： IsArray 判断是否为数组
命令功能： 判断某变量是否为数组
语法格式：
IsArray(varname)
参数说明：
varname:可以是任意变量
返回值： 如果变量是数组,IsArray 返回 True;否则,返回 False
脚本例子：

//下面的示例利用IsArray函数验证MyArray 是否为一数组:
Dim MyArray(3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
If IsArray(MyArray)=True Then
    Traceprint "MyArray是数组"
Else
    Traceprint "MyArray不是数组"
End If
备注：
无


IsNull 判断是否为空

命令名称： IsNull 判断是否为空
命令功能： 判断表达式是否不包含任何有效数据
语法格式：
IsNull(expression)
参数说明：
expression:任意表达式
返回值： 如果expression为Null,则IsNull返回 True,即表达式不包含有效数据,否则IsNull返回False
脚本例子：

Dim  MyCheck
MyCheck = 2
If IsNull(MyCheck)=False Then
    Traceprint "MyCheck不为空"
Else
    Traceprint "MyCheck为空"
End If
备注：
无


IsNumeric 判断是否为数字

命令名称： IsNumeric 判断是否为数字
命令功能： 判断某变量是否为数值类型
语法格式：
IsNumeric expression
参数说明：
expression:可以是任意表达式
返回值： 如果变量是数值类型，IsNumeric返回 True；否则，返回 False
脚本例子：

Dim MyVar
MyVar = 53
If IsNumeric(MyVar)=True Then
    Traceprint "MyVar是数值"
Else
    Traceprint "MyVar不是是数值"
End If
备注：
无


+ 加法运算

命令名称： + 加法运算
命令功能： 用于计算两个数之和
语法格式： 返回值 = 表达式1 + 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值： 数值型，得到两个数的加法计算之和
脚本例子：

Dim 结果
结果 = 10 + 20
TracePrint "计算结果为：" & 结果
//结果为30
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


- 减法运算/负号

命令名称： - 减法运算/负号
命令功能：
语法 1
    返回值 = 表达式1 - 表达式2
语法 2
    - 表达式3
语法格式： 返回值 = 表达式1 - 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
表达式3：数值型，任意数值表达式
返回值： 数值型，得到两个数的减法计算之差
脚本例子：

Dim 结果
结果 = 20 - 10
TracePrint "计算结果为：" & 结果
//结果为10
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


* 乘法运算

命令名称： * 乘法运算
命令功能： 用于计算两个数相乘
语法格式： 返回值 = 表达式1 * 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值： 数值型，得到两个数的乘法计算之积
脚本例子：

Dim 结果
结果 = 10 * 20
TracePrint "计算结果为：" & 结果
//结果为200
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


/ 除法运算

命令名称： / 除法运算
命令功能： 用于计算两个数相除并返回以小数表示的结果
语法格式： 返回值 = 表达式1 / 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值： 数值型，得到两个数的除法计算结果（带小数）。
脚本例子：

Dim 结果
结果 = 10 / 20
TracePrint "计算结果为：" & 结果
//结果为0.5
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


\ 整除运算

命令名称： \ 整除运算
命令功能： 用于计算两个数相除并返回结果的整数部分
语法格式： 返回值 = 表达式1 \ 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值： 数值型，得到两个数的除法计算结果的整数部分（不带小数）
脚本例子：

Dim 结果
结果 = 9 \ 4
TracePrint "计算结果为：" & 结果
//结果为2
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


^ 求幂运算

命令名称： ^ 求幂运算
命令功能： 用于计算数的指数次方
语法格式： 返回值 = 表达式1 ^ 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值： 数值型，得到一个数的幂次方结果
脚本例子：

Dim 结果
结果 = 2 ^ 3
TracePrint "计算结果为：" & 结果
//结果为8
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


Mod 取余运算

命令名称： Mod 取余运算
命令功能： 用于计算两个数相除并返回其余数
语法格式： 返回值 = 表达式1 Mod 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值： 整数型，得到两个数的除法计算之余数
脚本例子：

Dim 结果
结果 = 15 Mod 4
TracePrint "计算结果为：" & 结果
//结果为3
备注：
如果参数不是数值型时，脚本会尝试自动强制转换为数值并计算，如果强制转换失败，则返回错误信息


& 强制连接

命令名称： & 强制连接
命令功能： 用于强制两个表达式进行字符串连接
语法格式： 结果 = 表达式1 & 表达式2
参数说明：
表达式1：字符串，任意表达式
表达式2：字符串，任意表达式
返回值：
字符串，得到两个表达式连接后的新字符串
脚本例子：

Dim s1, s
s1 = "您好，"
s =  "按键精灵欢迎您"
TracePrint s1 & s
//输出:您好，按键精灵欢迎您
备注：
如果参数不是字符串时，脚本会尝试自动强制转换为字符串并计算。
如果包含Null，则返回错误信息： attempt to concatenate a null value
（[string "function main()..."]）


= 等于/赋值

命令名称： = 等于/赋值
命令功能： 对变量赋值或在表达式内部表示判断等于
语法格式： 表达式1 = 表达式2
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
返回值：
赋值或布尔值
脚本例子：

Dim a, b, c
a = 0
b = 0
c = (a = b)
TracePrint "c =" , c
//输出:c = true
//分析1:在"c="这里的等于号表示赋值，将右边的结果赋值给左边变量c
//分析2:在"(a = b)"这里的等于表示判断，结果为布尔值
备注：
 无


命令名称： <> 不等于
命令功能： 对左右两边判断是否相等，返回布尔值
语法格式： 表达式1 <> 表达式2
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
返回值：
布尔值：成立返回真True，不成立返回假False
脚本例子：

Dim a, b, c
a = 0
b = "0"
c = (a <> b)
TracePrint "c =" , c
//输出:c = true
备注：
请注意数据类型，字符串"3"与数字3两者使用不等于判断的话，返回结果为假


> 大于

命令名称： > 大于
命令功能： 判断左边是否大于右边，返回布尔值
语法格式：
语法1
    表达式1 > 表达式2
语法2
    表达式1 > 表达式2 > 表达式3
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
表达式3：任意数据类型，任意表达式
返回值：
布尔值：成立返回真True，不成立返回假False
脚本例子：

Dim a, b, c
a = 10
b = 100
c = (a > b)
TracePrint "c =" , c
//输出:c = false
备注：
请注意数据类型，两边的数据类型必须保持一致

如果是数值，那么比较数值大小；如果是单个字符，则比较两个字符的ASCII码值大小；
如果是两个汉字，则比较两个汉字字符的区位码；如果是字符串，
则从左开始逐一对比每一个字符ASCII码值，直到出现不相等的一个值
常见的字符值大小关系如下：
空格<0<......<9


命令名称： < 小于
命令功能： 判断左边是否小于右边，返回布尔值
语法格式：
语法1
    表达式1 < 表达式2
语法2
    表达式1 < 表达式2 < 表达式3
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
表达式3：任意数据类型，任意表达式
返回值：
布尔值：成立返回真True，不成立返回假False
脚本例子：

Dim a, b, c
a = 0
b = "0"
c = (a < b)
TracePrint "c =" , c
//输出:c = true
备注：
请注意数据类型，两边的数据类型必须保持一致

如果是数值，那么比较数值大小；如果是单个字符，则比较两个字符的ASCII码值大小；
如果是两个汉字，则比较两个汉字字符的区位码；如果是字符串，
则从左开始逐一对比每一个字符ASCII码值，直到出现不相等的一个值
常见的字符值大小关系如下：
空格<0<......<9


>= 大于等于/不小于

命令名称： >= 大于等于/不小于
命令功能： 判断左边是否大于或等于（即不小于）右边，返回布尔值
语法格式：
语法1
   表达式1 >= 表达式2
语法2
   表达式1 >= 表达式2 >= 表达式3
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
表达式3：任意数据类型，任意表达式
返回值：
布尔值：成立返回真True，不成立返回假False
脚本例子：
Dim a, b, c
a = 10
b = 100
c = (a >= b)
TracePrint "c =" , c
//输出:c = false
备注：
请注意数据类型，两边的数据类型必须保持一致

如果是数值，那么比较数值大小；如果是单个字符，则比较两个字符的ASCII码值大小；
如果是两个汉字，则比较两个汉字字符的区位码；如果是字符串，
则从左开始逐一对比每一个字符ASCII码值，直到出现不相等的一个值
常见的字符值大小关系如下：
空格<0<......<9


命令名称： <= 小于等于/不大于
命令功能： 判断左边是否小于或等于（即不大于）右边，返回布尔值
语法格式：
语法1
   表达式1 <= 表达式2
语法2
   表达式1 <= 表达式2 <= 表达式3
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
表达式3：任意数据类型，任意表达式
返回值：
布尔值：成立返回真True，不成立返回假False
脚本例子：

Dim a, b, c
a = 10
b = 100
c = (a <= b)
TracePrint "c =" , c
//输出:c = true
备注：
请注意数据类型，两边的数据类型必须保持一致

如果是数值，那么比较数值大小；如果是单个字符，则比较两个字符的ASCII码值大小；
如果是两个汉字，则比较两个汉字字符的区位码；如果是字符串，
则从左开始逐一对比每一个字符ASCII码值，直到出现不相等的一个值
常见的字符值大小关系如下：
空格<0<......<9


And 逻辑与

命令名称： And 逻辑与
命令功能： 用于对两个表达式进行逻辑与运算
语法格式： 结果 = 表达式1 And 表达式2
参数说明：
表达式1：数值型，任意数值表达式
表达式2：数值型，任意数值表达式
返回值：
如果 表达式1 为   真True   且 表达式2 为  真True   则 结果 为   真True
如果 表达式1 为   真True   且 表达式2 为  假False  则 结果 为   假False
如果 表达式1 为   假False  且 表达式2 为  真True   则 结果 为   假False
如果 表达式1 为   假False  且 表达式2 为  假False  则 结果 为   假False
脚本例子：

Dim a, b, c, d, e
a = 10 : b = 100
c = 20 : d = 200
e = (a < b And c < d)
TracePrint "e =" , e
//输出:e = true
备注：
逻辑与口诀：有假则假


Not 逻辑非

命令名称： Not 逻辑非
命令功能： 用于对表达式进行逻辑非运算
语法格式： 结果 = Not 表达式
参数说明：
表达式：数值型，任意数值表达式
返回值：
如果 表达式 为   真True    则 结果 为    假False
如果 表达式 为   假False   则 结果 为     真True
脚本例子：

Dim a, b, c
a = 10 : b = 100
c = Not(a < b)
TracePrint "c =" , c
//输出:c = false
备注：
逻辑非口诀：真假互换


Or 逻辑或

命令名称： Or 逻辑或
命令功能： 用于对两个表达式进行逻辑或运算
语法格式： 结果 = 表达式1 Or 表达式2
参数说明：
表达式1：任意数据类型，任意表达式
表达式2：任意数据类型，任意表达式
返回值：
如果 表达式1 为   真True   且 表达式2 为  真True   则 结果 为   真True
如果 表达式1 为   真True   且 表达式2 为  假False  则 结果 为   真False
如果 表达式1 为   假False  且 表达式2 为  真True   则 结果 为   真False
如果 表达式1 为   假False  且 表达式2 为  假False  则 结果 为   假False
脚本例子：

Dim a, b, c, d, e
a = 10 : b = 100
c = 20 : d = 200
e = (a < b Or c > d)
TracePrint "e =" , e
////输出:e = true
备注：
逻辑或口诀：有真则真


File.Append 追加内容到文件

命令名称： File.Append 追加内容到文件
命令功能： 用于在指定的文本文件中追加字符内容，使其与原有内容合并
语法格式： File.Append(FileName,content)
参数说明：
FileName:字符串型,为文本文件路径
content:字符串型,欲追加的字符内容
返回值： 布尔值，追加内容成功返回true，否则返回false
脚本例子：

Dim 返回值,文件路径="/sdcard/MobileAnjian/anjian.txt",内容="我爱你",追加内容="，你也爱我吗？"
Call File.Write(文件路径,内容)
Call file.Append(文件路径, 追加内容)
返回值=File.Read(文件路径)
TracePrint 返回值 //返回字符串"我爱你，你也爱我吗？"
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


File.Bytes 获取文件字节数大小

命令名称： File.Bytes 获取文件字节数大小
命令功能： 计算一个文本文件的字节数大小
语法格式： File.Bytes(dir)
参数说明：
dir:字符串型,为文本文件路径
返回值： 整数型，返回文本文件的字节大小
脚本例子：

Dim 返回值,文件路径1="/sdcard/MobileAnjian/anjian.txt",内容="我爱你"
Dim 文件路径2="/sdcard/MobileAnjian/UFO.txt"
Dim 文件路径="/sdcard/MobileAnjian/anjian.txt",内容="abcd",字节数
Call Dir.Create(文件路径) //先创建一个文本文件
Call file.write(文件路径,内容) //将定义的内容写入文本中
字节数 = file.bytes(文件路径)
TracePrint 字节数 //返回4个字节
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


File.DeleteLine 删除文本指定行内容

命令名称： File.DeleteLine 删除文本指定行内容
命令功能： 删除文本文件中指定行的内容
语法格式： File.DeleteLine(dir,Line)
参数说明：
dir:字符串型,为文本文件路径
Line:整数型,欲删除内容的行数号
返回值： 无
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt"
Dim 内容=array("我爱你中国","我爱你母亲")
Call file.WriteLines (文件路径,内容) //将内容中的两行字符串写入文本文件
TracePrint file.Readline(文件路径, 1) //读取并输出第一行字符串内容"我爱你中国"
TracePrint file.Readline(文件路径, 2) //读取并输出第一行字符串内容"我爱你母亲"
Call File.DeleteLine(文件路径, 1) //删除第1行的内容
TracePrint file.Readline(文件路径, 1) //尝试再次输出第1行内容,
此时输出"我爱你母亲",说明原来的第一行内容"我爱你中国"已被删除
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


File.Length 获取文本字符数量

命令名称： File.Length 获取文本字符数量
命令功能： 计算一个文本文件所包含的字符数量
语法格式： File.Length(dir)
参数说明：
dir:字符串型,为文本文件路径
返回值： 整数型，返回文本文件的字符数量
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt",内容="我爱你啊中国",字符数
Call Dir.Create(文件路径) //先创建一个文本文件
Call file.write(文件路径,内容) //将定义的内容写入文本中
字符数 = file.length(文件路径)
TracePrint 字符数 //返回6个字符数量
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


File.LinesNumber 获取文本总行数

命令名称： File.LinesNumber 获取文本总行数
命令功能： 计算文本文件中的总行数
语法格式： File.LinesNumber(dir)
参数说明：
dir:字符串型,为文本文件路径
返回值： 整数型，返回文本文件的行数数量
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt"
Dim 行数
Dim 内容=array("我爱你中国","我爱你母亲")
Call file.WriteLines (文件路径,内容) //将内容中的两行字符串写入文本文件
TracePrint file.Readline(文件路径, 1) //读取并输出第一行字符串内容"我爱你中国"
TracePrint file.Readline(文件路径, 2) //读取并输出第一行字符串内容"我爱你母亲"
行数 = file.linesnumber(文件路径) //读取该文本文件的行数
TracePrint 行数 //返回行数2
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


File.Read 读取文件内容

命令名称： File.Read 读取文件内容
命令功能： 读取文件内容
语法格式： File.Read(FileName)
参数说明：
FileName:字符串型,为文件绝对路径
返回值： 字符串型,为读出的内容
脚本例子：

//写入文本信息（路径，内容）
Call File.Write("/sdcard/MobileAnjian/anjian.txt","我爱按键精灵")
//读取文本信息（路径）
Dim 返回值
返回值=File.Read("/sdcard/MobileAnjian/anjian.txt")
TracePrint 返回值
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径
如果读取文本文件，记得将文本文件的编码设置为UTF-8，以免读取中文出现乱码


File.ReadLine 读取文本指定行内容

命令名称： File.ReadLine 读取文本指定行内容
命令功能： 读取文本文件中指定行的内容
语法格式： File.ReadLine(dir,Line)
参数说明：
dir:字符串型,为文本文件路径
Line:整数型,欲删除内容的行数号
返回值： 字符串型,为读出的指定行内容
脚本例子：

Dim 文件路径="/sdcard/MobileAnjian/anjian.txt"
Dim 文件路径="/sdcard/MobileAnjian/anjian.txt"
Dim 内容=array("我爱你中国","我爱你母亲")
Call file.WriteLines (文件路径,内容) //将内容中的两行字符串写入文本文件
TracePrint file.Readline(文件路径, 1) //读取并输出第一行字符串内容"我爱你中国"
TracePrint file.Readline(文件路径, 2) //读取并输出第二行字符串内容"我爱你母
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径


File.ReadLines 读取文本文件内容,存为数组

命令名称： File.ReadLines 读取文本文件内容,存为数组
命令功能： 读取文本文件内容,存为数组
语法格式： File.ReadLines(FileName)
参数说明：
FileName:字符串型,为文件绝对路径
返回值： 返回数组,由读取每一行的字符串组成
脚本例子：

//注意：每一个数组元素读完会自动换行,不是读在一行
Dim 路径, 内容数组, 读取结果, 每行内容
路径 = "/sdcard/anjian.txt"
内容数组 = Array("按键精灵", "我爱你")
//往路径中写入内容，注意，这个是覆盖写入
File.WriteLines 路径, 内容数组
//读取文件路径的内容保存到读取结果中
读取结果 = File.ReadLines(路径)
//调试输出数组
For Each 每行内容 in 读取结果
   TracePrint 每行内容
Next
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径
如果读取文本文件，记得将文本文件的编码设置为UTF-8，以免读取中文出现乱码
使用读取结果时，请注意，读取结果是保存到数组中的


File.Write 写内容到文件

命令名称： File.Write 写内容到文件
命令功能： 写入文件内容
语法格式： File.Write(FileName,str)
参数说明：
FileName:字符串型,为文件绝对路径
str:字符串型,为待写入文本的内容
返回值： 无
脚本例子：

//写入文本信息（路径，内容）
Call File.Write("/sdcard/MobileAnjian/anjian.txt","我爱按键精灵")
//读取文本信息（路径）
Dim 返回值
返回值=File.Read("/sdcard/MobileAnjian/anjian.txt")
TracePrint 返回值
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径
写入方式为覆盖写入，即删除原内容后写入新内容
多个参数不换行，如果要换行写入，请加"\n"换行转义符


File.WriteLines 写入数组内容到文件

命令名称： File.WriteLines 写入数组内容到文件
命令功能： 写入数组内容到文件
语法格式： File.WriteLines(FileName, Lines)
参数说明：
FileName:字符串型,为文件绝对路径
Lines:字符串数组,为待写入文本的内容
返回值： 无
脚本例子：

//注意：每一个数组元素写完会自动换行,不是写在一行
Dim arr(5)
arr(0)="我"
arr(1)="爱"
arr(2)="按"
arr(3)="键"
arr(4)="精"
arr(5)="灵"
Call File.WriteLines("/sdcard/anjian.txt", arr)
备注：
可以使用RE管理器之类的安卓应用来查看手机文件路径
写入方式为覆盖写入，即删除原内容后写入新内容
写入的内容为数组字符串，请勿放普通变量


DateTime.Year 获得时间中的年份

命令名称： DateTime.Year 获得时间中的年份
命令功能： 获得时间中的年份
语法格式： DateTime.Year(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间中的年份
脚本例子：

Traceprint DateTime.Year()
备注： 无


DateTime.Month 获得时间中的月份

命令名称： DateTime.Month 获得时间中的月份
命令功能： 获得时间中的月份
语法格式： DateTime.Month(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间中的月份
脚本例子：

Traceprint DateTime.Month()
备注：
无


DateTime.Day 获得时间是当月的第几天

命令名称： DateTime.Day 获得时间是当月的第几天
命令功能： 获得时间是当月的第几天
语法格式： DateTime.Day(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 整数,返回时间是当月的第几天
脚本例子：

Traceprint DateTime.Day()
备注：
无


DateTime.Hour 获得时间中的小时数

命令名称： DateTime.Hour 获得时间中的小时数
命令功能： 获得时间中的小时数
语法格式： DateTime.Hour(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间中的小时数
脚本例子：

Traceprint DateTime.Hour()
备注：
无


DateTime.Minute 获得时间中的分钟数

命令名称： DateTime.Minute 获得时间中的分钟数
命令功能： 获得时间中的分钟数
语法格式： DateTime.Minute (t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间中的分钟数
脚本例子：

Traceprint DateTime.Minute()
备注：
无


DateTime.Second 获得时间中的秒数

命令名称： DateTime.Second 获得时间中的秒数
命令功能： 获得时间中的秒数
语法格式： DateTime.Second(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间中的秒数
脚本例子：

Traceprint DateTime.Second()
备注： 无


DateTime.WeekDay 获得时间是星期几

命令名称： DateTime.WeekDay 获得时间是星期几
命令功能： 获得时间是星期几
语法格式： DateTime.WeekDay(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间是星期几
脚本例子：

Traceprint DateTime.WeekDay()
备注： 无


DateTime.YearDay 获得时间是当年的第几天

命令名称： DateTime.YearDay 获得时间是当年的第几天
命令功能： 获得时间是当年的第几天
语法格式： DateTime.YearDay(t)
参数说明：
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 返回时间是当年的第几天
脚本例子：

Traceprint DateTime.YearDay()
备注： 无


DateTime.Format 按照格式输出时间

命令名称： DateTime.Format 按照格式输出时间
命令功能： 按照指定格式输出时间
语法格式： DateTime.Format(fmt[,t])
参数说明：
fmt:分别用%Y, %m, %d, %H, %M, %S代表年,月,日,时,分,秒
如果不填格式,默认格式为%Y-%m-%d %H:%M:%S
t:为可选参数,可以填写Time()得到的时间。如果不填,则取当前时间
返回值： 无
脚本例子：

Traceprint DateTime.Format()
备注：
无


Thread.Start 启动线程

命令名称： Thread.Start 启动线程
命令功能： 启动线程
语法格式：
Thread.Start(thread_name, [var1, var2 ...])
参数说明：
thread_name:线程名字,需要作为多线程启动的子程序或函数名
var1, var2 ...:传递给线程的参数,可省略,最多支持10个
返回值： 线程id
脚本例子：

//如果主线程停止,所有的子线程都会停止
//启动线程可能有短暂延迟
Dim  h
Sub test_thread(var1,var2)
    TracePrint var1&" | "&var2
End Sub
h=Thread.Start(test_thread,"我爱","按键精灵")
Do
    Delay 2000
Loop
备注：
返回值线程ID目前无法输出查看
每个线程之间变量无法通用，需要通过 SetShareVar 设置共享变量
和 GetShareVar 获取共享变量 来实现变量互通
如果主线程停止了，那么所有的子线程都会停止


Thread.Stop 结束线程

命令名称： Thread.Stop 结束线程
命令功能： 结束线程
语法格式：
Thread.Stop(thread_id)
参数说明：
thread_id:线程id,启动线程的返回值
返回值： 无
脚本例子：

//如果主线程停止,所有的子线程都会停止
//启动线程可能有短暂延迟
Dim  h
Sub test_thread(var1,var2)
    Do
        TracePrint var1&var2
        Delay 1000
    Loop
End Sub
h=Thread.Start(test_thread,"我爱","按键精灵")
Thread.Stop(h)
Do
    Delay 2000
Loop
备注：
返回值线程ID目前无法输出查看
每个线程之间变量无法通用，需要通过 SetShareVar 设置共享变量
和 GetShareVar 获取共享变量 来实现变量互通
如果主线程停止了，那么所有的子线程都会停止


Thread.Wait 等待线程

命令名称： Thread.Wait 等待线程
命令功能： 等待线程执行完成
语法格式：
Thread.Wait(thread_id)
参数说明：
thread_id:线程id,启动线程的返回值
返回值： 无
脚本例子：

//等待线程时,主线程不会向下执行
Dim  h
Sub test_thread(var1,var2)
    Do
        TracePrint var1&var2
        Delay 1000
    Loop
End Sub
h=Thread.Start(test_thread,"我爱","按键精灵")
Thread.Wait(h)
Do
    delay 2000
loop
备注：
返回值线程ID目前无法输出查看
每个线程之间变量无法通用，需要通过 SetShareVar 设置共享变量
和 GetShareVar 获取共享变量 来实现变量互通
如果主线程停止了，那么所有的子线程都会停止


Thread.GetShareVar 获取共享变量值

命令名称： Thread.GetShareVar 获取共享变量值
命令功能： 获取共享变量的值
语法格式：
Thread.GetShareVar Variable
参数说明：
Variable:变量名,字符串,类似于ini配置中的键名
注意:变量名是字符串,前后要加双引号,不需要定义
返回值： 共享变量的值
脚本例子：

//下面示例会返回共享变量Sum的值
Thread.SetShareVar "Sum", 1
Dim a
a=Thread.GetShareVar("Sum")
Traceprint "共享变量sum的值"&a
备注：
每个线程之间变量无法通用，需要通过 SetShareVar 设置共享变量
和 GetShareVar 获取共享变量 来实现变量互通
每个线程设置的都是同一个共享变量，所以后设置的会覆盖先设置的


Thread.SetShareVar 设置共享变量

命令名称： Thread.SetShareVar 设置共享变量
命令功能： 设置全局共享变量
语法格式：
Thread.SetShareVar Variable,Value
参数说明：
Variable:变量名,字符串,类似于ini配置中的键名
Value:变量的值,任意数据类型，与变量名相配对
注意:变量名是字符串,前后要加双引号,不需要定义
返回值： 无
脚本例子：

//注意每个线程设置的都是同一个共享变量，所以后设置的会覆盖先设置的
Thread.SetShareVar "Sum", 1
Dim a
a=Thread.GetShareVar("Sum")
Traceprint "共享变量sum的值为"&a
备注：
每个线程之间变量无法通用，需要通过 SetShareVar 设置共享变量
和 GetShareVar 获取共享变量 来实现变量互通
每个线程设置的都是同一个共享变量，所以后设置的会覆盖先设置的


『按键精灵之小技巧总目录』

从零学起之安卓篇《心得笔记汇总——荆棘》

从零学起之安卓篇《安卓版命令大全》

基础篇

脚本UI界面：UI控件编写，布局排版，相关参数设定与获取范例教程

从零学起之安卓篇《按键精灵安卓版UI界面控件应用介绍》

触摸命令：触屏操作相关教程

从零学起之安卓篇《多点触屏控制命令介绍：TouchDown\TouchMove \TouchUp》

从零学起之安卓篇《按键抓抓辅助工具》

核心篇（命令大全，图色识别，颜色祥解）
按键精灵安卓版：MQ 语言介绍 （命令大全）
从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
从零学起之科普篇《偏色与相似度汇总介绍》
拓展篇

LUA应用相关教程

按键精灵安卓版之LUA篇《关于调用LUA命令进行文件操作》

LUA 数组相关操作插件

lua插件字符处理篇

adb插件模拟 各种重启关机命令 分享给大家

从零学起之安卓篇《版本1.3.1命令更新介绍，GetPixelColor\WriteConfig\ReadConfig》
从零学起之安卓篇《版本1.5.1命令更新介绍》
从零学起之安卓篇《如何在安卓模拟器中进行多分辨率开发调试》
分享一个日期格式化函数，日期、时间格式不再别扭
从零学起之安卓篇《PutAttachment释放命令，细节注意》
【技巧】安卓版按键精灵手机抓抓 取色取坐标 获取屏幕触点坐标（4月12日17：00更新）

实战篇
从零学起之安卓实战篇《全民打怪兽循环冒险》
从零学起之安卓实战篇《关于刀塔传奇开局与日常思路》
从零学起之安卓实战篇《天天酷跑好友送心》

常见问题
Root推荐工具及详细的一键root图文教程
Root推荐工具
从零学起之编外篇《关于靠谱安卓模拟器Root权限需知》
从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》
从零学起之安卓篇《独立APK小精灵制作流程介绍》
从零学起之安卓篇《豆比小闹钟Niko》
终结分辨率噩梦！按键精灵（安卓版）全面支持靠谱助手


//由于按键精灵安卓版天生没有UBound函数，所以需要自制一个UBound函数，下面就教大家如何自制该函数并通过实例演示如何获取数组最大下标：

Dim 商品(3),货品编号,a
商品(0) = "鸡蛋" : 商品(1) = "番茄" : 商品(2) = "南瓜"
// 遍历数组
For i = 0 To 自制UBound(商品)-1
TracePrint 商品(i)
Next
a=自制UBound(商品) //通过自制UBound函数获取数组最大小标
TracePrint a
Function 自制UBound(arr)
Dim i:i=0
For Each a In arr
i=i+1
Next
自制UBound=i
End Function

//防止屏目反转的函数封装
Sub 屏返警告
If GetScreenRotation() = 3 Then ms "注意：手机屏幕已反转！请转正！":Delay 500: Vibrate 500
End Sub

//信息显示及调试函数封装
Sub ms(s)
ShowMessage s:TracePrint s
End Sub

//循环报警函数封装
Sub 警告(s)
For 3 : Vibrate 500 : Delay 1000 : Next
Do:ms s:Delay 1000:Loop
End Sub

//以下是天下HD刷竞技场脚本源码：
//

对官方所有找图找色函数的封闭（统一为一个函数进入调用），以天下HD为实例，其它游戏亦可使用本程序架构，
只要掌握如何调用的技巧，即可实现轻松编程，通杀所有分辩率（本实例中仅使用4个分辩率，分别是720*1280、540*960、1080*1800、1080*1920）

  //注明：本实例涉及找色函数框架大部份是在按键工程师05的基础上进行的改进和创新！涉及的图片请通过附件下载！

  Dim IntX,IntY,win_x,win_y,win_w,win_h,UFO,ZH,ZZ,色数,图ID

  win_x = GetScreenX():win_y = GetScreenY():ms "您的手机分辨率为：" & win_x & "*" & win_y:Delay 1000

  win_w = win_x / 720 : win_h = win_y / 1280 : If Abs(win_w - win_h) < 0.01
  Then 第一套广播体操  Else 体操分析

  If win_w <> 1 or win_h <> 1 Then TracePrint "比例换算" : ZH = TRUE

  SetControlBarPos 1, 0

  Sub 点击(x, y)

      If ZH Then

          Dim 坐标

          坐标 = Array(x,
  y, 0, 0, "", ""):坐标=比例转换(坐标)

          Touch 坐标(0), 坐标(1), 100

      Else

          Touch X, Y, 100

      End If

  End Sub

  Sub 触屏划动(x1, y1, x2, y2,t)

      Dim 坐标()=Array(x1, y1, x2, y2,
  "", "") : 坐标=比例转换 (坐标)

      TouchDown 坐标(0),坐标(1),1

      Delay 500

      TouchMove 坐标(2),坐标(3),1,t

      Delay 500

      TouchUp 1

      Delay 500

  End Sub

  Sub 独立划动(x1, y1, x2, y2,t)

      TouchDown x1,y1,1

      Delay 500

      TouchMove x2,y2,1,t

      Delay 500

      TouchUp 1

      Delay 500

  End Sub

  Sub ms(s)

      ShowMessage s:TracePrint s

  End Sub

  Sub 偏击(x, y)

      If ZH Then

          Dim 坐标

          坐标 = Array(x,
  y, 0, 0, "", ""):坐标=比例转换(坐标)

          Touch intx+坐标(0),
  inty+坐标(1), 100

      Else

          Touch intx+x, inty+y, 100

      End If

  End Sub

  Sub 取坐标(字符串)

      Dim arr()

      arr = Split(字符串, ",")

      arr = Split(arr(0), "|")

      intx = arr(0) : inty = arr(1)

  End Sub

  Function 判断点击(数组特征, s)

      If 判断(数组特征, s)
  Then Touch IntX, IntY, 100 : 判断点击 = True

  End Function

  Function 判断(数组特征,
  S)

      If IsNull(数组特征) Then Exit Function

      If (数组特征(0) <> null and 数组特征(1) <> null) and (not(IsNumeric(数组特征(0)))
  and not(IsNumeric(数组特征(1)))) then do :MS "数组特征有误"&数组特征(0)&数组特征(1):Delay 1000:loop

      Dim OK=False,sm=0.9,arr()=数组特征

      If Not (IsNull(arr(5))) = True and not(IsNumeric(arr(5))) Then

          If Not(IsNull(arr(6))) then sm=arr(6)

          FindMultiColor arr(0), arr(1), arr(2),
  arr(3), arr(4), arr(5), 0, sm, intX, intY

          If intX > -1 Then OK = true

          If IsNumeric(arr(5)) Then sm = arr(5)

          If Not (IsNull(arr(6))) and arr(6) =
  true Then

              色数 = GetColorNum(arr(0), arr(1), arr(2), arr(3), arr(4), sm)

              If ZH Then

                  If ZZ =
  1080.1920 Then 色数 = 色数 /
  1.8591

                  If ZZ =
  540.960 Then 色数 = 色数 * 2.1515

                  If ZZ =
  480.854 Then 色数 = 色数 * 2.5357

                  If ZZ =
  480.800 Then 色数 = 色数 * 5

              End If

              判断 = 色数

              If S <>
  "" Then ms S

              Exit Function

          End If

      ElseIf Not (IsNumeric(arr(0))) Then

          If Not (IsNull(arr(1))) Then sm =
  arr(1)

          If CmpColorEx(arr(0), sm) = 1 Then 取坐标 (arr(0)) : OK = true

      ElseIf Not (IsNull(arr(4))) and Not (IsNull(arr(5))) and
  IsNumeric(arr(6)) Then

          图ID =
  FindPic(arr(0), arr(1), arr(2), arr(3), arr(4), arr(5), 0, arr(6), intX,
  intY)

          If 图ID > -1
  Then OK = TRUE

      Else

          FindColor arr(0), arr(1), arr(2),
  arr(3), arr(4), 0, sm, intX, intY

          If intX > -1 Then OK = true

      End If

      If OK and S <> "" Then ms S

      判断 = OK

  End Function

  Function 比例转换(数组)

      If win_w=1 or win_h=1 Then

          比例转换 = 数组

          Exit Function

      End If

      If IsNull(数组)then Exit Function

      Dim 重组()

      If Not (IsNull(数组(5))) = True and
  not(IsNumeric(数组(5))) Then

          重组 = Array(数组(0), 数组(1), 数组(2),
  数组(3), 数组(4), 数组(5))

      ElseIf Not (IsNull(数组(4))) = True Then

          重组 = Array(数组(0), 数组(1), 数组(2),
  数组(3), "", "")

      ElseIf Not (IsNumeric(数组(0))) Then

          重组 = Array(0,
  0,"",数组(0))

      End If

      Dim arr_BB(),i,n,arr = 重组

      arr_BB=Array(win_w,win_h)

      i=0

      Dim arr1(),str,arr2()

      For Each n In arr

          If IsNumeric(n)=True Then

              arr(i)=n*arr_BB(i Mod 2)

          ElseIf InStr(1,n,"|")>0
  Then

   arr1=Split(arr(i),",")

              str=""

              For Each n In arr1

  arr2=Split(n,"|")

                  str=str
  & arr2(0)*win_w & "|" & arr2(1)*win_h &
  "|" & arr2(2) & ","

              Next

   arr(i)=Left(str,Len(str)-1)

              Exit For

          End If

          i=i+1

      Next

      If Not (IsNull(数组(5))) = True and
  not(IsNumeric(数组(5))) Then

          比例转换 =
  Array(arr(0), arr(1), arr(2), arr(3), arr(4), arr(5), 数组(6))

      ElseIf Not (IsNull(数组(4))) = True Then

          比例转换 =
  Array(arr(0), arr(1),arr(2),arr(3),数组(4),数组(5),数组(6))

      ElseIf Not (IsNumeric(数组(0))) Then

          比例转换 =
  Array(arr(3), 数组(1))

      End If

  End Function

  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  Sub 体操分析

      If Abs(win_w-win_h) >= 0.01 Then
  win_w=win_x/1080:win_h=win_y/1800:If Abs(win_w - win_h) < 0.1 Then 第二套广播体操 Else ms "您的手机分辩率暂不支持！":Delay
  3000:EndScript

  End Sub

  If win_x = 540 and win_y = 960 Then

      ZZ = 540.960

  ElseIf win_x = 1080 and win_y = 1920 Then

      ZZ = 1080.1920

  End If

  Sub 屏返警告

      If GetScreenRotation() = 3 Then ms "注意：手机屏幕已反转！请转正！":Delay 500: Vibrate 500

  End Sub

  Sub 点击进入竞技场

      If UFO=1 then 点击 479,1199 Else 点击 718,1677

  End Sub

  Sub 警告(s)

      For 3 : Vibrate 500 : Delay 1000 : Next

      Do:ms s:Delay 1000:Loop

  End Sub

  Sub 截

      Delay 500:KeepCapture

  End Sub

  Sub 检测猫熊

      For 20

          截:If 判断(大猫熊, "") Then Exit For

      Next

  End Sub

  Sub 点击匹配对手

      if UFO=1 THEN 点击 92,961 Else 点击 146,1384

  End Sub

  Sub 归零处理

      If ReadUIConfig("竞技处理", 0) =
  0 Then

          警告 "竞技次数已用完！"

      Else

          Do while 判断(零,""):ms "请等待竞技次数刷新时间……":截:点击匹配对手:Loop

      End If

  End Sub

  比例重置

  竞技任务

  Dim 竞技,指引,大猫熊,匹配对手,开战,胜利,失败,零,圈差

  Sub 第一套广播体操

      UFO=1

      竞技 = Array(72, 521, 566, 594,
  "Attachment:竞技1.png", "000000",
  0.7)

      零 = Array(147, 992, 194, 1038,
  "attachment:零1.png", "000000",
  0.8)

      指引 = 比例转换(Array("698|908|FEBB29,672|887|0182E2,678|917|24EBF9,695|889|FFFFFF"))

      大猫熊 =比例转换(Array("591|1099|191951,596|1176|27278B,631|1120|FEFEFE,628|1111|1F27C0,661|1131|DDE5ED"))

      匹配对手 = 比例转换(Array("88|908|089BF4,111|907|31D3FB,85|1018|0699F4,109|1020|2ED2FB,82|1054|61472B"))

      开战 = 比例转换(Array("118|1044|0699F4,145|1042|32D5FB,121|228|8C5430,123|315|8C5430"))

      胜利 = 比例转换(Array("535|269|A3F5FF,513|461|92E5FD,453|386|70D9FF,557|266|E8FFFF,477|337|316FE5,571|354|FFFFF7"))

      失败=比例转换(array("460|361|EFDCBD,435|393|F6DDC5,496|316|E7D6AB,571|361|000000,546|394|000000,405|307|000000,450|470|000000"))

      圈差=比例转换(array("669|1219|60FFFF,667|1238|58FFFF,684|1238|EBFFFF,672|1245|E1B449"))

  End Sub

  Sub 第二套广播体操

      UFO = 2

      竞技 = Array(113, 722, 842, 833,
  "attachment:竞技2.png", "000000",
  0.7)

      零 = (Array(208,1426,302,1506,
  "attachment:零2.png", "000000",
  0.8))

      指引 = 比例转换(Array("1011|1225|007BE0,1023|1221|06CCF5,1048|1252|FEBA28,1031|1273|02FCFE"))

      大猫熊 =比例转换(Array("942|1561|FEFEFE,939|1576|FCFCFE,878|1558|F3F3F3,865|1569|F5F5F5,891|1632|27278C,944|1611|2B3AE6,995|1765|1E36FE"))

      匹配对手 = 比例转换(Array("128|1300|0699F4,166|1301|30D3FB,126|1464|059AF4,166|1463|30D3FB"))

      开战 = 比例转换(Array("181|1506|089BF4,216|1504|30D3FB,185|285|8C5430,186|415|8D5430"))

      胜利 = 比例转换(Array("746|597|8EFFFA,737|496|F9FEFF,721|348|2B72E4"))

      失败=比例转换(array("684|480|F2DDBE,731|426|E8D7B0,603|397|000000,835|507|000000,788|626|000000,872|665|000000,673|651|000000"))

      圈差=比例转换(array("1008|1715|5FFFFF,1005|1741|57FFFF,1032|1743|F3FFFF,1014|1755|E1B54A"))

  End Sub

  Sub 比例重置

      If ZZ = 1080.1920 Then

          竞技 = Array(118,
  780, 848, 883, "attachment:竞技3.png",
  "000000", 0.7)

          零 = Array(207,
  1490, 309, 1554, "attachment:零3.png",
  "000000", 0.8)

      ElseIf ZZ = 540.960 Then

          指引 =
  Array("520|649|FDB323,506|633|0FD0F5,502|631|0186E3,515|661|00FCFE,526|640|FFFFFF")

          大猫熊=array("425|829|F7F7F7,462|858|2D34D0,499|896|45BFD8,418|852|FBFBFE,497|798|57A9B9")

          竞技 = Array(31,
  379, 447, 446, "attachment:竞技4.png",
  "000000", 0.7)

          匹配对手=array("38|707|079AF4,60|707|32D4FB,38|800|079AF4,59|799|30D3FB,42|702|099BF4")

          零 =
  Array(81,767,141,826, "attachment:零4.png",
  "000000", 0.8)

          失败=array("392|197|EBD3AA,361|246|EBD9BA,425|282|000000,307|195|000000,424|172|D8C897,449|185|FFFAFD,324|326|F7E0CE")

          胜利=array("424|165|A6FAFF,405|205|4273D6,443|213|FFFAFF,343|202|000000,399|327|93E8FF,399|308|FCFAFF,297|329|4BD9F2")

      End If

  End Sub

  Sub 点击立即前往按钮

      If ufo=1 then 偏击 -16,441 Else 偏击 -23,661

  End Sub

  Sub 掉线重连

      SetScreenScale 1080,1920

      If ufo = 1 Then 点击 388, 938

      ResetScreenScale

  End Sub

  Sub 竞技任务

      Dim i=0,胜利语句,失败语句,重连=0

      胜利语句 = Array("对手太弱了……", "胜利的旗帜向我飘扬！", "简直是找虐！", "独孤求败！！！","我只用了一只手","还有谁？！")

      失败语句 = Array("我会回来的！","胜败乃兵家常事！","不就是个死嘛……","你给我记住！","下一次你屎定了！","先让你一次！")

      Do

          Rem kiss : 截

          屏返警告

          If 判断点击(圈差, "圈差") THEN goto kiss

          If 判断点击(指引, "指引") THEN goto kiss

          If 判断(竞技, "前往竞技场") Then 点击立即前往按钮:检测猫熊:goto kiss

          If 判断(大猫熊, "发现大猫熊") Then 点击进入竞技场  : Goto kiss

          If 判断(零,"") then 归零处理

          If 判断点击(匹配对手, "匹配个对手给我！")
  Then  Goto kiss

          If 判断点击(开战, "开战喽！") Then 重连=0:Goto kiss

          If 判断点击(胜利, 胜利语句(i)) Then Goto kiss

          If 判断点击(失败, 失败语句(i)) Then Goto kiss

          i = i + 1 : If i = 6 Then i = 0

          重连 = 重连 + 1 :if 重连=30 then 掉线重连:重连=0

      Loop

  End Sub

图片文件.rar

2015-1-9 12:12 上传

点击文件名下载附件


多线程实例演示

TracePrint "我是主线程，先启动子线程1并等其运行完"
dim a = Thread.Start(子线程,1,3)
Thread.Wait(a)
TracePrint "我是主线程，子线程1总算运行完了，下面启动子线程2、3，并在5秒后停止脚本"
Thread.Start(子线程,2,3)
Thread.Start(子线程,3,8)
For i = 1 to 5
    Delay 1000
    TracePrint "【主程序】运行了" & i & "秒"
next
TracePrint "【主程序】运行完毕，还在运行的线程3也只好跟我一起停止了,此时共享变量值=" & Thread.GetShareVar("共享变量")

Sub 子线程(序号,循环时间)
    For i = 1 to 循环时间
        Delay 1000
        TracePrint "子线程" & 序号 & "运行了" & i & "秒"
    next
    Thread.SetShareVar "共享变量", 序号
    TracePrint "========子线程" & 序号 & "运行完毕并把共享变量改成了" & 序号 & "========"
End sub


插件功能：文件操作功能，包括文本读写、文件夹创建、文件夹删除、文件创建、删除、重命名、复制和移动等。

使用方式：
1、下载附件中的FileEx.lua插件文件，放到按键精灵安装目录下的plugin文件夹中。
2、在脚本源码开头导入插件文件后即可正常调用命令。

例子：

1. //导入插件

2. Import "FileEx.lua"

3. //写入文本信息（路径，内容）

4. Call FileEx.Write("/sdcard/MobileAnjian/anjian.txt","我爱按键精灵")

5. //读取文本信息（路径）

6. Dim 返回值

7. 返回值=FileEx.Read("/sdcard/MobileAnjian/anjian.txt")

8. TracePrint 返回值

复制代码

1、读取文本文件内容。
格式：FileEx.Read(FileName)
返回值：字符串型，为读出的内容。
示例：

1. Dim 返回值

2. 返回值=FileEx.Read("/sdcard/anjian.txt")

3. TracePrint 返回值

复制代码

2、读取文本文件内容，存为数组。
格式：FileEx.ReadLines(FileName)
返回值：数组型，读取每一行的字符串。
示例：

1. Dim arr(),n

2. arr=FileEx.ReadLines("/sdcard/anjian.txt")

3. For each n in arr

4. TracePrint n

5. Next

复制代码

3、写入内容到文本文件。
格式：FileEx.Write(FileName,str)
返回值：无
示例：

1. Call FileEx.Write("/sdcard/anjian.txt","我爱按键精灵")

复制代码

注意：写文件会覆盖原有内容

4、写入数组内容到文本文件。
格式：FileEx.WriteLines(FileName, Lines)
返回值：无
示例：

1. Dim arr(5)

2. arr(0)="我"

3. arr(1)="爱"

4. arr(2)="按"

5. arr(3)="键"

6. arr(4)="精"

7. arr(5)="灵"

8. Call FileEx.WriteLines("/sdcard/anjian.txt", arr)

复制代码

注意：每一个元素写完会自动换行，不是写在一行

5、新建文件夹。
格式：FileEx.CreateFolder(dirname)
返回值：无
示例：

1. //更新前

2. Call FileEx.CreateFolder("/sdcard/MobileAnjian/plugin/QQ")

复制代码

1. //更新后

2. Call FileEx.CreateFolder("/sdcard/MobileAnjian/plugin/QQ/QQ/YY")

复制代码

注意：只能在已存在的目录下创建一个新目录（更新后可以在不存在的目录下创建一个新目录）

6、删除文件夹。
格式：FileEx.DeleteFolder(dirname)
返回值：无
示例：

1. Call FileEx.DeleteFolder("/sdcard/MobileAnjian/plugin/QQ")

复制代码

7、新建文件。
格式：FileEx. CreateFile(filename)
返回值：无
示例：

1. Call FileEx.CreateFile("/sdcard/MobileAnjian/plugin/QQ.txt")

复制代码

8、删除文件。
格式：FileEx. DeleteFile(filename)
返回值：无
示例：

1. Call FileEx.DeleteFile("/sdcard/MobileAnjian/plugin/QQ.txt")

复制代码

9、重命名文件。
格式：FileEx. ReNameFile(oldname, newname)
返回值：无
示例：

1. Call FileEx.ReNameFile("/sdcard/MobileAnjian/plugin/QQ.txt","/sdcard/MobileAnjian/plugin/YY.txt")

复制代码

10、复制文件。
格式：CopyFile(file1, file2)
返回值：无
示例：

1. Call FileEx.CopyFile("/sdcard/MobileAnjian/plugin/QQ.txt","/sdcard/MobileAnjian/QQ.txt")

复制代码

11、移动文件。（支持文件夹移动）
格式：FileEx. MoveFile(file1, file2)
返回值：无
示例：

1. Call FileEx.MoveFile("/sdcard/MobileAnjian/plugin/yy.txt","/sdcard/MobileAnjian/")

复制代码

12.判断文件是否存在
格式：FileEx. IsFileExist(file)
返回值：布尔型。Fales表示文件不存在，True表示文件存在。
示例：

1. Dim IsFile

2. IsFile=FileEx.IsFileExist("/sdcard/MobileAnjian/plugin/yy.txt")

3. If IsFile=True Then

4. TracePrint "此文件存在"

5. Else

6. TracePrint "此文件不存在"

7. End If

复制代码

13.添加新内容到文件（不会覆盖原有内容,新增！）
格式：FileEx.WriteEx(file,str)
返回值：无
示例：

1. //在"/sdcard/anjian.txt"文件添加"zhou164902127"

2. FileEx.WriteEx("/sdcard/anjian.txt","zhou164902127")

复制代码

温馨提示：若在手机端读取文件时出现乱码情况，请先检查手机端所使用的文本文件是否为UTF-8格式

总结：目前暂时整理这些，如有什么问题可以跟帖留言。
插件下载地址：（惯例回复可见，希望大家支持下）
链接：http://pan.baidu.com/s/1i3A94f7 密码：zyhv


本期主题：提供一份较为繁杂点的思路框架给大家借鉴学习。
本期简介：由于近期许多小学生咨询关于开局号的思路，我琢磨再三就提供一个主线思考框架供大家参考。（其实我是懒得去写，因为已经有大大写了，我就不重复了）

就不扯蛋了，直接上源码，主线框架，有认真研究过我上个教程的同学，且认真领会并学会应用相关多点找色命令等同学应该可以得到启发。
注：我这提供的是思路！给一些经验积累较少的同学准备的！想吃白食的同学勿扰。

上个实例教程，是可以用的哦！里面有初级版本与后期的升级版本，希望同学们可以认真理解，看看两个版本的优化部分，如果你们都能领悟我代码中不同位置的写法用意，说明你们悟性不错！
教程：从零学起之安卓实战篇《全民打怪兽循环冒险》
科普：从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
源码：（惯例，源码抢鲜看，看完点个赞！）

1. /////////////////////////////////////////////////////////////////////////////

2. '主线循环

3. Do

4. KeepCapture

5. If 判断点击(手指指引)=True Then

6. ElseIf 判断(首页界面)=True Then

7. If 判断点击(英雄按钮)=True Then

8. ElseIf 判断点击(任务按钮)=True Then

9. ElseIf 判断点击(活动按钮)=True Then

10. ElseIf 判断点击(签到按钮)=True Then

11. Else

12. Call 屏幕拖拽最左()

13. KeepCapture '重新截图，进行判断

14. If 判断点击(邮箱按钮)=False Then

15. Call 屏幕拖拽向右()

16. KeepCapture '重新截图，进行判断

17. If 判断点击(召唤宝箱)=True Then

18. ElseIf 判断点击(战役按钮)=True Then

19. End If

20. End If

21. End If

22. ElseIf 判断(英雄列表界面)=True Then '以下区域是英雄界面操作

23. Call 判断点击(需要装备英雄)

24. ElseIf 判断(英雄属性界面)=True Then

25. Call 判断点击(可装备)

26. ElseIf 判断(装备选择界面)=True Then

27. Call 点击(装备按钮)

28. ElseIf 判断(任务界面)=True Or 判断(活动界面)=True Then '任务界面 或 活动界面，进入，点可领取奖励

29. Call 判断点击(完成任务)

30. ElseIf 判断点击(任务栏红点)=True Then '任务栏三角形图标有红点，点开（作业：这个判断为什么写这里）

31. ElseIf 判断(签到界面)=True Then '签到界面操作

32. If 判断点击(签到奖励)=False Then

33. Call 屏幕拖拽向下()

34. KeepCapture '重新截图，进行判断

35. Call 判断点击(签到奖励)

36. End If

37. Call 点击(关闭签到界面)

38. ElseIf 判断(邮箱界面)=True Then '邮箱界面操作

39. Call 判断点击延时消失(领取邮件,5)

40. Call 点击(关闭邮箱界面)

41. ElseIf 判断(宝箱界面)=True Then '宝箱界面操作

42. If 判断点击延时消失(青铜宝箱查看,5)=True Then

43. ElseIf 判断(免费提示)=True Then '有免费，点购买

44. If 判断点击延时消失(购买一个按钮,5)=True Then

45. Call 判断点击(抽到英雄)

46. End If

47. ElseIf 判断点击(返回按钮)=True Then '无免费，点返回

48. End If

49. ElseIf 判断(宝箱奖励)=True Then

50. Call 点击(确定按钮)

51. ElseIf 判断(战役界面)=True Then '战役界面操作

52. If 判断点击(新增副本指引)=True Then '判断到新副本的青色箭号指引

53. ElseIf 判断点击(下页副本地图)=True Then '无指引，点下一页副本地图

54. Else

55. ShowMessage "当前无新副本可攻略"

56. End If

57. ElseIf 判断点击(副本入口)=True Then '副本入口，三角形那图标

58. ElseIf 判断(副本英雄选择)=True Then

59. If 判断点击(未上阵英雄)=True Then

60. ElseIf 判断点击(进入副本)=True Then '进入副本，双剑交叉图标

61. End If

62. ElseIf 判断(战斗界面)=True Then '进入战斗操作支线循环

63. Call 战斗操作()

64. ElseIf 判断点击(战斗结束)=True Then '点击退出按钮

65. '这里其实还得做胜利或失败的判断，如果失败，开局号的话，必须去提升下英雄技能。

66. End If

67. Delay 1000 '循环中适当的延时给予CPU响应时间，使脚本更为流畅

68. Loop

69. Sub 战斗操作() '支线循环

70. Do

71. If 判断(战斗第一场)=True Then

72. ElseIf 判断(战斗第二场)=True Then

73. '根据UI设置，决定是否开启自动战斗或手动点释放技能

74. If UI设置开启则 Then

75. Call 自动技能()

76. End If

77. ElseIf 判断(战斗第三场)=True Then

78. Call 自动技能()

79. End If

80. Delay 1000

81. KeepCapture '重新截图，进行判断

82. Loop While 判断延时消失(战斗界面,5) '5秒内判断不到战斗界面，离开支线循环

83. End Sub

84. /////////////////////////////////////////////////////////////////////////////

85. '功能模块

86. Sub 自动技能()

87. If 判断(已自动战斗)=True Then

88. If 判断点击(未自动战斗)=True Then

89. Else '新副本，没自动战斗，转入触屏点击来释放技能

90. Call 点击技能释放() '调用一个单独的功能模块，暂空。（作业：要求判断当前几个英雄，正确的点击到对应的技能图标位置）

91. End If

92. End If

93. End Sub

94. /////////////////////////////////////////////////////////////////////////////


本期主题：实战源码讲解
脚本功能：顾名思义，循环冒险。（无限循环刷副本，直到体力耗尽）
使用要求：请在“副本选择开始冒险界面” 或 “中途操作界面” 或 “战斗中” 启动脚本均可。
环境支持：分辨率：720*1280、1080*1920、540*690、靠谱专版：800*600。点击：终结分辨率噩梦！按键精灵（安卓版）全面支持靠谱助手
脚本思路：颜色判断确认当前画面内容，执行对应的触屏操作，组合实现所谓的循环冒险功能。（语文不是体育老师教的同学请自行查看主线循环）

腾讯新闻咨询：快游全民打怪兽助手 自动刷副本教程

进入正题：以下我主要介绍下写一个脚本简单需要有哪些要点必学。

一、脚本思路。
首先写一个脚本，我们得先知道写个脚本来做什么，如果我们自己都不清楚脚本是做什么，谈何写脚本。
那么这里我来进行步骤解析：
问：什么是循环冒险。
答：循环，循环做某事，有头有尾，有始有终，称为循环。
答：冒险，进入游戏副本，攻略怪物，推到BOSS，打开宝箱，获取奖励，完成冒险。

二、逻辑构建。
根据以上分析，我们已经明确了什么是循环冒险，那么接下来需要规划逻辑框架，让脚本有一定逻辑判断能力，对当前情况的信息获取，信息判断，执行对应的操作。
这里主要分两点：
1、分析脚本需要哪些环节。
2、论证每个环节的可行性。

2014-5-28 15:18 上传

下载附件 (115.26 KB)

判断：在冒险开始画面
点击：开始冒险按钮。（这里提示，取点判断时取按钮边框区域的点，因为部分关卡按钮是“开始大战”）

2014-5-28 15:18 上传

下载附件 (98.6 KB)

判断：选择好友，进入按钮画面
点击：进入按钮。（进入副本对战，好友默认第一个）

2014-5-28 15:18 上传

下载附件 (126.56 KB)

2014-5-28 15:18 上传

下载附件 (123.53 KB)

判断：是否已开启自动战斗图标
点击：未开启则点击开启，已开启则点击右边技能图标。

2014-5-28 15:18 上传

下载附件 (98.44 KB)

判断：宝箱图标
点击：奖励宝箱。（打开宝箱）

2014-5-28 15:18 上传

下载附件 (99.66 KB)

判断：确认按钮。
点击：确认按钮。（领取奖励）

2014-5-28 15:18 上传

下载附件 (98.43 KB)

判断：再玩一次按钮
点击：再玩一次按钮。（返回开始冒险界面，循环继续）

三、知识要点。
脚本最重要的逻辑思路已经描述完毕，相信就是“小明同学”也懂了。
脚本逻辑思路构建完毕，剩余的不过是代码填空。

代码逻辑框架：从零学起之基础核心《麻雀虽小五脏俱全》
核心：脚本是代替人工操作，那么该有的都不能少，这里我们拿一个团队做比喻。
1、一个主团长（主线循环），负责管理指挥团队。
2、若干副团长（支线循环），负责协助团长管理。
3、若干团小组（功能模块），各个团员集合小组。
4、若干团成员（代码命令），负责执行做事单位。
5、若干团精英（固定模块），专精处理固定事件。

以下分类名称只是我个人命名的称呼，大家看内容理解即可，如有不懂可以跟帖，或按键群里联系。
主线循环：完整脚本主线循环，全部功能都由主线中展开执行。
支线循环：结构其实与主线循环一样，只是挂钩在主线之下的一个循环事件，当主线中某个环节，需要单独循环做某事时，则可展开另一个“支线循环”，挂钩主线循环下，当该循环事件完成，必须返回一个结果给主线，成功或失败或别的什么信息，主线根据返回的信息，判断做下一步操作。
功能模块：则是一些具体执行功能代码封装，如Sub或Function，Sub不支持返回值，许多功能执行需要一个返回结果，来判断下一步操作，请使用Function。
代码命令：顾名思义，一个个功能命令即是。
固定模块：则是一些常用的函数模块，比如找图、找色、多点找色，等等这类重复用到的功能，他们的结构一样，只是部分参数不一样，为了避免每次调用都要写一大堆重复性代码，把相关命令进行封装调用，这些固定模块基本是不需要修改，不同与功能模块，功能模块是针对每个脚本而进行编写封装，而固定模块则每一个脚本都需要用到的固定函数。

重点总结：
首先本文中主要用到单点找色与多点找色的原理来识别屏幕画面，无找图。（不仅仅是找图略慢，作图麻烦，不支持同等比例缩放图像的判断等）
此外为了多分辨率兼容修改的便捷，我把全部的多点点阵特征信息与全部坐标参数写在开头，一律用数组形式赋值，传入脚本调用，这样脚本框架无需改动情况下，我只需修改前面配置信息，即可兼容其他比例的分辨率。
也许我的代码结构对于新手来说可能不太理解，对于老手来讲不太习惯，甚至不理解为什么我这么写结构，但是我可以告诉你们，本人09年接触按键从小白自学起家到后来经师傅大人指导，代码的结构也是不停的优化，才形成目前的格局。存在即是合理，我这么写自然有我的用意，希望你们的悟性点没加错，引用我格式的同学我希望你能理解为什么这么写而非照本宣科，不用我格式的同学希望你也有自己的领悟，心里清楚明白你理解了，但某些方面觉得有更好的方式所以不用，如果有认真读到这里的同学，随时欢迎加Q留言，我有好的分享会随时发布。
或许我的代码结构不是最适合你们，但在你们还未有属于自己风格特性的编写格式习惯前，希望对你们有所启发，不墨迹了。

常用功能函数：本文中需要用到的相关知识点教程。
1、想学的同学希望认证阅读理解。
2、只想下载个应用的同学也可以点下载、
3、想复制源码的同学也可以回个帖支持下，领走！
另外大家可以在手机按键群里联系到我，谢谢大家。
从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
从零学起之安卓篇《按键精灵安卓版UI界面控件应用介绍》
从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》
从零学起之安卓篇《独立APK小精灵制作流程介绍》
APK下载： 全民打怪兽循环冒险V5.apk (2.86 MB, 下载次数: 4524)

2014-5-27 20:42 上传

点击文件名下载附件

UI界面预览

2014-5-28 15:18 上传

下载附件 (16.24 KB)

UI代码展示

界面1:

{

多选框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"技能",

提示内容:"是否使用第三个技能",

选中:false,

文字大小:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"来自",

显示内容:"来自：按键精灵安卓版（http://m.anjian.com/）",

文字大小:0,

高度:0,

宽度:0

},

}

复制代码

脚本UI设置参数获取代码

/////////////////////////////////////////////////////////////////////////////

'获取UI界面设置参数

Dim val_jn

val_jn=ReadUIConfig("技能",false)

If val_jn=True Then

ShowMessage "技能3已开启！"

Else

ShowMessage "技能3未开启！"

End If

Delay 1000

/////////////////////////////////////////////////////////////////////////////

复制代码

完整脚本源码展示：回复可见，记得给花！

/////////////////////////////////////////////////////////////////////////////

'定义一些常用变量：IntX IntY 找色模块返回值用，win_x win_y 屏幕分辨率用，win_w win_h 分辨率比例用

Dim IntX,IntY

Dim win_x,win_y,win_w,win_h

win_x = GetScreenX()

win_y = GetScreenY()

TracePrint "当前分辨率：" & win_x & "*" & win_y

'定义一些常用变量，加刮号是为了定义变量类型为数组类型

Dim 开始按钮(),进入按钮(),奖励宝箱(),确认按钮(),再玩一次(),已自动战斗(),未自动战斗(),超越好友()

Dim 战斗技能壹(),战斗技能貳(),战斗技能叁()

/////////////////////////////////////////////////////////////////////////////

'比例计算

win_w=win_x/720

win_h=win_y/1280

TracePrint "屏幕比例：" & win_w & ":" & win_h

'只支持同等比例720*1280、1080*1920、540*960，非同比例则不支持，有心学习的同学请自行理解完整实例后更新吧，去吧少年少女们！

If win_w = win_h Then

开始按钮=Array(98,894,"080808","-8|26|BDAE8C,-5|12|EEDAC5,56|4|FFFFFF")

进入按钮=Array(80,820,"4A9ACE","3|15|002452,16|64|082452,6|74|082452,12|100|082452,-15|100|52AAD6")

奖励宝箱=Array(230,640,"00243A","-55|-90|00AEF7,120|-90|00FFFF,120|90|00D2F7,-50|85|08B2FF")

确认按钮=Array(62,588,"002452","-2|22|4A9ECE,-12|92|4AA6CE,18|112|4A9ACE")

再玩一次=Array(74,237,"08285A","14|48|5AB6DE,-14|48|52B2DE,5|107|4A9ECE,11|133|4A9ECE")

已自动战斗=Array(102,51,"FFFFFF","0|23|F7FFF7,-24|31|003519,-44|53|FFFFFF,6|52|FFFFFF,18|29|29AA94")

战斗技能壹=Array(85,1050)

战斗技能貳=Array(85,1190)

战斗技能叁=Array(85,910)

未自动战斗=Array(73,53,"FFFFFF","-15|51|FFFFFF,35|50|FFFFFF,2|-18|081829,-8|-18|081821,2|72|081829")

超越好友=Array(630,975,"4A9ECE","-1|20|08245A,-2|40|4A9ECE,-20|19|52BADE,14|20|4A9ECE")

End If

/////////////////////////////////////////////////////////////////////////////

'比例不相等则再次进行判断

If win_w <> win_h Then

'比例计算（该比例是针对靠谱模拟器分辨率制作，如需要增加别的分辨率比例，请学习后，对照范例更新特征）

win_w=win_x/800

win_h=win_y/600

TracePrint win_w

TracePrint win_h

If win_w = win_h Then

开始按钮=Array(569,475,"040415","18|-24|FFFFFF,-1|-36|FFFFFF,20|0|BAB291")

进入按钮=Array(528,483,"052657","-11|0|4A9DCE,59|-4|082557,59|12|4FAAD3,73|-6|4A9DCE")

奖励宝箱=Array(400,410,"05263E","-84|-33|02C7FE,83|-38|00ABF5,72|-100|02E0FF,-72|41|06B8FC")

确认按钮=Array(357,547,"052657","18|5|4C9ED0,77|-11|082557,86|-15|4A9DCE,2|-16|4A9DCE")

再玩一次=Array(73,527,"082557","45|10|4A9DCE,62|-1|4A9DCE,86|22|4FB2DB,100|7|4A9DCE")

已自动战斗=Array(86,509,"FFFFFF","-30|-14|37BBA3,-18|-14|37BBA3,-10|-14|3FC4B4,-1|-12|41B299")

战斗技能壹=Array(730,525)

战斗技能貳=Array(610,525)

战斗技能叁=Array(490,525)

未自动战斗=Array(86,509,"FFFFFF","1|42|FFFFFF,-20|-29|5DB2D4,-19|74|1F74A7,15|20|0D1D2E")

超越好友=Array(943,1432,"082852","2|-32|4A9ECE,24|0|4A9ECE,0|29|4A9ECE")

End If

End If

/////////////////////////////////////////////////////////////////////////////

'最后比例还是不相等则

If win_w <> win_h Then

ShowMessage "分辨率比例不同，暂不支持！请联系作者更新！"

Delay 1000

EndScript

End If

/////////////////////////////////////////////////////////////////////////////

'获取UI界面设置参数

Dim val_jn

val_jn=ReadUIConfig("技能",false)

If val_jn=True Then

ShowMessage "技能3已开启！"

Else

ShowMessage "技能3未开启！"

End If

Delay 1000

/////////////////////////////////////////////////////////////////////////////

'调试区

//KeepCapture

//TracePrint 判断(开始按钮)

//TracePrint 判断(进入按钮)

//TracePrint 判断(奖励宝箱)

//TracePrint 判断(确认按钮)

//TracePrint 判断(再玩一次)

//TracePrint 判断(已自动战斗)

//TracePrint 判断(未自动战斗)

//TracePrint 判断(超越好友)

//ReleaseCapture

//EndScript

/////////////////////////////////////////////////////////////////////////////

'主线循环

Do

KeepCapture

If 判断(开始按钮)=True Then '判断开始冒险

Call 点击(开始按钮)

ElseIf 判断(进入按钮)=True Then

Call 点击(进入按钮)

ElseIf 判断(奖励宝箱)=True Then '奖励判断

Call 点击(奖励宝箱)

ElseIf 判断(确认按钮)=True Then

Call 点击(确认按钮)

ElseIf 判断(再玩一次)=True Then

Call 点击(再玩一次)

ElseIf 判断(已自动战斗)=True Then '战斗判断

Call 点击战斗技能()

ElseIf 判断(未自动战斗)=True Then

Call 点击(未自动战斗)

ElseIf 判断(超越好友)=True Then

Call 点击(超越好友)

Else

TracePrint "未知画面"

End If

ReleaseCapture

Delay 1000 '循环中适当的延时给予CPU响应时间，使脚本更为流畅

Loop

/////////////////////////////////////////////////////////////////////////////

'功能模块

Function 点击战斗技能()

Call 点击(战斗技能壹)

Call 点击(战斗技能貳)

If val_jn=True Then

Call 点击(战斗技能叁)

End If

End Function

/////////////////////////////////////////////////////////////////////////////

'固定模块

Function 判断(数组特征)

Dim arr()

arr=数组特征

判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),0.9)

End Function

Sub 点击(数组坐标)

Dim arr()

arr=数组坐标

Tap arr(0) * win_w, arr(1) * win_h

End Sub

/////////////////////////////////////////////////////////////////////////////

'本脚本相关教程资料（都是重点，想学就把我的教程看完，如不懂可以各大按键群（官方群）里联系我）

'从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》

'http://bbs.anjian.com/thread-523396-1-1.html

'从零学起之基础核心《麻雀虽小五脏俱全》

'http://bbs.anjian.com/thread-509172-1-1.html

/////////////////////////////////////////////////////////////////////////////

'判断两个16进制值相似度是否到达对应百分比

Function IsCol(col1,col2,n)

IsCol=False

Dim r1,g1,b1

Dim r2,g2,b2

ColorToRGB col1,r1,g1,b1

ColorToRGB col2,r2,g2,b2

If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True

End Function

'固定坐标单点模糊找色

Function CmpCol(x,y,col,n)

CmpCol=False

'比例换算

x=x*win_w

y=y*win_h

Dim temp_col

temp_col=GetPixelColor(x,y)

If temp_col=col Then

CmpCol=True

Else

CmpCol=IsCol(col,temp_col,n)

End If

End Function

'固定坐标多点模糊找色

Function CmpMultiCol(x,y,col,str,n)

CmpMultiCol=False

If CmpCol(x,y,col,n)=True Then

CmpMultiCol=MultiColor(x,y,str,n)

Else

CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+3,col,str,n)

End If

End Function

'区域范围多点模糊找色

Function FindMultiCol(x1,y1,x2,y2,col,str,n)

FindMultiCol=False

'比例换算

x1=x1*win_w

y1=y1*win_h

x2=x2*win_w

y2=y2*win_h

Dim x,y

Do

FindColor x1,y1,x2,y2,col,0,n,intX, intY

If intX >= 0 Then

If MultiColor(intX,intY,str,n)=True Then

FindMultiCol=True

Exit Do

Else

x=IntX

y=IntY

Do Until x > x2

FindColor x,y,x2,y,col,0,n,intX,intY

If intX >= 0 Then

If MultiColor(intX,intY,str,n)=True Then

FindMultiCol=True

Exit Function

Else

x=IntX+1

End If

Else

Exit Do

End If

Loop

y1=y+1

End If

Else

Exit Do

End If

Loop Until y1 > y2

End Function

'多点偏移点阵匹配

Function MultiColor(x,y,str,n)

MultiColor=False

Dim arr1,i,arr2()

arr1=Split(str,",")

For Each i In arr1

arr2=Split(i,"|")

If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False Then

'FindColor x+Int(arr2(0))-3, y+Int(arr2(1))-3, x+Int(arr2(0))+3, y+Int(arr2(1))+3, arr2(2), 0, n, intX, intY

'If IntX=-1 Then

Exit Function

End If

Next

MultiColor=True

End Function

//////////////////////////////////////////////////////////////////////////////////////////

'自定义固定模块组合应用，以下部分大家请理解函数模块功能作用后自行组合使用。（请理解后调用，以免出错都不懂原因）

Function Cm(x,y,col,str)

Cm=CmEx(x,y,col,str,0.9)

End Function

Function CmEx(x,y,col,str,n)

KeepCapture

CmEx=CmpMultiCol(x,y,col,str,n)

ReleaseCapture

End Function

Function Fm(x1,y1,x2,y2,col,str)

Fm=FmEx(x1,y1,x2,y2,col,str,0.9)

End Function

Function FmEx(x1,y1,x2,y2,col,str,n)

KeepCapture

FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)

ReleaseCapture

End Function

复制代码

优化升级版本：看完的同学请试着把最后作业完成，理解一半以上的同学可以联系我专门指导。

UI界面预览

2014-6-18 19:08 上传

下载附件 (139.01 KB)

UI代码展示

界面1:

{

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"省电模式：设置分钟数，挂机完可自动关闭游戏",

文字大小:0,

高度:0,

宽度:0

},

水平布局:

{

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"设置自动关闭游戏",

文字大小:0,

高度:0,

宽度:0

},

输入框:

{

注释:"文字大小、最大输入长度、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"结束",

提示内容:"输入数字",

仅输入数字:true,

文字大小:0,

最大输入长度:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"分钟",

文字大小:0,

高度:0,

宽度:0

},

},

多选框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"技能",

提示内容:"是否购买[自动施放]道具",

选中:false,

文字大小:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"（否则由脚本负责点击释放技能）",

文字大小:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"钥匙用尽则返回手机主页，停止脚本。",

文字大小:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"战斗技能已改为自动点击无需额外设置开启，目前支持四个技能释放，如有新增请联系作者更新。",

文字大小:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"文字框1",

显示内容:"",

文字大小:0,

高度:0,

宽度:0

},

文字框:

{

注释:"文字大小、高度、宽度是可选属性，如需使用默认值，可保持值为0或直接删除此属性",

名称:"来自",

显示内容:"来自：按键精灵安卓版（http://m.anjian.com/）",

文字大小:0,

高度:0,

宽度:0

},

}

复制代码

完整源码脚本源码展示，回复可见。

/////////////////////////////////////////////////////////////////////////////

'定义一些常用变量：IntX IntY 找色模块返回值用，win_x win_y 屏幕分辨率用，win_w win_h 分辨率比例用

Dim IntX,IntY

Dim win_x,win_y,win_w,win_h

win_x = GetScreenX()

win_y = GetScreenY()

TracePrint "当前分辨率：" & win_x & "*" & win_y

'比例计算

win_w=win_x/720

win_h=win_y/1280

TracePrint "屏幕比例：" & win_w & ":" & win_h

/////////////////////////////////////////////////////////////////////////////

'定义一些常用变量，加刮号是为了定义变量类型为数组类型

Dim 开始按钮(),进入按钮(),奖励宝箱(),确认按钮(),确认按钮2(),再玩一次(),已自动战斗(),战斗技能(),未自动战斗(),超越好友(),自动施放(),施放战斗(),确认钥匙()

'只支持同等比例720*1280、1080*1920、540*960，非同比例则不支持，有心学习的同学请自行理解完整实例后更新吧，去吧少年少女们！

'比例换算：把全部特征中的坐标参数进行比例换算，同比例缩放后带入以下脚本运行

If Abs(win_w-win_h) < 0.01 Then

开始按钮=比例换算(Array(98,894,"080808","-8|26|BDAE8C,-5|12|EEDAC5,56|4|FFFFFF"))

进入按钮=比例换算(Array(80,820,"4A9ACE","3|15|002452,16|64|082452,6|74|082452,12|100|082452,-15|100|52AAD6"))

奖励宝箱=比例换算(Array(230,640,"00243A","-55|-90|00AEF7,120|-90|00FFFF,120|90|00D2F7,-50|85|08B2FF"))

确认按钮=比例换算(Array(62,588,"002452","-2|22|4A9ECE,-12|92|4AA6CE,18|112|4A9ACE"))

确认按钮2=比例换算(Array(120,585,"002452","-2|22|4A9ECE,-12|92|4AA6CE,18|112|4A9ACE"))

再玩一次=比例换算(Array(74,237,"08285A","14|48|5AB6DE,-14|48|52B2DE,5|107|4A9ECE,11|133|4A9ECE"))

已自动战斗=比例换算(Array(102,51,"FFFFFF","0|23|F7FFF7,-24|31|003519,-44|53|FFFFFF,6|52|FFFFFF,18|29|29AA94"))

战斗技能=比例换算(Array(85,1190,0,140))

未自动战斗=比例换算(Array(73,53,"FFFFFF","-15|51|FFFFFF,35|50|FFFFFF,2|-18|081829,-8|-18|081821,2|72|081829"))

超越好友=比例换算(Array(630,975,"4A9ECE","-1|20|08245A,-2|40|4A9ECE,-20|19|52BADE,14|20|4A9ECE"))

自动施放=比例换算(Array(530,1175,540,1185,"08AAFF"))

施放战斗=比例换算(Array(64,53,"FFFFFF","-5|51|FFFFFF,44|50|FFFFFF,56|22|A455BD,16|72|310C29,11|-18|290421"))

确认钥匙=比例换算(Array(195,749,"00245A","6|-52|4A9ECE,-4|23|4AA6CE,19|99|4A9ACE,5|149|4A9ACE"))

End If

/////////////////////////////////////////////////////////////////////////////'比例不相等则再次进行判断

If Abs(win_w-win_h) >= 0.01 Then

'比例计算

win_w=win_x/1080

win_h=win_y/1800

TracePrint win_w

TracePrint win_h

'If win_w = win_h Then

'TracePrint win_w & "-" & win_h & "=" & Abs(win_w-win_h)

If Abs(win_w-win_h) < 0.1 Then

开始按钮=比例换算(Array(146,1280,"000008","81|2|FFFFFF,57|45|FFFFFF,-6|40|BDAE8C"))

进入按钮=比例换算(Array(125,1190,"082852","0|40|4A9ECE,20|76|082852,20|91|08245A,11|131|082452,-13|130|4A9ECE"))

奖励宝箱=比例换算(Array(342,898,"082442","-82|-128|00AEF7,188|-133|08FFFF,188|137|00D3F7,-82|132|00AEF7"))

确认按钮=比例换算(Array(92,823,"082852","0|37|4A9ECE,19|138|08245A,-12|137|4A9ED6,28|151|4A9ACE"))

确认按钮2=比例换算(Array(178,823,"082852","0|37|4A9ECE,19|138|08245A,-12|137|4A9ED6,28|151|4A9ACE"))

再玩一次=比例换算(Array(111,296,"082852","20|75|52A6D6,-1|104|4A9ECE,24|129|4A9ECE,7|170|08245A"))

已自动战斗=比例换算(Array(95,80,"FFFFFF","-7|76|FFFFFF,67|75|FFFFFF,24|10|104529,21|45|083821,21|86|084129"))

战斗技能=比例换算(Array(130,1670,0,215))

未自动战斗=比例换算(Array(95,80,"FFFFFF","-7|76|FFFFFF,68|74|FFFFFF,0|-30|081821,13|98|001429,-65|35|216D9C"))

超越好友=比例换算(Array(943,1432,"082852","2|-32|4A9ECE,24|0|4A9ECE,0|29|4A9ECE"))

自动施放=比例换算(Array(797,1707,807,1717,"00AAFF"))

施放战斗=比例换算(Array(64,53,"FFFFFF","-5|51|FFFFFF,44|50|FFFFFF,56|22|A455BD,16|72|310C29,11|-18|290421"))

确认钥匙=比例换算(Array(290,1065,"00245A","10|-80|4A9ECE,0|35|4A9ECE,25|145|4A9ACE,10|225|4A9ECE"))

End If

End If

/////////////////////////////////////////////////////////////////////////////

If win_x=800 and win_y=600 Then

ShowMessage "当前版本不支持800*600模拟器使用！"

Delay 2000

EndScript

End If

/////////////////////////////////////////////////////////////////////////////

'最后比例还是不相等则

If IsNumeric(开始按钮(0))=False Then

ShowMessage "分辨率比例不同，暂不支持！请联系作者更新！"

Delay 1000

EndScript

End If

/////////////////////////////////////////////////////////////////////////////

'获取UI界面设置参数

Dim ui_str,val_jn,val_key,txt_js

ui_str="V9:"

val_jn=ReadUIConfig("技能",false)

If val_jn=True Then

ui_str=ui_str & "已开启购买自动施放服务"

Else

ui_str=ui_str & "未开启购买自动施放服务"

End If

txt_js=ReadUIConfig("结束",0)

If txt_js<>0 Then

ui_str=ui_str & "，定时" & txt_js & "分钟"

'分钟转换秒钟

txt_js=txt_js*60

Dim txt_time

txt_time=Time()

End If

ShowMessage ui_str

Delay 3000

/////////////////////////////////////////////////////////////////////////////

'调试区

//KeepCapture

//TracePrint 判断(开始按钮)

//TracePrint 判断(进入按钮)

//TracePrint 判断(奖励宝箱)

//TracePrint 判断(确认按钮2)

//TracePrint 判断(再玩一次)

//TracePrint 判断(已自动战斗)

//TracePrint 判断(未自动战斗)

//TracePrint 判断(超越好友)

//TracePrint 判断(自动施放)

//TracePrint 判断(确认钥匙)

//TracePrint IntX&"|"&IntY

//ReleaseCapture

//EndScript

/////////////////////////////////////////////////////////////////////////////

'主线循环

Do

KeepCapture

If 判断(开始按钮)=True Then '判断开始冒险

If 判断结束(txt_js,txt_time)=True Then Call 返回手机主页()

Call 点击自动施放()

Call 点击(开始按钮)

ElseIf 判断(确认钥匙)=True Then

Call 返回手机主页()

ElseIf 判断点击(进入按钮)=True Then

ElseIf 判断点击(奖励宝箱)=True Then '奖励判断

ElseIf 判断点击(确认按钮)=True Then

ElseIf 判断点击(确认按钮2)=True Then

ElseIf 判断点击(再玩一次)=True Then

ElseIf 判断(已自动战斗)=True Then '战斗判断

Call 点击战斗技能()

ElseIf 判断(施放战斗)=True Then

ElseIf 判断点击(未自动战斗)=True Then

ElseIf 判断点击(超越好友)=True Then

Else

TracePrint "未知画面"

End If

Delay 1000 '循环中适当的延时给予CPU响应时间，使脚本更为流畅

Loop

Sub 点击自动施放()

Dim ret

Do

ret=判断(自动施放)

If val_jn=True and ret=False or val_jn=False and ret=True Then

Call 点击(自动施放)

Delay 500

Else

Exit Do

End If

KeepCapture

Loop

End Sub

Sub 返回手机主页()

Do

ShowMessage "挂机时间到！停止脚本！"

KeyPress "Home"

Delay 1000

KeepCapture

Loop While 判断(开始按钮)=True

EndScript

End Sub

Function 判断结束(s,t)

判断结束=False

If s=0 Then Exit Function

If Time()-s > t Then 判断结束=True

End Function

/////////////////////////////////////////////////////////////////////////////

'功能模块

Function 点击战斗技能()

Dim i

For i=0 To 3'四个技能坐标偏移

Tap 战斗技能(0)-i*战斗技能(2),战斗技能(1)-i*战斗技能(3)

Delay 200

Next

End Function

/////////////////////////////////////////////////////////////////////////////

'固定模块

Function 判断(数组特征)

判断=False

Dim arr()

arr=数组特征

If IsNumeric(arr(3))=True Then

If InStr(0,Join(arr,","),"|")>0 Then

判断=FindMultiCol(arr(0),arr(1),arr(2),arr(3),arr(4),arr(5),0.9)

Else

判断=Fc(arr(0),arr(1),arr(2),arr(3),arr(4))

End If

ElseIf IsNumeric(arr(1))=True Then

判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),0.9)

Else

TracePrint "数组特征异常：" & Join(arr,"|")

End If

End Function

Sub 点击(数组坐标)

Dim arr()

arr=数组坐标

Tap arr(0), arr(1)

End Sub

Function 判断点击(数组特征)

If 判断(数组特征)=True Then

Tap IntX,IntY

判断点击=True

End If

End Function

Function 比例换算(数组)

If win_w=1 or win_h=1 Then '原比例，无需计算

比例换算=数组

Exit Function

End If

Dim arr(),arr_bl(),i,n

arr=数组

arr_bl=Array(win_w,win_h)

i=0

Dim arr1(),str,arr2()

For Each n In arr

If IsNumeric(n)=True Then

arr(i)=n*arr_bl(i Mod 2)

ElseIf InStr(1,n,"|")>0 Then

arr1=Split(arr(i),",")

str=""

For Each n In arr1

arr2=Split(n,"|")

str=str & arr2(0)*win_w & "|" & arr2(1)*win_h & "|" & arr2(2) & ","

Next

arr(i)=Left(str,Len(str)-1)

Exit For

End If

i=i+1

Next

比例换算=arr

End Function

/////////////////////////////////////////////////////////////////////////////

'本脚本相关教程资料（都是重点，想学就把我的教程看完，如不懂可以各大按键群（官方群）里联系我）

'从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》

'http://bbs.anjian.com/thread-523396-1-1.html

'从零学起之基础核心《麻雀虽小五脏俱全》

'http://bbs.anjian.com/thread-509172-1-1.html

/////////////////////////////////////////////////////////////////////////////

'判断两个16进制值相似度是否到达对应百分比

Function IsCol(col1,col2,n)

IsCol=False

Dim r1,g1,b1

Dim r2,g2,b2

ColorToRGB col1,r1,g1,b1

ColorToRGB col2,r2,g2,b2

If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True

End Function

'固定坐标单点模糊找色

Function CmpCol(x,y,col,n)

CmpCol=False

If x < 0 or y < 0 Then Exit Function

Dim temp_col

temp_col=GetPixelColor(x,y)

If temp_col=col Then

CmpCol=True

Else

CmpCol=IsCol(col,temp_col,n)

End If

End Function

'固定坐标多点模糊找色

Function CmpMultiCol(x,y,col,str,n)

CmpMultiCol=False

IntX=x

IntY=y

If CmpCol(x,y,col,n)=True Then

CmpMultiCol=MultiColor(x,y,str,n)

Else

CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y-3,col,str,n)

End If

End Function

'区域范围多点模糊找色

Function FindMultiCol(x1,y1,x2,y2,col,str,n)

FindMultiCol=False

Dim x,y

Do

FindColor x1,y1,x2,y2,col,0,n,intX, intY

If intX >= 0 Then

If MultiColor(intX,intY,str,n)=True Then

FindMultiCol=True

Exit Do

Else

x=IntX

y=IntY

Do Until x > x2

FindColor x,y,x2,y,col,0,n,intX,intY

If intX >= 0 Then

If MultiColor(intX,intY,str,n)=True Then

FindMultiCol=True

Exit Function

Else

x=IntX+1

End If

Else

Exit Do

End If

Loop

y1=y+1

End If

Else

Exit Do

End If

Loop Until y1 > y2

End Function

'多点偏移点阵匹配

Function MultiColor(x,y,str,n)

MultiColor=False

Dim arr1,i,arr2()

arr1=Split(str,",")

For Each i In arr1

arr2=Split(i,"|")

If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False Then

'FindColor x+Int(arr2(0))-3, y+Int(arr2(1))-3, x+Int(arr2(0))+3, y+Int(arr2(1))+3, arr2(2), 0, n, intX, intY

'If IntX=-1 Then

Exit Function

End If

Next

MultiColor=True

End Function

//////////////////////////////////////////////////////////////////////////////////////////

'自定义固定模块组合应用，以下部分大家请理解函数模块功能作用后自行组合使用。（请理解后调用，以免出错都不懂原因）

Function Cm(x,y,col,str)

Cm=CmEx(x,y,col,str,0.9)

End Function

Function CmEx(x,y,col,str,n)

KeepCapture

CmEx=CmpMultiCol(x,y,col,str,n)

ReleaseCapture

End Function

Function Fm(x1,y1,x2,y2,col,str)

Fm=FmEx(x1,y1,x2,y2,col,str,0.9)

End Function

Function FmEx(x1,y1,x2,y2,col,str,n)

KeepCapture

FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)

ReleaseCapture

End Function

Function Fc(x1,y1,x2,y2,col)

Fc=FcEx(x1,y1,x2,y2,col,0.9)

End Function

Function FcEx(x1,y1,x2,y2,col,n)

FcEx=False

FindColor x1,y1,x2,y2,col,0,n,intX,intY

If intX >= 0 Then FcEx=True

End Function

//////////////////////////////////////////////////////////////////////////////////////////

//作业

//1、Dim 变量 与 Dim 变量()，写出作用与区别。

//2、Sub子程序与Function函数，写出作用与区别。

//3、If IsNumeric(开始按钮(0))=False Then，写出作用与原理。

//4、变量 = 变量 & 字符信息，写出 & 符号功能作用与正行代码的作用。

//5、写出以下Sub或Function的作用与原理，并说明存在的用意。

//Function 比例换算(数组)

//Function 判断(数组特征)

//Sub 点击(数组坐标)

//Function 判断点击(数组特征)

//晋级作业

//1、第二套颜色坐标信息开头，If Abs(win_w-win_h) < 0.1 Then，写出作用。

//2、完整描述以下Function的作用与原理，并说明存在的用意。

//IsCol、CmpCol、CmpMultiCol、FindMultiCol、MultiColor

//3、Cm\CmEx\Fm\FmEx\Fc\FcEx，写出这几个函数模块存在意义。

//4、KeepCapture与ReleaseCapture的作用。

//5、调用CmpMultiCol、FindMultiCol时，为什么开头必须加KeepCapture，不加会怎样。

//脚本作业

//1、脚本中用到几套颜色坐标信息，分别都支持多少种分辨率一一写出。

//2、完整描述出脚本主线循环的逻辑思路。

//3、Sub 点击自动施放()，写出作用与原理。

//4、Sub 返回手机主页()，写出作用与原理。

//5、Function 判断结束(s,t)，写出作用与原理。

//6、Function 点击战斗技能()，写出作用与原理，以及为什么加延时，不加会怎样。

//////////////////////////////////////////////////////////////////////////////////////////

复制代码


Ke

按键精灵（手机版）

命令大全

此帮助手册收录了按键精灵全部命令说明及使用范例，如发现有部分 内容与按键精灵最新版本不适用，可以查阅按键精灵手机版：MQ 语言

新版抓抓做字库入门教程


『按键精灵之小技巧总目录』

从零学起之安卓篇《心得笔记汇总——荆棘》

从零学起之安卓篇《按键宝典安卓版命令大全》

《按键精灵安卓版全能宝典》震撼发布！ By 紫猫

基础篇

脚本UI界面：UI控件编写，布局排版，相关参数设定与获取范例教程

从零学起之安卓篇《按键精灵安卓版UI界面控件应用介绍》

触摸命令：触屏操作相关教程

从零学起之安卓篇《多点触屏控制命令介绍：TouchDown\TouchMove\TouchUp》

从零学起之安卓篇《按键抓抓辅助工具》

核心篇（命令大全，图色识别，颜色祥解）
按键精灵安卓版：MQ 语言介绍 （命令大全）
从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
从零学起之科普篇《偏色与相似度汇总介绍》
拓展篇

LUA应用相关教程

按键精灵安卓版之LUA篇《关于调用LUA命令进行文件操作》

LUA 数组相关操作插件

lua插件字符处理篇

adb插件模拟 各种重启关机命令 分享给大家

从零学起之安卓篇《版本1.3.1命令更新介绍，GetPixelColor\WriteConfig\ReadConfig》
从零学起之安卓篇《版本1.5.1命令更新介绍》
从零学起之安卓篇《如何在安卓模拟器中进行多分辨率开发调试》
分享一个日期格式化函数，日期、时间格式不再别扭
从零学起之安卓篇《PutAttachment释放命令，细节注意》
【技巧】安卓版按键精灵手机抓抓 取色取坐标 获取屏幕触点坐标（4月12日17：00更新）

实战篇
从零学起之安卓实战篇《全民打怪兽循环冒险》
从零学起之安卓实战篇《关于刀塔传奇开局与日常思路》
从零学起之安卓实战篇《天天酷跑好友送心》

常见问题
Root推荐工具及详细的一键root图文教程
Root推荐工具
从零学起之编外篇《关于靠谱安卓模拟器Root权限需知》
从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》
从零学起之安卓篇《独立APK小精灵制作流程介绍》
从零学起之安卓篇《豆比小闹钟Niko》
终结分辨率噩梦！按键精灵（安卓版）全面支持靠谱助手


KeyPress 函数

2.函数问题

1、我对按键精灵不了解，基本功能该怎么写？（找图、找色等）
答：可以查看论坛置顶区的MQ语法函数帖子，其中标红色的部分是和PC按键精灵有些区别或是移动版按键精灵新增的函数。http://bbs.anjian.com/thread-513218-1-1.html
2、找图、找色函数效率很低吗？怎么感觉查找很慢呢？
答：请查看高速找图教程帖：http://bbs.anjian.com/forum.php?mod=viewthread&tid=519955
3、如何写才能让脚本支持全部分辨率的手机呢？
答：善于利用SetScreenScale函数可以让脚本支持多种分辨率，具体请查看教程帖：http://bbs.anjian.com/thread-527044-1-1.html
4、按键精灵移动版支持找字功能吗？
答：找字的本质其实是逐一识别组成这个字的点阵是否匹配，需要事先准备好包含每个字点阵信息的字库文件，脚本根据字库中匹配的点阵来识别当前文字。安卓手机中不同程序的字体、大小点阵都不同，无法像电脑程序一样统一生成字库后可识别游戏内所有文字，一定要文字识别的话可以先对要识别的文字提取多个特征点颜色，用FindMultiColor多点找色函数进行查找识别，函数介绍可查看：http://bbs.anjian.com/thread-526861-1-1.html
5、为何在某些程序中运行脚本，点击（tap）和滑动（Swipe）操作有时会失效/不灵敏？
答：点击（tap）操作的本质其实是按下（TouchDown）+等待（Delay）+弹起（TouchUp），滑动（Swipe）操作的本质其实是按下（TouchDown）+等待（Delay）+移动（TouchMove）+等待（Delay）+弹起（TouchUp），为了方便使用，按键精灵把它们直接封装为点击（tap）、滑动（Swipe）两个函数，其中延时（Delay）为写死的短暂固定延时。但个别游戏为了防止玩家误操作，规定了按下后的等待时间要大于XX毫秒才算玩家点击了，否则可能是误操作，游戏就忽略不计，如果按键精灵的点击（tap）函数中延时时间比游戏规定的误操作时间更短，就可能导致点击偶尔没反映的情况，同理，个别游戏对滑动操作也有规定，滑动速度如果过快，则当做是玩家误操作，或者滑动后有惯性继续移动，导致滑动（Swipe）函数不好用。遇到这些特殊程序时，大家需要自行用按下（TouchDown）、等待（Delay）、弹起（TouchUp）写一个该程序可以100%识别的点击、滑动函数，代码中调用自己写的这个函数，不用按键自带的点击（tap）和滑动（Swipe）
6、为何找色、找图经常找不到，或者换了一台手机脚本就没法运行了？
答：在安卓设备中即使是同一个游戏画面，在不同设备上的颜色也是有细小差别的，建议找图找色的相似度设置0.8-0.9，少数情况也可能需要设置0.7几相似度，几乎不可能用到低于0.7的情况，否则会误找到其他地方了
7、找图函数支持透明图吗？支持BMP格式吗？
答：支持查找透明图，只要图片四角颜色一致则认为该颜色为透明，大家可以利用其他图片处理工具自行制作透明图，后期官方也会优化相关工具。支持查找BMP格式图。
8、颜色对比要怎么写？
答：可查看CmpColor函数教程帖子：http://bbs.anjian.com/thread-526577-1-1.html
9、按键精灵安卓版可以调用插件吗？如何操作？
答：支持调用lua插件，使用方法可查看http://bbs.anjian.com/forum.php?mod=viewthread&tid=528389


UBound 数组长度

命令名称： UBound 数组长度
命令功能： 获取数组的长度
语法格式： UBound(arr)
参数说明：
arr:数组变量
返回值： 用于确定数组的大小，返回指定数组的最大下标（仅限一维数组）
脚本例子：

Dim a=array("一","二","三","四","五")
Function UBound(arr)
    Dim a,i:i=0
    For Each a In arr
        i=i+1
    Next
    UBound=i-1
End Function
TracePrint UBound(a) //返回4
备注：
无