按键精灵手机助手的基本命令——控制命令

Posted in 按键精灵
命令名称: 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 变量
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 循环
命令功能: 条件循环语句。可以是无限循环,也可以是有限循环
语法格式:
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 循环一定次数
命令功能: 循环语句。可以循环一定次数,也可以按照变量的起始数值到终止数值循环(如果不指定步长数值,默认步长为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 数组
执行语句
Next
参数说明:
参数1 变量名,临时数组元素
参数2 数组,待遍历数组
返回值:
脚本例子:

Dim Arr
Arr=Array("我","爱","按","键","精","灵","!")
For Each a In Arr
TracePrint a //输出数组的所有元素
Next
备注:
变量名存放的是临时数组元素,可不定义
命令名称: 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 函数名([自定义参数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 子程序名([自定义参数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 identifier
参数说明:
identifier 字符串型,过程名,任意有效标识符
返回值:
脚本例子:

//不支持数字开头的和符号作为标记名
Rem 脚本开始
备注:
Rem既可以作为标记,配合 Goto 跳转 使用,也可以作为注释
命令名称: Goto 跳转到标记
命令功能: 跳转到Rem标记处
语法格式:
Goto sign
参数说明:
sign: 字符串型,标记,由Rem定义的任意有效标识符
返回值:
脚本例子:

Goto 标记
Delay 100
Rem 标记
TracePrint "你直接跳到这里了!!,上面的延迟没有被执行!!"
//跳转语句,可以跳转到rem标记过的标记处继续执行
备注:
可以适当使用Goto,但是不能过度滥用Goto
命令名称: Call 调用过程
命令功能: 调用函数或者子程序
语法格式:
Call 过程名([自定义参数1, 自定义参数2, ...])
参数说明:
参数1:字符串型,过程名
参数2:自定义参数:可选参数,允许多个,根据调用的过程确定参数的数量。
返回值:
脚本例子:

例子1
Call 子程序("我是子程序,被你调用了")
EndScript
//支持中文名变量
Sub 子程序(参数)
TracePrint 参数
End Sub
//定义一个过程,可以在脚本中调用这个过程

例子2
Call 函数()
TracePrint "调用函数结束了"
Function 函数()
TracePrint "我是被你调用的函数"
End Function

备注:
若调用子程序时,省略调用关键字Call与参数的括号,则子程序与自定义参数之间必须用空格隔开
子程序使用Call调用时,无法保存返回值到变量中
命令名称: EndScript 脚本停止运行
命令功能: 强制结束脚本的执行
语法格式:
EndScript
参数说明:
返回值:
脚本例子:

TracePrint "脚本开始执行"
EndScript
TracePrint "上面强制停止了,这里不会输出"
备注:
无条件强制结束一个脚本的执行,包括多线程也会停止

按键精灵手机助手的基本命令——触摸命令

Posted in 按键精灵
命令名称: 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 virtual_key
参数说明:
virtual_key:可以是字符串类型,表示某个键的名字;也可以是数值类型,
表示某个键的编码
注意:KeyDown命令与KeyUp命令需配套使用
返回值:
脚本例子:

//下面是模拟手动关机的例子
KeyDown "Power" //模拟按住电源键不放
Delay 3000 //延时3秒
KeyUp "Power" //松开电源键
备注:
我们在使用键盘的时候有两种操作,一种是“按下”键,一种是“弹起”键
将这两个动作连续进行,就是一个完整的“按键”动作
切记,有“按下”就必须要有“弹起”,千万不要只“按下”,不“弹起”
命令名称: KeyUp 弹起
命令功能: 弹起指定键
语法格式: KeyUp virtual_key
参数说明:
virtual_key:可以是字符串类型,表示某个键的名字;也可以是数值类型,
表示某个键的编码
返回值:
脚本例子:

//下面是模拟手动关机的例子
KeyDown "Power" //模拟按住电源键不放
Delay 3000 //延时3秒
KeyUp "Power" //松开电源键
备注:
我们在使用键盘的时候有两种操作,一种是“按下”键,一种是“弹起”键,
将这两个动作连续进行,就是一个完整的“按键”动作。
切记,有“按下”就必须要有“弹起”,千万不要只“按下”,不“弹起”。
命令名称: 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 x1,y1
参数说明:
x1:整数型,横坐标
y1:整数型,纵坐标
返回值:
脚本例子:

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

//点击屏幕坐标(100,100)的点,并持续按住100毫秒(0.1秒)
Touch 100,100,100
备注:
坐标是通过抓抓来获取的,不管你的设备画面是横屏还是竖屏,所有坐标一律都是以抓抓显示为准。
注意持续时间的单位是毫秒,1秒 = 1000毫秒。
命令名称: 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 x1,y1[,id,time]
参数说明:
x:整数型,要移动到的目标横坐标
y:整数型,要移动到的目标纵坐标
id:整数型,可选参数,这个触点的自定义ID,建议取值范围为[-9999,9999]
time:滑动到目标点的耗时,可省略,单位毫秒,如果省略的话默认是100毫秒
返回值:
脚本例子:

//以下是多点触控的例子
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的触点
备注:
坐标是通过抓抓来获取的,不管你的设备画面是横屏还是竖屏,所有坐标一律都是以抓抓显示为准。
注意滑动耗时的单位是毫秒,1秒 = 1000毫秒。
此命令需要配合TouchDown方可有效
命令名称: TouchUp 弹起
命令功能: 弹起TouchDown命令按下的点
语法格式: TouchUp [id]
参数说明:
id:整数型,可选参数,这个触点的自定义ID
返回值:
脚本例子:

//以下是多点触控的例子
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的触点
备注:
此命令需要配合TouchDown方可有效。
命令名称: CatchTouchPoint 获取用户点击坐标
命令功能: 获取屏幕上手指点击的坐标(命令为阻塞状态)
语法格式: Ret = CatchTouchPoint(Number)
参数说明:
Number:整数型,设置需要获取的点击次数
返回值: Ret:键值表,返回点击的坐标,格式:[点击数][坐标]
脚本例子:

Dim 返回坐标 = CatchTouchPoint(2) //获取用户点击坐标(命令为阻塞状态)
TracePrint 返回坐标[1][1] //得到第1个点击坐标
TracePrint 返回坐标[1][2]
TracePrint 返回坐标[2][1] //得到第2个点击坐标
TracePrint 返回坐标[2][2]
备注:
注意:此命令存在设备兼容问题,获取的坐标会不准确。
命令名称: RandomsTap 随机真实点击带抖动
命令功能: 随机真实点击带抖动
语法格式: RandomsTap(x,y,r,pic)
参数说明:
x:整数型,屏幕X坐标
y:整数型,屏幕Y坐标
r:整数型,可选,坐标范围:缺省默认为 5,单位像素(px)
pic:字符串型,可选,点击效果的显示图片路径(展示一会就消失),图片不存在则不显示
返回值:
脚本例子:

//随机点击滑动坐标(x,y),x 为 100±20 取一个随机值,y 为 200±20 取一个随机。
RandomsTap(100,200,20,"1.png")
备注:
仅iOS版支持
命令名称: RandomTap 随机点击
命令功能: 随机点击
语法格式: RandomTap(x,y,r,pic)
参数说明:
x:整数型,屏幕X坐标
y:整数型,屏幕Y坐标
r:整数型,可选,坐标范围:缺省默认为 5,单位像素(px)
pic:字符串型,可选,点击效果的显示图片路径(展示一会就消失),图片不存在则不显示
返回值:
脚本例子:

//随机点击滑动坐标(x,y),x 为 100±20 取一个随机值,y 为 200±20 取一个随机。
RandomTap(100,200,20,"1.png")
备注:
仅iOS版支持
命令名称: MoveZoomOut 捏合
命令功能: 从外向内捏合
语法格式: MoveZoomOut(x1,y1,x2,y2,step)
参数说明:
x1:整数型,屏幕X坐标
y1:整数型,屏幕Y坐标
x2:整数型,屏幕X坐标
y2:整数型,屏幕Y坐标
step:整数型,可选,速度,缺省默认为 50,时间单位(毫秒)
返回值:
脚本例子:

//从坐标(100,100)和坐标(300,300)同时向中间点滑动缩小
MoveZoomOut(100,100,300,300)
备注:
仅iOS版支持
命令名称: MoveZoomIn 放大滑动
命令功能: 放大滑动
语法格式: MoveZoomIn(x1,y1,x2,y2,step)
参数说明:
x1:整数型,屏幕X坐标
y1:整数型,屏幕Y坐标
x2:整数型,屏幕X坐标
y2:整数型,屏幕Y坐标
step:整数型,可选,速度,缺省默认为 50,时间单位(毫秒)
返回值:
脚本例子:

//两点坐标中间同时向坐标(100,100)和坐标(300,300)两端滑动
MoveZoomIn(100,100,300,300)
备注:
仅iOS版支持
命令名称: xyRotate 坐标转换
命令功能: 坐标转换
语法格式: table = xyRotate(x,y,dir)
参数说明:
x:整数型,屏幕X坐标
y:整数型,屏幕Y坐标
dir:整数型,旋转方向(0–3)
0 不旋转
1 逆时针旋转 90 度
2 顺时针旋转 90 度
3 旋转 180 度
返回值: table:表型,旋转后的坐标值
脚本例子:

For var = 0 To 3
Dim table = xyRotate(611, 275, var)
TracePrint table[1]
TracePrint table[2]
Next
备注:
仅iOS版支持

紫猫插件手机版帮助文档

Posted in 按键精灵
命令名称: zm.About 介绍与下载
功能说明: 输出最新版插件更新内容,当传入命令字符串参数时,输出该命令的在线文档地址。
语法格式: 结果 = zm.About([命令])
命令参数: 命令: 字符串, 可选参数,紫猫插件里的命令名,例如`RndStr`、`ColorToHSV`等。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Call zm.About()
zm.About "RndStr" //显示zm.RndStr命令文档地址
备注: 只是一个插件介绍功能,除了想知道文档地址外,一般不需要使用。
V1.1720: 加入命令
V1.1722: 增加一个参数,实现输出显示在线文档地址。
命令名称: zm.Init 初始化插件环境
功能说明: 初始化插件环境,只需要执行一次
语法格式: 结果 = zm.Init()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次
备注: 用于初始化插件的运行环境,加载常用数据,加强插件的稳定性,加快插件命令执行效率,一般放脚本开头运行一次即可。
V1.1723b: 初次加入
V1.1730: 修复报错问题
V1.1750: 提高执行效率
V1.1802: 加入快速初始化命令
V1.1818: 仅在每天首次启动检查更新, 大幅度提高速度
V1.1820: 优化执行效率
命令名称: zm.FindStrBaiDu 百度云找字
功能说明: 使用百度云识别来实现找字功能, 不需要字库, 字体颜色之类的参数, 必须先使用 zm.ocrbaiduinit 进行初始化后使用, 默认参数使用 zm.setfindstr 修改
语法格式: 结果 = zm.FindStrBaiDu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If

Dim ret

//--------------------初级用法--------------------//
//默认全屏查找"紫猫学院"这4个字, 任何颜色都可以
ret = zm.FindStrBaiDu("紫猫学院")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "文字=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "文字=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "文字=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写
If zm.FindStrBaiDu(100, 200, 300, 400, "紫猫学院", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号=" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "文字=" & 返回数组(3)
    TracePrint "找到序号=" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "文字=" & 返回数组[4]
    TracePrint "找到序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "文字=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//对象后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//这句代码意思如下:
//在范围(100,200,300,400)里, 限时30000毫秒内循环查找("紫猫|学院")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_40")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindStrBaiDu(100, 200, 300, 400, "紫猫|学院", 30*1000, True, "显示", "@怪物1", 返回数组, "_40")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
Dim 史莱姆 = {"紫猫|学院", True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStrBaiDu 史莱姆

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindStrBaiDu() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindStr() 命令帮助
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStrBaiDu("喵星人") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "文字=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "文字=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "文字=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 本命令调用百度云的通用文字识别(含位置信息版)功能实现找字, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
V3.1903: 修复上版本的找字失败问题
命令名称: zm.FindStrTableBaiDu 百度云找字遍历
功能说明: zm.findstrbaidu 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindStrTableBaiDu([对象table])
命令参数: 对象table: table, 把 zm.findstrbaidu 的对象参数放入table数组中, 实现遍历找字
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆", true}
打怪["黑龙"] = {100,200,300,400, "黑龙", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindStrTableBaiDu(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 本命令调用百度云的通用文字识别(含位置信息版)功能实现找字, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
命令名称: zm.FindStrTableYouTu 优图找字遍历
功能说明: zm.findstryoutu 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindStrTableYouTu([对象table])
命令参数: 对象table: table, 把 zm.findstryoutu 的对象参数放入table数组中, 实现遍历找字
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey") Then
  TracePrint "设置优图AI识别成功"
Else
  TracePrint "设置优图AI识别失败"
End If

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆", true}
打怪["黑龙"] = {100,200,300,400, "黑龙", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindStrTableYouTu(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
本命令只适合正常屏幕方向使用, 横屏情况推荐使用 zm.findstrbaidu
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.FindStrTapBaiDu 百度云找字点击
功能说明: zm.findstrbaidu 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindStrTapBaiDu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If

//本命令内置找到后点击, 其他用法例子与zm.FindStrBaiDu()相同
Dim ret
ret = zm.FindStrTapBaiDu("紫猫学院")
If ret Then
    TracePrint "文字找到并执行了点击"
Else
    TracePrint "没有找到文字, 不执行点击"
End If
备注: 本命令调用百度云的通用文字识别(含位置信息版)功能实现找字, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
命令名称: zm.FindStrTapYouTu 优图找字点击
功能说明: zm.findstryoutu 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindStrTapYouTu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey") Then
  TracePrint "设置优图AI识别成功"
Else
  TracePrint "设置优图AI识别失败"
End If

//本命令内置找到后点击, 其他用法例子与zm.FindStrYouTu()相同
Dim ret
ret = zm.FindStrTapYouTu("紫猫学院")
If ret Then
    TracePrint "文字找到并执行了点击"
Else
    TracePrint "没有找到文字, 不执行点击"
End If
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
本命令只适合正常屏幕方向使用, 横屏情况推荐使用 zm.findstrbaidu
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.FindStrYouTu 优图找字
功能说明: 使用优图AI识别来实现找字功能, 对横屏识别效果不佳, 不需要字库, 字体颜色之类的参数, 必须先使用 zm.ocryoutuinit 进行初始化后使用, 默认参数使用 zm.setfindstr 修改
语法格式: 结果 = zm.FindStrYouTu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey") Then
  TracePrint "设置优图AI识别成功"
Else
  TracePrint "设置优图AI识别失败"
End If

Dim ret

//--------------------初级用法--------------------//
//默认全屏查找"紫猫学院"这4个字, 任何颜色都可以
ret = zm.FindStrYouTu("紫猫学院")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "文字=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "文字=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "文字=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写
If zm.FindStrYouTu(100, 200, 300, 400, "紫猫学院", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号=" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "文字=" & 返回数组(3)
    TracePrint "找到序号=" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "文字=" & 返回数组[4]
    TracePrint "找到序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "文字=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//对象后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//这句代码意思如下:
//在范围(100,200,300,400)里, 限时30000毫秒内循环查找("紫猫|学院")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_40")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindStrYouTu(100, 200, 300, 400, "紫猫|学院", 30*1000, True, "显示", "@怪物1", 返回数组, "_40")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
Dim 史莱姆 = {"紫猫|学院", True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStrYouTu 史莱姆

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindStrYouTu() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindStr() 命令帮助
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStrYouTu("喵星人") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "文字=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "文字=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "文字=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
本命令只适合正常屏幕方向使用, 横屏情况推荐使用 zm.findstrbaidu
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDu 百度云通用文字识别
功能说明: 无需制作字库, 使用百度云实现在线云识别文字, 支持范围识别、本地图片或URL链接图片识别, 请先调用 zm.ocrbaiduinit 设置后才使用本命令
语法格式: 结果 = zm.OcrBaiDu([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 暂不支持https链接, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明部分
返回值: 字符串: 返回识别结果, 多个字符串以`\n`分割, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置默认通用文字识别
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别文字
ret = zm.OcrBaiDu(0, 0, 0, 0)
TracePrint "识别结果:", ret

//例子2: 设置通用文字识别(高精度版)
zm.OcrBaiDuInit "请修改成你的API Key", "请修改成你的Secret Key", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
//本地图片识别文字
ret = zm.OcrBaiDu("/sdcard/紫猫.png")
TracePrint "识别结果:", ret

//例子3: 设置网络图片文字识别, 并开启检测图像朝向功能
Dim args = {"apikey":"请修改成你的API Key", "seckey":"请修改成你的Secret Key", "posturl":"https://aip.baidubce.com/rest/2.0/ocr/v1/webimage", "detect_direction":"true"}
zm.OcrBaiDuInit args
//URL图片链接识别文字并返回原生json
ret = zm.OcrBaiDu("http://bbs.anjian.com/templates/default/Images/logo1.png", t)
TracePrint "识别结果:", ret, "原生json:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的参数posturl, 实现支持通用文字识别(包括含位置信息版, 含生僻字版, 高精度版, 高精度含位置版, 网络图片文字识别)
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuAll 百度云文字识别
功能说明: 百度云识别高级函数, 实现百度云文字识别的所有接口命令, 请求URL和请求参数请通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuAll([x1, y1, x2, y2][, 图片路径])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回识别结果, 格式与百度云文档中返回值相同, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret

//例子1: 设置身份证识别接口与参数, 请严格按照API文档中的请求URL与请求参数填写
//也可以使用zm.OcrBaiDuIDCard()身份证识别专用函数实现
Dim args = {"apikey":"请修改成你的API Key", "seckey":"请修改成你的Secret Key", "posturl":"https://aip.baidubce.com/rest/2.0/ocr/v1/idcard","id_card_side":"front"}
If zm.OcrBaiDuInit(args) Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//使用一张本地的身份证正面照片
ret = zm.OcrBaiDuAll("/sdcard/sfz.png")
//返回值为原生json表, 故采用zm.VarInfo()查看, 具体请自行研究如何使用table表提取相关内容
TracePrint "识别结果:", zm.VarInfo(ret)

//例子2: 设置银行卡识别接口与参数, 请严格按照API文档中的请求URL与请求参数填写
zm.OcrBaiDuInit "请修改成你的API Key", "请修改成你的Secret Key", "https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard"
//截图识别银行卡
ret = zm.OcrBaiDuAll(0,0,0,0)
//返回值为原生json表, 故采用zm.VarInfo()查看, 具体请自行研究如何使用table表提取相关内容
TracePrint "识别结果:", zm.VarInfo(ret)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuBankCard 百度云银行卡识别
功能说明: 识别银行卡并返回卡号和发卡行, 内置固定的请求URL, 除图片外的请求参数通过 zm.ocrbaiduinit 设置
语法格式: 结果 = zm.OcrBaiDuBankCard([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式为{“bank\_card\_number”:”622500000000000″,”bank\_name”:”招商银行”,”bank\_card\_type”:1}, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别银行卡
ret = zm.OcrBaiDuBankCard(0, 0, 0, 0)
If ret then
    TracePrint "银行卡卡号:", ret["bank_card_number"]
    TracePrint "银行名:", ret["bank_name"]
    TracePrint "银行卡类型:", ret["bank_card_type"]
Else
    TracePrint "识别失败"
End If

//本地图片识别银行卡
ret = zm.OcrBaiDuBankCard("/sdcard/紫猫银行卡.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuBusiness 百度云营业执照识别
功能说明: 识别营业执照, 并返回关键字段的值, 包括单位名称/法人/地址/有效期/证件编号/社会信用代码等, 内置固定的请求URL
语法格式: 结果 = zm.OcrBaiDuBusiness([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“单位名称”:”紫猫编程学院”,”法人”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别营业执照
ret = zm.OcrBaiDuBusiness(0, 0, 0, 0)
If ret then
    TracePrint "单位名称:", ret["单位名称"]
    TracePrint "法人:", ret["法人"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//本地图片识别营业执照
ret = zm.OcrBaiDuBusiness("/sdcard/紫猫营业执照.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuDriving 百度云驾驶证识别
功能说明: 对机动车驾驶证所有关键字段进行识别, 内置固定的请求URL, 除图片外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuDriving([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“证号”:”345911220″,”姓名”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别驾驶证
ret = zm.OcrBaiDuDriving(0, 0, 0, 0)
If ret then
    TracePrint "姓名:", ret["姓名"]
    TracePrint "证件号:", ret["证件号"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别驾驶证
ret = zm.OcrBaiDuDriving("/sdcard/紫猫驾驶证.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuForm 百度云表格文字识别
功能说明: 已整合为同步请求, 自动识别表格线及表格内容, 结构化输出表头, 表尾及每个单元格的文字内容, 内置固定的请求URL, 除图片外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuForm([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 字符串: 返回表格下载地址或json文本, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别表格文字
ret = zm.OcrBaiDuForm(0, 0, 0, 0)
If ret then
    TracePrint "默认excel表格下载地址", ret
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 加入设置返回json文本
Dim args = {"result_type":"json"}
zm.OcrBaiDuInit args
//本地图片识别表格文字
ret = zm.OcrBaiDuForm("/sdcard/紫猫表格.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuHandWriting 百度云手写识别
功能说明: 识别屏幕上的手写文字, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuHandWriting([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 字符串: 返回屏幕上的文字内容, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If

//全屏识别文字
ret = zm.OcrBaiDuHandWriting(0, 0, 0, 0)
If ret then
    TracePrint "手写文字", ret
Else
    TracePrint "识别失败"
End If
备注: 本命令调用百度云的手写文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuIDCard 百度云身份证识别
功能说明: 识别身份证正背面, 内置固定的请求URL, 除图片和正背面id\_card\_side参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuIDCard(正背面, [x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: 正背面: 字符串, 必选, 身份证照片的正背面, 正面照片填写`”正面”`或`”front”`, 背面照片填写`”背面”`或`”back”`
x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“公民身份号码”:”345911220″,”姓名”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别身份证
ret = zm.OcrBaiDuIDCard("正面", 0, 0, 0, 0)
If ret then
    TracePrint "姓名:", ret["姓名"]
    TracePrint "公民身份号码:", ret["证件号"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别身份证
ret = zm.OcrBaiDuIDCard("back", "/sdcard/紫猫身份证.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuInit 设置百度云文字识别
功能说明: 初始化设置百度云文字识别key和请求参数, 一般只要调用一次, 除非需要用不同的识别模式与参数, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrBaiDuInit([高级属性, ][apikey, seckey][, 图片朝向][, posturl])
命令参数: 高级属性: 表, 可选, 高级参数, 一般不需要填写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见 http://ai.baidu.com/docs#/OCR-API/top 中的请求参数, 其中请求URL的键名为posturl
apikey: 字符串, 可选, 百度云文字识别控制台创建的API Key, 详见最下面的备注
seckey: 字符串, 可选, 百度云文字识别控制台创建的Secret Key, 详见最下面的备注
图片朝向: 布尔值, 可选, 是否开启检测图像朝向功能功能, 省略默认为true
posturl: 字符串, 可选, 百度云文字识别的请求URL, 用于不同模式的识别, 省略默认为`https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic`
返回值: 表: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//例子1: 设置默认通用文字识别
Dim r = zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key")
zm.TracePrint(r) //查看返回值

//例子2: 设置通用文字识别(高精度版)
zm.OcrBaiDuInit "请修改成你的API Key", "请修改成你的Secret Key", "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"

//例子3: 通过高级属性设置默认通用文字识别, 并开启检测图像朝向功能
Dim args = {"apikey":"请修改成你的API Key", "seckey":"请修改成你的Secret Key", "posturl":"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic", "detect_direction":"true"}
If zm.OcrBaiDuInit(args) Then
  TracePrint "设置百度云识别成功"
Else
  TracePrint "设置百度云识别失败"
End If
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的[API接口文档](https://ai.baidu.com/docs#/OCR-API/top)
本命令通过修改请求URL参数posturl与相关请求参数, 实现支持文字识别的所有功能
V1.1747: 加入命令
V2.1829: 加入图像朝向检测参数
V3.1832: 为统一命令格式, `zm.SetOcrBaidu()`改为`zm.OcrBaiduInit()`
V3.1839: 检测图像朝向功能默认为启用状态
命令名称: zm.OcrBaiDuNumbers 百度云数字识别
功能说明: 识别屏幕上的数字, 返回字符串数据类型, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuNumbers([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 字符串: 返回屏幕上的数字内容, 注意数据类型是字符串格式, 做大小比较请用`CDbl`之类的函数转换数值型
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If

//全屏识别数字
ret = zm.OcrBaiDuNumbers(0, 0, 0, 0)
If ret then
    TracePrint "数字", ret
Else
    TracePrint "识别失败"
End If
备注: 本命令调用百度云的数字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuPlate 百度云车牌识别
功能说明: 识别机动车车牌, 并返回签发地和号牌, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuPlate([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 数组: 返回优化后的识别结果, 格式类似于{“鄂A345911220”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别一张车牌
ret = zm.OcrBaiDuPlate(0, 0, 0, 0)
If ret then
    TracePrint "车牌号", ret(0)
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启多张车牌检测功能
Dim args = {"multi_detect":"true"}
zm.OcrBaiDuInit args
//本地图片识别多张车牌
ret = zm.OcrBaiDuPlate("/sdcard/紫猫车牌.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuReceipt 百度云通用票据识别
功能说明: 识别医疗票据/发票/的士票/保险保单等票据类图片中的所有文字, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuReceipt([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 数组: 返回优化后的识别结果, 格式类似于{“345911220″,”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别发票
ret = zm.OcrBaiDuReceipt(0, 0, 0, 0)
If ret then
    For i = 0 to UBound(ret)
        TracePrint ret(i)
    Next
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别的士票
ret = zm.OcrBaiDuReceipt("/sdcard/紫猫的士票.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuVehicle 百度云行驶证识别
功能说明: 对机动车行驶证正本所有关键字段进行识别, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.ocrbaiduinit 设置, 具体内容见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)
语法格式: 结果 = zm.OcrBaiDuVehicle(正背面, [x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于{“品牌型号”:”保时捷GT37182RUCRE”,”所有人”:”紫猫”, …}, 详细请自行遍历查看, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret, t()

//例子1: 设置key
If Not zm.OcrBaiDuInit("请修改成你的API Key", "请修改成你的Secret Key") Then
    TracePrint "初始化设置百度云识别失败"
    EndScript
End If
//全屏识别行驶证
ret = zm.OcrBaiDuVehicle(0, 0, 0, 0)
If ret then
    TracePrint "所有人:", ret["所有人"]
    TracePrint "品牌型号:", ret["品牌型号"]
    //更多输出请自行遍历
Else
    TracePrint "识别失败"
End If

//例子2: 在例子1的基础上, 增加开启检测朝向功能
Dim args = {"detect_direction":"true"}
zm.OcrBaiDuInit args
//本地图片识别行驶证
ret = zm.OcrBaiDuVehicle("back", "/sdcard/紫猫行驶证.png", t)
TracePrint "识别结果:", zm.VarInfo(ret)
TracePrint "原生返回值:", zm.VarInfo(t)
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[百度云AI官网](http://ai.baidu.com/)注册并登录
打开[文字识别控制台](https://console.bce.baidu.com/ai/#/ai/ocr/overview/index)
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.ocrbaiduinit 的请求参数, 实现更多功能, 详见详见[百度云文字识别API文档](http://ai.baidu.com/docs#/OCR-API/top)的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouDao 有道智云OCR
功能说明: 无需制作字库, 使用有道智云实现在线云识别文字, 支持范围识别或指定图片识别, 必须先使用 zm.ocryoudaoinit 进行初始化
语法格式: 结果 = zm.OcrYouDao([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 不可与图片路径参数同时存在
y1: 数值型, 可选, 识别范围的左上角y坐标, 不可与图片路径参数同时存在
x2: 数值型, 可选, 识别范围的右下角x坐标, 不可与图片路径参数同时存在
y2: 数值型, 可选, 识别范围的右下角y坐标, 不可与图片路径参数同时存在
图片路径: 字符串, 可选, 要识别内容的图片路径, 不可与范围参数同时存在
返回json: 表, 可选, 一般不建议填写, 以表的形式返回原生结果, 详情请自行遍历查看
返回值: 字符串: 返回识别结果, 失败返回nil
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.OcrYouDaoInit "请修改成你的应用ID", "请修改成你的应用密钥"

Dim ret = zm.OcrYouDao(100,100,400,400)
TracePrint "识别结果为:", ret
备注: 本命令调用网易公司的有道智云OCR功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[有道智云官网](http://ai.youdao.com/)注册并登录
创建一个我的应用
再创建一个文字识别OCR实例, 并绑定应用
打开应用就可以看到应用ID和应用密钥
识别范围与图片路径参数只能二选一, 不可同时填写
V1.1745: 加入命令
V1.1746: 解决语法报错问题
V3.1849: 支持超级缩放
命令名称: zm.OcrYouDaoInit 设置有道智云OCR
功能说明: 初始化设置有道智云OCR的账户数据, 只要调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrYouDaoInit([列表, ][应用ID, 应用密钥])
命令参数: 列表: 表, 可选, 高级参数, 建议不写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见下方属性表
应用ID: 字符串, 可选, 有道智云后台创建的应用ID, 详见最下面的备注
应用密钥: 字符串, 可选, 有道智云后台创建的应用密钥, 详见最下面的备注

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
appKey | “” | 字符串 | 有道智云后台创建的应用ID
secKey | “” | 字符串 | 有道智云后台创建的应用密钥
langType | “zh-en” | 字符串 | 要识别的语言类型, 目前支持英文:en,和中英混合:zh-en
detectType | “1011” | 字符串 | 识别类型,目前只支持片段识别:1011
imageType | “1” | 字符串 | 图片类型,目前只支持Base64:1
docType | “json” | 字符串 | 服务器响应类型,目前只支持json
url | “http://openapi.youdao.com/ocrapi” | 字符串 | 有道智云OCR API HTTP地址

返回值: 表: 返回设置后的参数列表
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.OcrYouDaoInit "请修改成你的应用ID", "请修改成你的应用密钥"
备注: 本命令调用网易公司的有道智云OCR功能, 此命令的任何充值消费行为均与紫猫编程学院无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往[有道智云官网](http://ai.youdao.com/)注册并登录
创建一个我的应用
再创建一个文字识别OCR实例, 并绑定应用
打开应用就可以看到应用ID和应用密钥
V1.1745: 加入命令
V3.1832: 为统一命令格式, `zm.SetOcrYouDao()`改为`zm.OcrYouDaoInit()`
命令名称: zm.OcrYouTu 优图通用OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别文字, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTu([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图通用OCR文档](https://ai.qq.com/doc/ocrgeneralocr.shtml)的响应参数部分
返回值: 字符串: 成功返回识别结果, 多行内容以`”\n”`分割, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")

Dim ret = zm.OcrYouTu(0, 0, 0, 0) //识别范围文字
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("/sdcard/紫猫.png") //识别本地图片
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("http://bbs.anjian.com/templates/default/Images/logo1.png") //识别网络图片
TracePrint "识别结果: ", ret

Dim t()
ret = zm.OcrYouTu(100, 100, 200, 200, t) //获取原生返回值t
TracePrint "部分原生返回值: ", zm.VarInfo(t)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBankCard 优图银行卡OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别银行卡, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBankCard([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图银行卡OCR文档](https://ai.qq.com/doc/ocrcreditcardocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuBankCard("/sdcard/银行卡.png")
TracePrint "银行卡数据: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBC 优图名片OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别名片, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBC([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图名片OCR文档](https://ai.qq.com/doc/ocrbcocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuBC("/sdcard/名片.png")
TracePrint "名片数据: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBusiness 优图营业执照OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别营业执照, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBusiness([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图营业执照OCR文档](https://ai.qq.com/doc/ocrbizlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuBusiness("/sdcard/名片.png")
TracePrint "营业执照数据: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuDriverLicense 优图行驶证驾驶证OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别行驶证与驾驶证, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuDriverLicense(类型, [x1, y1, x2, y2][图片路径][, 返回json])
命令参数: 类型: 数值型_或_字符串, 必选, 行驶证照片填写”行驶证”或0, 驾驶证照片填写”驾驶证”或1
x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图行驶证驾驶证OCR文档](https://ai.qq.com/doc/ocrdriverlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuDriverLicense(0, "/sdcard/行驶证.png")
TracePrint "行驶证: ", zm.VarInfo(ret)
ret = zm.OcrYouTuDriverLicense(1, "/sdcard/驾驶证.png")
TracePrint "驾驶证: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuHandWriting 优图手写OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别手写文字, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuHandWriting([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图手写OCR文档](https://ai.qq.com/doc/handwritingocr.shtml)的响应参数部分
返回值: 字符串: 成功返回识别结果, 多行内容以`”\n”`分割, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuHandWriting("/sdcard/名片.png")
TracePrint "手写数据: ", ret
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuIDCard 优图身份证OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别身份证, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuIDCard(正反面, [x1, y1, x2, y2][图片路径][, 返回json])
命令参数: 正反面: 数值型_或_字符串, 必选, 身份证照片的正反面, 正面照片填写”正面”或0, 反面照片填写”反面”或1
x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图行驶证驾驶证OCR文档](https://ai.qq.com/doc/ocrdriverlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuIDCard(0, "/sdcard/身份证正面.png")
TracePrint "正面: ", zm.VarInfo(ret)
ret = zm.OcrYouTuIDCard(1, "/sdcard/身份证反面.png")
TracePrint "反面: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuInit 初始化优图OCR
功能说明: 初始化设置腾讯优图OCR识别的账户AppID和AppKey, 一般只需调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrYouTuInit(AppID, AppKey)
命令参数: AppID: 字符串, 可选, 腾讯AI控制台创建的优图OCR AppID, 详见最下面的备注
AppKey: 字符串, 可选, 腾讯AI控制台创建的优图OCR AppKey, 详见最下面的备注
返回值: table: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")

Dim ret = zm.OcrYouTu(0, 0, 0, 0) //识别范围文字
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("/sdcard/紫猫.png") //识别本地图片
TracePrint "识别结果: ", ret

ret = zm.OcrYouTu("http://bbs.anjian.com/templates/default/Images/logo1.png") //识别网络图片
TracePrint "识别结果: ", ret

Dim t()
ret = zm.OcrYouTu(100, 100, 200, 200, t) //获取原生返回值t
TracePrint "部分原生返回值: ", zm.VarInfo(t)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.OcrYouTuPlate 优图车牌OCR
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别车牌, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.ocryoutuinit 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuPlate([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见[优图营业执照OCR文档](https://ai.qq.com/doc/ocrbizlicenseocr.shtml)的响应参数部分
返回值: table: 成功返回键值对table结果, 请遍历查看, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuPlate("/sdcard/车牌.png")
TracePrint "车牌: ", zm.VarInfo(ret)
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.SpeechSsYouTu 优图语音合成播放
功能说明: 使用优图提供的语音合成功能实现文字转声音并播放, 注意脚本停止会导致播放停止. 请先调用 zm.speechssyoutuinit 初始化后才使用本命令, 设置发音人等内容都在初始化命令中调整
语法格式: 结果 = zm.SpeechSsYouTu(文本内容[, 是否播放[, 是否删除]])
命令参数: 文本内容: 字符串, 准备合成语音的文本内容
是否播放: 布尔型, 可选, 是否自动播放音频, 注意脚本停止会导致播放停止
是否删除: 布尔型, 可选, 是否删除合成的文件, 注意前面必须要有是否播放参数
返回值: 字符串: 返回合成的语音文件路径, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化腾讯AI语音合成的账户数据, 只需执行一次, 请自行修改
zm.SpeechSsYouTuInit "请修改成你的AppID", "请修改成你的AppKey"
//合成并自动播放
zm.SpeechSsYouTu "欢迎使用紫猫插件手机版", True
Delay 5000 //防止脚本停止导致播放停止

//前面已经初始化过app数据, 现在修改默认发音人
zm.SpeechSsYouTuInit {"speaker":6}
//合成并自动播放
zm.SpeechSsYouTu "紫猫老师真帅!", True
Delay 5000 //防止脚本停止导致播放停止
备注: 本命令调用腾讯AI的语音合成接口
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 勾选`语音合成`
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.SpeechSsYouTuInit 初始化优图语音合成
功能说明: 初始化设置腾讯AI语音合成的账户AppID和AppKey, 一般只需调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.SpeechSsYouTuInit([高级属性][AppID, AppKey])
命令参数: 高级属性: table, 可选, 一般不需要填写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见下面表格
AppID: 字符串, 可选, 腾讯AI控制台创建的语音合成 AppID, 详见最下面的备注
AppKey: 字符串, 可选, 腾讯AI控制台创建的语音合成 AppKey, 详见最下面的备注
app_id: 字符串, 腾讯AI控制台创建的语音合成 AppID
app_key: 字符串, 腾讯AI控制台创建的语音合成 AppKey
interface: 字符串, 语音合成接口, 支持`”aai_tts”`和`”aai_tta”`, 默认为`”aai_tts”`
speaker: 数值型, `aai_tts`接口的语音发音人编码, 支持`1,5,6,7`, 默认为`1`
format: 数值型, `aai_tts`接口的语音格式编码, 支持`1,2,3`, 默认为`2`
volume: 数值型, `aai_tts`接口的语音音量, 支持`[-10, 10]`, 默认为`0`
speed_tts: 数值型, `aai_tts`接口的语音语速, 支持`[50, 200]`, 默认为`100`
aht: 数值型, `aai_tts`接口的语音降低/升高半音个数, 支持`[-24, 24]`, 默认为`0`
apc: 数值型, `aai_tts`接口的控制频谱翘曲的程度,改变说话人的音色, 支持`[0, 100]`, 默认为`58`
model_type: 数值型, `aai_tta`接口的语音发音人编码, 支持`0,1,2,6`, 默认为`0`
speed_tta: 数值型, `aai_tta`接口的语音语速, 支持`-2,-1,0,1,2`, 默认为`0`

键名 | 数据类型 | 解释
—-:|:——-:|:—-
**app_id** | _字符串_ | 腾讯AI控制台创建的语音合成 AppID
**app_key** | _字符串_ | 腾讯AI控制台创建的语音合成 AppKey
**interface** | _字符串_ | 语音合成接口, 支持`”aai_tts”`和`”aai_tta”`, 默认为`”aai_tts”`
**speaker** | _数值型_ | `aai_tts`接口的语音发音人编码, 支持`1,5,6,7`, 默认为`1`
**format** | _数值型_ | `aai_tts`接口的语音格式编码, 支持`1,2,3`, 默认为`2`
**volume** | _数值型_ | `aai_tts`接口的语音音量, 支持`[-10, 10]`, 默认为`0`
**speed_tts** | _数值型_ | `aai_tts`接口的语音语速, 支持`[50, 200]`, 默认为`100`
**aht** | _数值型_ | `aai_tts`接口的语音降低/升高半音个数, 支持`[-24, 24]`, 默认为`0`
**apc** | _数值型_ | `aai_tts`接口的控制频谱翘曲的程度,改变说话人的音色, 支持`[0, 100]`, 默认为`58`
**model_type** | _数值型_ | `aai_tta`接口的语音发音人编码, 支持`0,1,2,6`, 默认为`0`
**speed_tta** | _数值型_ | `aai_tta`接口的语音语速, 支持`-2,-1,0,1,2`, 默认为`0`

返回值: table: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化腾讯AI语音合成的账户数据, 只需执行一次, 请自行修改
zm.SpeechSsYouTuInit "请修改成你的AppID", "请修改成你的AppKey"
//合成并自动播放
zm.SpeechSsYouTu "欢迎使用紫猫插件手机版", True
Delay 5000 //防止脚本停止导致播放停止

//前面已经初始化过app数据, 现在修改默认发音人
zm.SpeechSsYouTuInit {"speaker":6}
//合成并自动播放
zm.SpeechSsYouTu "紫猫老师真帅!", True
Delay 5000 //防止脚本停止导致播放停止
备注: 本命令调用腾讯AI的语音合成接口
获取优图AppID和AppKey的步骤:
前往[腾讯AI官网](https://ai.qq.com/)注册并登录
打开[控制台](https://ai.qq.com/cgi-bin/console_overview)
点击创建应用, 并输入相关资料, 勾选`语音合成`
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.Delay 超级延时
功能说明: 脚本暂停延时一段时间,支持防检测的随机延迟时长。
语法格式: 结果 = zm.Delay(时长1[, 时长2])
命令参数: 时长1: 数值型, 需要延迟的最小时间,单位毫秒。
时长2: 数值型, 可选参数,需要延迟的最大时间,单位毫秒,省略默认为时长1的值。
返回值: 数值型:最终随机到延迟的时长。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.RndInitSeed() //初始化随机种子,只需执行一次,也可以使用zm.Init()初始化
TracePrint "固定延迟一段时间"
zm.Delay(1000) //固定延迟1000毫秒
TracePrint "随机延迟一段时间"
zm.Delay(1000, 2000) //随机延迟1000到2000毫秒
TracePrint "延迟结束"
备注: 大部分游戏检测属于行为检测,比如每隔固定一段时间就执行操作内容之类,所以需要使用随机延迟时间。
V1.1722: 插件加入本命令
V1.1730: 修复报错问题
命令名称: zm.GetScreenScale 获取超级缩放状态
功能说明: 获取通过 zm.setscreenscalezm.resetscreenscale 设置的超级缩放状态, 对按键自带的缩放命令无效
语法格式: 结果 = zm.GetScreenScale()
命令参数:
返回值: 数值型: -1表示没有缩放; 0表示传入坐标缩放, 传出坐标不缩放; 1表示传入坐标缩放, 传出坐标反向缩放
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

If zm.GetScreenScale() = -1 Then
  TracePrint "没有缩放"
Else
  TracePrint "缩放中"
End If
备注: 对按键自带缩放无效, 仅支持超级缩放状态。
V1.1803: 加入命令
命令名称: zm.ResetScreenScale 取消超级缩放
功能说明: 取消屏幕比例缩放设置, 一般与 zm.setscreenscale 配套使用。
语法格式: 结果 = zm.ResetScreenScale()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//在720x1280分辨率下开发脚本的超级缩放
zm.SetScreenScale 720, 1280

//取消超级缩放
zm.ResetScreenScale
备注: V1.1803: 加入命令
命令名称: zm.SetDelay 设置超级延时
功能说明: 设置超级延时zm.Delay()的默认值, 设置一次后, 所有zm.Delay()均受影响
语法格式: 结果 = zm.SetDelay(属性表)
命令参数: 属性表: 表, 例如{“min”:-50, “max”:50}表示所有zm.Delay()函数随机浮动-50到50之间, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
min | 0 | 数值型 | 随机浮动最小值
max | 0 | 数值型 | 随机浮动最大值
time | 0 | 数值型 | 默认延时时间

返回值: 表: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//设置一次后, 所有zm.Delay都有效, 除非再次改变设置
zm.SetDelay({"min":-30, "max":40})
zm.Delay(100)  //表示随机延时(100-30)到(100+40)毫秒范围

zm.SetDelay({"min":-30, "max":40})
zm.Delay(100, 200)  //表示随机延时100到200毫秒范围, 不受默认值影响

zm.SetDelay({"min":-30, "max":40})
zm.Delay(100, true)  //表示固定延时100毫秒, 不要随机

zm.SetDelay({"min":-300, "max":400, "time":1000})
zm.Delay()   //表示随机延迟(1000-300)到(1000+400)毫秒范围
备注: 设置一次后, 所有zm.Delay都有效, 除非再次改变设置
V3.1853: 初次加入命令
命令名称: zm.SetScreenScale 超级缩放
功能说明: 与按键自带的 setscreenscale 相比, 多了对zm.FindPic()和zm.FindStr()的支持, 另外还可以使用 zm.getscreenscale 获取缩放状态.

缩放找图和缩放找字仅针对传入与传出坐标进行缩放, 对应的图片与字库请自行设置多套数据供命令调用.

语法格式: 结果 = zm.SetScreenScale(开发宽度, 开发高度[, 输出缩放])
命令参数: 开发宽度: 数值型, 开发脚本时使用的设备横向分辨率。
开发高度: 数值型, 开发脚本时使用的设备纵向分辨率。
输出缩放: 数值型, 可选参数,默认为1。0表示只对传入函数的坐标(如范围坐标等)进行缩放,从函数传出的坐标(如返回坐标等)不缩放,即为当前设备的真实坐标。1表示对传入的坐标(如范围坐标等)进行缩放,对函数传出的坐标(如返回坐标)进行反向缩放。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//普通找色点击情况与按键自带例子的SetScreenScale()相同, 这里就不演示了
//下面是找图找字功能缩放的演示

'设置开发分辨率进行超级缩放
zm.SetScreenScale 720, 1280

'附件中存放各个分辨率的图片, 图片文件名格式为: 横向分辨率x纵向分辨率xDPI数值-图片名.png
Dim 图片前缀 = "Attachment:" & GetScreenX() & "x" & GetScreenY() & "x" & Device.GetDPI() & "-"
TracePrint "本设备的图片默认前缀为:", 图片前缀

'设置找图的图片前缀
zm.SetFindPic {"pic":图片前缀}

If zm.FindPic("图片1.png|Attachment:图片2.png|/sdcard/图片3.png", "显示") Then
    '如果只写图片名的话, 插件就会自动帮你把图片前缀加上去, 比如图片1.png会自动加前缀
    '通过不同分辨率不同图片文件名的方式实现调用查找对应图片
    '而图片2和图片3由于是完整路径, 所以就没有自动加图片前缀了
    TracePrint "找到图片了"
Else
    TracePrint "没找到图片"
End If

'附件中存放各个分辨率下的字库文件, 文件名格式与图片相同: 横向分辨率x纵向分辨率xDPI数值-字库.txt
Dim 字库前缀 = "Attachment:" & GetScreenX() & "x" & GetScreenY() & "x" & Device.GetDPI() & "-"
TracePrint "本设备的图片默认前缀为:", 字库前缀

'设置字库
ret = SetDictEx(0, 字库前缀 & "紫猫学院字库.txt")
TracePrint "0号字库设置结果:", ret
ret = UseDict(0)
TracePrint "切换0号字库设置结果:", ret

If zm.FindStr("紫猫", "FFFFFF", "显示") Then
    TracePrint "找到文字了"
Else
    TracePrint "没找到文字"
End If
备注: V1.1803: 加入命令
命令名称: zm.SetShowLog 设置日志输出
功能说明: 修改所有日志显示输出的默认参数值,支持以`显示|隐藏`做日志参数的命令。
语法格式: 默认值 = zm.SetShowLog(显示隐藏)
命令参数: 显示隐藏: 字符串_|_布尔值, 可取以下[true, false, “显示”, “隐藏”, “show”, “hide”]几个值
返回值: 字符串: 返回设置的默认参数值
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//设置后, 对所有带有日志输出显示参数的命令生效
zm.SetShowLog "显示"
zm.FindColor "123456"
zm.FindMultiColor "123456", "1|1|000000"
zm.FindPic "紫猫.bmp"
zm.FindStr "学|院", "隐藏"
备注: V1.1741: 加入命令
V2.1829: 支持布尔值参数设置是否显示
命令名称: zm.SetTap 设置超级点击
功能说明: 修改 zm.tap 的默认参数值, 并影响超级图色命令中的点击参数效果
语法格式: 结果 = zm.SetTap(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“t”:2000, “showlog”:”显示”}表示修改点击后默认延时时间为3000毫秒, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
minx | 0 | 数值型 | 点击x坐标的浮动随机数
maxx | 0 | 数值型 | 点击x坐标的浮动随机数
miny | 0 | 数值型 | 点击y坐标的浮动随机数
maxy | 0 | 数值型 | 点击y坐标的浮动随机数
t | 0 | 数值型 | 点击后默认延时时间, 单位毫秒
mintouch | 0 | 数值型 | 点击时, 按下与弹起之间的最小时间间隔, 单位毫秒
maxtouch | 50 | 数值型 | 点击时, 按下与弹起之间的最大时间间隔, 单位毫秒
norandom | false | 布尔型 | 是否禁用随机, 填写true后, 所有点击都失去随机效果
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值

返回值: 表: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//点击固定坐标100,200
zm.Tap 100, 200

//点击固定坐标100,200后延时3000毫秒
zm.Tap 100, 200, 3000

//在范围100,200,150,250内随机点击某个点, 并显示输出
zm.Tap 100, 200, 150, 250, "show"

//在范围100,200,150,250内随机点击某个点后延时4000毫秒
zm.Tap 100, 200, 150, 250, 4000

//设置固定坐标x浮动范围[-10,15], 固定坐标y浮动范围[-5,20], 点击后默认延时2000毫秒
zm.SetTap {"minx":-10, "maxx":15, "miny":-5, "maxy":20, "t":2000}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后默认延时2000毫秒
zm.Tap 100, 200

//在范围100,200,150,250内随机点击某个点并默认延时2000毫秒, 不受默认浮动范围影响
Dim t = zm.Tap(100, 200, 150, 250)
//查看实际点击坐标
TracePrint zm.VarInfo(t)

//设置按下与弹起之间的时间间隔为10到30毫秒, 默认日志输出为显示
zm.SetTap {"mintouch":10, "maxtouch":30, "showlog":"显示"}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后延时3000毫秒
zm.Tap 100, 200, 3000
备注: V1.1802: 加入命令
命令名称: zm.ShowMessage 超级浮窗
功能说明: 与自带的命令相比, 加入了依次显示信息和倒计时功能
语法格式: 结果 = zm.ShowMessage(信息[, 显示时长][, x, y][, 倒计间隔])
命令参数: 信息: table_或_string, 浮窗显示的内容, 如果是字符串, 当包含”#时间”时将启用倒计时功能; 如果是表, 则在显示时间内依次遍历显示
显示时长: number, 可选, 在屏幕上显示总时长, 单位毫秒, 省略默认3000毫秒
x: number, 可选, 设置显示框在屏幕上的左上角X坐标, 省略默认为屏幕中间
y: number, 可选, 设置显示框在屏幕上的左上角Y坐标, 省略默认为屏幕中间
倒计间隔: number, 可选, 填写必须小于0, 表示倒计时步长, 省略默认为-1000毫秒
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//倒计时5秒, 脚本也会对应延时5秒
zm.ShowMessage("脚本将在 #时间 秒后启用", 5000)

//遍历循环显示内容, 总耗时10秒, 脚本也会对应延时10秒
zm.ShowMessage({"1.先打开app", "2.点击登录", "3.输入帐号密码", "4.点击确定"}, 10*1000)
备注: V3.1902: 初次加入命令
命令名称: zm.Swipe 超级划动
功能说明: 快速精准无惯性的模拟划动操作,可切换模式支持网页划动。
语法格式: 结果 = zm.Swipe(横坐标x1, 纵坐标y1, 横坐标x2, 纵坐标y2[, 划动耗时[, 轨迹次数]][, 按住时间][, 模式][, 禁用轨迹])
命令参数: 横坐标x1: 数值型, 划动的起点x坐标
横坐标y1: 数值型, 划动的起点y坐标
横坐标x2: 数值型, 划动的终点x坐标
横坐标y2: 数值型, 划动的终点y坐标
划动耗时: 数值型, 可选,划动花费的时间,单位毫秒,省略默认为100毫秒
轨迹次数: 数值型, 可选,划动轨迹多少次, 省略默认为10, 若填写轨迹次数参数, 则前面必须写耗时参数
按住时间: 数值型, 可选, 第一点按住不放一段时间后再移动, 格式为小于-50的负数, 例如-500表示按住500毫秒, 省略默认为-50
模式: 数值型, 可选,-1为普通模拟,-2为硬件模拟,-3为翻页模拟, -4为空格翻页, -5为导航移动, 当普通模式无法划动时,可以试下切换至其他模式,省略默认为-1
禁用轨迹: 布尔型, 可选,是否模拟真实带轨迹移动, 对翻页模式无效, 省略默认为false表示禁用, 启用后耗时参数将会失效
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//用时500毫秒,从坐标100,500精准划动到坐标100,200
zm.Swipe 100, 500, 100, 200, 500

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下硬件模拟。
zm.Swipe 100, 500, 100, 200, 500, -2

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下翻页模拟。
zm.Swipe 100, 500, 100, 200, -3

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下空格翻页模拟。
zm.Swipe 100, 500, 100, 200, -4

//当遇到默认普通模式划动失效时,例如浏览器网页之类的,可以试下导航移动模拟。
zm.Swipe 100, 500, 100, 200, -5

//遇到滑块验证等检测轨迹操作时, 可以开启轨迹功能
zm.Swipe 100, 200, 400, 200, true
备注: swipe 相比,本命令加入了无惯性与硬件模拟特点,可以实现精准定位划动,并且支持特殊页面与模拟真实轨迹操作。
一般情况下推荐使用普通模拟划动,除非普通模拟失效了,才考虑使用硬件模拟或翻页模拟。
滑块验证等操作推荐开启轨迹功能。
V1.1722: 插件加入本命令
V1.1730: 修复报错问题
V1.1750: 加入翻页模拟模式
V1.1816: 加入轨迹参数
V1.1821: 提高过滑块验证的准确率, 感谢`.`提供测试
V2.1826: 加入轨迹次数参数
V3.1835: 加入按住时间参数, 移动轨迹支持随机抖动
v3.1852: 加入空格翻页与导航移动模式
命令名称: zm.SwipeEx 多次划动
功能说明: zm.swipe 类似, 区别在于本命令支持指定多个坐标划动
语法格式: 结果 = zm.SwipeEx([xy, …][, 划动耗时[, 轨迹次数]][, 按住时间][, 模式][, 禁用轨迹])
命令参数: xy: table, 要划动经过的坐标点, 支持多个坐标参数, 格式为{x, y}, 详见例子
划动耗时: 数值型, 可选, 每个划动花费的时间, 单位毫秒, 省略默认为100毫秒
轨迹次数: 数值型, 可选, 每个划动轨迹多少次, 省略默认为10, 若填写轨迹次数参数, 则前面必须写耗时参数
按住时间: 数值型, 可选, 第一点按住不放一段时间后再移动, 格式为小于-50的负数, 例如-500表示按住500毫秒, 省略默认为-50
模式: 数值型, 可选, -1为普通模拟,-2为硬件模拟, 当普通模式无法划动时, 可以试下切换至硬件模拟, 省略默认为-1
禁用轨迹: 布尔型, 可选, 是否模拟真实带轨迹移动, 省略默认为false表示禁用
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//以真实轨迹从10,600划动到10,700到200,500到300,800
zm.SwipeEx {10, 600}, {10, 700}, {200, 500}, {300, 800}, True
备注: V3.1835: 初次加入
命令名称: zm.Tap 超级点击
功能说明: tap 更加强大的命令, 具体特色如下

– 担心被行为检测导致封号? 多种随机模式搭配防检测
– 每次点击后加延时命令麻烦? 直接把延时写到点击中
– 分割坐标字符串麻烦? 可以直接传入格式为”x,y”的坐标字符串参数
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 省略参数的默认值不理想? 可使用 zm.settap 来自定义修改

语法格式: 结果 = zm.Tap([对象,][坐标字符串][,x, y][, rx, ry][, 延时毫秒][, 禁用随机][, 显示日志][, 输出行号][, 备注])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
坐标字符串: 字符串, 可选, 与下面的x,y参数二选一填写, 坐标格式为`”x,y”`, 省略默认为`null`
x: 数值型, 可选, 要点击的x坐标, 填写对象参数后可省略
y: 数值型, 可选, 要点击的y坐标, 填写对象参数后可省略
rx: 数值型, 可选, 从x到rx范围中随机获取一个数作为横坐标x
ry: 数值型, 可选, 从y到ry范围中随机获取一个数作为纵坐标y
延时毫秒: 数值型, 可选, 点击后延时时间, 单位毫秒
禁用随机: 布尔型, 可选, 填写`true`时禁用任何随机功能, 填写`false`表示不禁用, 省略默认为`false`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
返回值: 表: 返回实际点击的坐标与延时表, 格式为{x,y,t,”x”:x,”y”:y,”t”:t}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//点击固定坐标100,200
zm.Tap 100, 200

//点击固定坐标100,200后延时3000毫秒
zm.Tap 100, 200, 3000

//点击字符串坐标100,200后, 延时300毫秒
zm.Tap "100,200", 300

//在范围100,200,150,250内随机点击某个点, 并显示输出
zm.Tap 100, 200, 150, 250, "show"

//在范围100,200,150,250内随机点击某个点后延时4000毫秒
zm.Tap 100, 200, 150, 250, 4000

//设置固定坐标x浮动范围[-10,15], 固定坐标y浮动范围[-5,20], 点击后默认延时2000毫秒
zm.SetTap {"minx":-10, "maxx":15, "miny":-5, "maxy":20, "t":2000}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后默认延时2000毫秒
zm.Tap 100, 200

//在范围100,200,150,250内随机点击某个点并默认延时2000毫秒, 不受默认浮动范围影响
Dim t = zm.Tap(100, 200, 150, 250)
//查看实际点击坐标
TracePrint zm.VarInfo(t)

//设置按下与弹起之间的时间间隔为10到30毫秒, 默认日志输出为显示
zm.SetTap {"mintouch":10, "maxtouch":30, "showlog":"显示"}

//x从100-10到100+15中随机取值, y从200-5到200+20中随机取值, 点击后延时3000毫秒
zm.Tap 100, 200, 3000, "@测试点击"
备注: V1.1802: 加入命令
V1.1816: 支持字符串参数坐标
V2.1829: 点击坐标无效时, 延时不生效
命令名称: zm.TracePrint 超级调试输出
功能说明: 调试输出加强版命令,支持输出数据类型、长度、数组、表。
语法格式: 结果 = zm.TracePrint(…)
命令参数: 行号: 字符串, 可选参数, 调试显示第几行代码, 格式为`”_行号”`, 例如`”_10″`表示第10行代码
参数: 任意类型, 要输出的内容,支持多个参数。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {1,2,3,4,5}
//如果第一个参数是下划线+行号的字符串,则显示当前脚本第几行。
//支持直接输出表或数组、支持多维数组。
zm.TracePrint "_5", a
//如果第一个参数不是下划线的,则不显示第几行
zm.TracePrint "紫猫"
//输出多个参数也可分别显示每个参数的数据类型、长度、值
zm.TracePrint "_9", "紫猫", "学院", 345911220, a
//也可以使用zm.VarInfo实现类似效果
TracePrint zm.VarInfo(a, "紫猫", null, 345911220)
备注: 由于行号参数过于麻烦,故推荐使用自带输出命令TracePrint配合 zm.varinfo 命令使用。
支持嵌套表或者多维数组的直接输出,格式是由中括号与大括号组成的。
V1.1720: 插件加入本命令。
V1.1722: 加入显示长度与第几行功能。
V1.1723: 支持嵌套表与多维数组,支持多参数显示信息。
命令名称: zm.BGRToColor 合成BGR颜色
功能说明: 合成三个BGR颜色分量到十六进制BGR字符串中
语法格式: 结果 = zm.BGRToColor(b, g, r)
命令参数: b: 数值型或字符串, 蓝色分量,数值型时表示十进制,字符串时表示十六进制。
g: 数值型或字符串, 绿色分量,数值型时表示十进制,字符串时表示十六进制。
r: 数值型或字符串, 红色分量,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:合成后的BGR格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.BGRToColor(10,20,30)
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.BGRToRGB BGR转RGB
功能说明: BGR格式颜色转换成RGB格式颜色
语法格式: 结果 = zm.BGRToRGB(bgr)
命令参数: bgr: 数值型或字符串, BGR格式的颜色,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:返回转换后的RGB格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.BGRToRGB("FF00AA")
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.ColorSim 计算颜色相似度
功能说明: 获取两个颜色之间的相似度, 注意两个参数颜色格式必须一致, 可能与按键自带的相似度算法不同
语法格式: 结果 = zm.ColorSim(颜色1, 颜色2)
命令参数: 颜色1: 字符串_或_数值型_或_table, BGR或RGB颜色, 字符串时表示十六进制, 数值时表示十进制, table时格式为{r, g, b}
颜色2: 字符串_或_数值型_或_table, BGR或RGB颜色, 字符串时表示十六进制, 数值时表示十进制, table时格式为{r, g, b}
返回值: 数值型: 返回两个颜色的相似度小数, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.ColorSim("FFFFFF", "000000")
TracePrint zm.ColorSim("FFFFFF", "FFFFFF")
TracePrint zm.ColorSim("FFFFFF", "EEEEEE")
备注: 可能与按键图色的相似度算法不同
V3.1832: 加入命令
命令名称: zm.ColorToHSV 分解HSV颜色
功能说明: 分解HSV颜色至H、S、V三个分量中。
语法格式: 结果 = zm.ColorToHSV(HSV[, 返回表])
命令参数: HSV: 字符串, HSV颜色,格式为“H.S.V”。
返回表: table, 可选参数,返回分解保存的表。
返回值: table:返回分解后的结果,可以通过键名h、s、v查看,也可以通过下标0、1、2查看。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.ColorToHSV("100.20.30")
TracePrint t(0), t(1), t(2)
TracePrint t["h"], t["s"], t["v"]
备注: V1.1720: 加入命令
V1.1813: 修复H结果未取整数问题, 感谢`学员2123`反馈
命令名称: zm.ColorToRGB 分解RGB颜色
功能说明: 分解RGB颜色至R、G、B三个分量中。
语法格式: 结果 = zm.ColorToRGB(RGB[, 返回表])
命令参数: RGB: 字符串或数值型, RGB颜色,字符串时为十六进制,数值时为十进制。
返回表: table, 可选参数,返回分解保存的表。
返回值: table:返回分解后的结果,可以通过键名r、g、b查看,也可以通过下标0、1、2查看。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.ColorToRGB("11BBDD")
TracePrint t(0), t(1), t(2)
TracePrint t["r"], t["g"], t["b"]
备注: V1.1720: 加入命令
命令名称: zm.GetPicSize 获取图片宽高
功能说明: 获取一张图片的宽度和高度, 支持PNG, BMP, GIF这3种图片格式, 支持附件路径
语法格式: 结果 = zm.GetPicSize(图片路径)
命令参数: 图片路径: 字符串, 图片的所在路径, 支持附件
返回值: table: 成功返回格式{宽度, 高度, “w”:宽度, “h”:高度, “type”:图片类型}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 图片宽高 = zm.GetPicSize("Attachment:紫猫.png") //也可以写本地路径
If 图片宽高 Then
  TracePrint "第1种写法: 宽度=", 图片宽高(0), ", 高度=", 图片宽高(1)
  TracePrint "第2种写法: 宽度=", 图片宽高["w"], ", 高度=", 图片宽高["h"]
Else
  TracePrint "获取失败"
End If
备注: V3.1831: 加入命令
命令名称: zm.HSVToRGB HSV转RGB
功能说明: 将HSV颜色转换成RGB颜色。
语法格式: 结果 = zm.HSVToRGB(HSV[, 是否BGR])
命令参数: HSV: 字符串, HSV颜色,格式为“H.S.V”。
是否BGR: 布尔型, 可选, true表示返回BGR颜色, false表示返回RGB颜色, 省略默认为false
返回值: 字符串:返回十六进制的颜色,格式由参数2决定。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HSVToRGB("100.10.20")
备注: V1.1720: 加入命令
命令名称: zm.IsDisplayDead 是否卡屏
功能说明: 获取指定范围时间内是否出现卡屏, 画面不变化的情况, 如果画面有变化则立即返回
语法格式: 结果 = zm.IsDisplayDead(x1, y1, x2, y2, 时长[, 相似度][, 判断间隔])
命令参数: x1: 数值型, 卡屏判断范围左上角x坐标
y1: 数值型, 卡屏判断范围左上角y坐标
x2: 数值型, 卡屏判断范围右下角x坐标
y2: 数值型, 卡屏判断范围右下角y坐标
时长: 数值型, 限时判断时长, 单位毫秒
相似度: 数值型, 可选, 画面变化相似度, 省略默认为`0.8`
判断间隔: 数值型, 可选, 每次对比判断的间隔毫秒, 必须大于1, 省略默认为`10`
判断模式: 数值型, 可选, 如果判断不准确, 可以更换模式, -1为快速模式, -2为精准模式, 省略默认为`-1`
返回值: 布尔型: 画面有变化则立即返回false, 画面一直没有变化则返回true, 出错返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//在5秒内判断屏幕100,100,200,200范围是否卡屏
Dim isDead = zm.IsDisplayDead(100,100,200,200,5000)
If isDead Then
    TracePrint "出现卡屏了"
Else
    TracePrint "没有卡屏"
End If
备注: V3.1832: 加入命令
V3.1837: 加入判断间隔时间参数, 降低CPU占用
V3.1849: 支持超级缩放
V3.1852: 加入了精准模式功能
命令名称: zm.RGBToBGR RGB转BGR
功能说明: RGB格式颜色转换成BGR格式颜色
语法格式: 结果 = zm.RGBToBGR(RGB)
命令参数: RGB: 数值型或字符串, RGB格式的颜色,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:返回转换后的BGR格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.RGBToBGR("FF00AA")
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.RGBToColor 合成RGB颜色
功能说明: 合成三个RGB颜色分量到十六进制RGB字符串中
语法格式: 结果 = zm.RGBToColor(r, g, b)
命令参数: r: 数值型或字符串, 红色分量,数值型时表示十进制,字符串时表示十六进制。
g: 数值型或字符串, 绿色分量,数值型时表示十进制,字符串时表示十六进制。
b: 数值型或字符串, 蓝色分量,数值型时表示十进制,字符串时表示十六进制。
返回值: 字符串:合成后的RGB格式颜色
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim c = zm.RGBToColor(10,20,30)
TracePrint c
备注: V1.1720: 加入命令
命令名称: zm.RGBToHSV RGB转HSV
功能说明: 将RGB颜色转换成HSV颜色。
语法格式: 结果 = zm.RGBToHSV(RGB[, 是否BGR])
命令参数: RGB: 字符串或数值型, RGB颜色,字符串时是十六进制,数值时是十进制。
是否BGR: 布尔型, 可选, true表示参数1格式为BGR颜色, false表示参数1为RGB颜色, 省略默认为false
返回值: 字符串:返回“H.S.V”格式的颜色。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RGBToHSV("102030")
备注: V1.1720: 加入命令
命令名称: zm.CheckForUpdates 检查插件更新
功能说明: 检查紫猫插件是否有新版,并输出显示。
语法格式: 结果 = zm.CheckForUpdates()
命令参数:
返回值: 布尔型:未发现新版返回false,发现新版或检查失败返回true。
脚本例子:
复制代码
$lizi
备注:
命令名称: zm.CollectGarbage 清理脚本内存
功能说明: Lua的垃圾回收机制接口, 原型是collectgarbage()函数, 可通过第一个参数实现不同的操作, 默认为释放脚本内存功能
语法格式: 结果 = zm.CollectGarbage([操作类型[, 附加参数]])
命令参数: 操作类型: 字符串, 可选, 省略默认为执行一个完整的垃圾回收周期, 详细请百度搜索`lua collectgarbage`
附加参数: 字符串, 可选, 改变回收步骤周期等, 详细请百度搜索`lua collectgarbage`
返回值: 数值型: 返回执行结果, 由参数1决定返回内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint "当前脚本占用内存", zm.GetScriptMemory(), "kb"

Dim a = {"紫猫", "学院", "https://zimaoxy.com"}
TracePrint "创建数组后占用内存", zm.GetScriptMemory(), "kb"

a = Null
TracePrint "删除数组后占用内存", zm.GetScriptMemory(), "kb"

zm.CollectGarbage()

TracePrint "执行清理内存后占用内存", zm.GetScriptMemory(), "kb"
备注: 不建议频繁调用, 会降低脚本执行效率, 一般在加载大型资源前调用一次, 例如读取很大的一个文件之类的
V3.1852: 初次加入命令
命令名称: zm.Execute 执行shell命令
功能说明: 执行shell命令,原理是使用Lua的`os.execute()`内部函数实现。
语法格式: 结果 = zm.Execute(shell命令)
命令参数: shell命令: 字符串, 任意有效的shell命令字符串。
返回值: 字符串:返回shell命令输出结果。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//获取所有已装应用列表
TracePrint zm.Execute("ls /data/data")
备注: 该命令非常强大,请谨慎使用,更多shell命令请百度搜索`Andriod Shell`。
V1.1730: 初次加入。
命令名称: zm.GetLuaVersion 获取Lua版本
功能说明: 获取当前lua环境版本。
语法格式: 结果 = zm.GetLuaVersion()
命令参数:
返回值: 字符串:返回当前lua的版本。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetLuaVersion()
备注: V1.1720: 插件加入本命令。
命令名称: zm.GetScriptMemory 获取脚本占用内存
功能说明: 获取当前脚本所占用的内存, 单位kb
语法格式: 结果 = zm.GetScriptMemory()
命令参数:
返回值: 数值型: 返回当前脚本所占内存容量大小, 单位kb
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetScriptMemory()        //返回当前内存大小
备注: V3.1852: 初次加入命令
命令名称: zm.GetVersion 获取插件版本
功能说明: 获取当前紫猫插件版本。
语法格式: 结果 = zm.GetVersion()
命令参数:
返回值: 字符串:返回当前紫猫插件的版本号。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetVersion()
备注: V1.1720: 插件加入本命令。
命令名称: zm.OpenURL 打开网页
功能说明: 使用默认浏览器打开网页, 支持网址包含&字符, 支持IOS
语法格式: 结果 = zm.OpenURL(网址)
命令参数: 网址: 字符串, 待打开的网址
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.OpenURL "zimao.vip" //访问紫猫学院官网
备注: V1.1802: 加入命令
V2.1829: 函数名由 `zm.OpenWeb()`改为`zm.OpenURL`, 并支持IOS
V3.1852: 解决网址不支持`%`字符的问题
命令名称: zm.Type 获取数据类型
功能说明: 获取参数的数据类型。
语法格式: 结果 = zm.Type(数据)
命令参数: 数据: 任意类型, 等待获取数据类型的参数。
返回值: 字符串:返回以下几种可能值: “null”(一个字符串,而不是 null 值), “number”, “string”, “boolean”, “table”, “function”, “thread”, “userdata”。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.Type(null)
TracePrint zm.Type(345911220)
TracePrint zm.Type("紫猫")
TracePrint zm.Type({1,2,3})
TracePrint zm.Type(true)
备注: 如果你要判断是否可以转为数值类型,请使用 isnumeric
V1.1723: 初次加入
命令名称: zm.VarInfo 获取参数信息
功能说明: 获取所有参数的数据类型、长度、值,通常配合按键自带的TracePrint命令调试输出使用,除了普通变量输出外,还支持数组与表的直接输出。
语法格式: 结果 = zm.VarInfo(…)
命令参数: 参数: 任意类型, 要获取信息的参数,支持多个参数。
返回值: 字符串:返回每个参数信息合成的字符串,格式如下“【数据类型 长度】值,【数据类型 长度】值…”。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫":345911220,"学院":{"正在", "招生中"},"欢迎加入"}
Dim b = "123", c = 123, d = true, e
TracePrint zm.VarInfo(a,b,c,d,e)
备注: zm.traceprint 相比,缺少了调试输出功能,但是可以直接使用TracePrint命令输出更加灵活。
V1.1723: 初次加入
V2.1826: 优化返回字符串长度, 最长255, 以保证`TracePrint()`函数能正常输出显示信息
命令名称: zm.ThreadStatus 获取线程状态
功能说明: 获取多线程的状态,例如运行中,被取消了等等。
语法格式: 结果 = zm.ThreadStatus(线程ID)
命令参数: 线程ID: userdata, 启动线程后的返回值。
返回值: 字符串:有以下几种值

返回 | 解释
—|—
pending | 未启动
running | 正在运行中
done | 正常结束了
waiting | 等待
cancelled | 被强制终止了
error | 出错了

脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ThreadID
ThreadID = Thread.Start(threadA)
For 3
    TracePrint zm.ThreadStatus(ThreadID)
    Delay 1000
Next
Thread.Stop ThreadID
For 3
    TracePrint zm.ThreadStatus(ThreadID)
    Delay 1000
Next

Sub threadA()
    For 5
        TracePrint "执行多线程中..."
        Delay 1000
    Next
End Sub
备注: V1.1724: 初次加入
命令名称: zm.ThreadWait 等待线程
功能说明: 暂停当前线程,等待指定线程执行完毕或超时,与 thread.wait 相比多了超时参数。
语法格式: 结果 = zm.ThreadWait(线程ID[, 超时时间])
命令参数: 线程ID: userdata, 启动线程后的返回值。
超时时间: 数值型, 可选,等待超时时间,单位毫秒,省略默认为null,表示不限时。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ThreadID
ThreadID = Thread.Start(threadA)
zm.ThreadWait ThreadID, 2
For 3
    TracePrint zm.ThreadStatus(ThreadID)
    Delay 1000
Next

Sub threadA()
    For 5
        TracePrint "执行多线程中..."
        Delay 1000
    Next
End Sub
备注: V1.1738: 加入命令
命令名称: zm.SQLiteAddField 追加SQLite3字段
功能说明: 追加SQLite3数据表的字段名
语法格式: 结果 = zm.SQLiteAddField(数据库路径, 表名, 字段名)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
表名: 字符串, 要创建的数据表名
字段名: 表, 要追加的字段名,后面可跟数据类型,例如{“id INTEGER”}, 暂时只支持一次添加一个字段
返回值: 布尔值:成功返回true,失败返回false
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteCreateTbl(GetSdcardDir() & "/zimao.db", "student", {"id INTEGER","name TEXT"})
TracePrint ret

ret = zm.SQLiteAddField(GetSdcardDir() & "/zimao.db", "student", {"age INTEGER"})
TracePrint ret
备注: 若数据库不存在或字段名已存在, 则返回false
V1.1745: 加入命令
命令名称: zm.SQLiteCreateTbl 创建SQLite3数据表
功能说明: 创建SQLite3数据库的数据表,若数据库文件不存在,则自动创建。
语法格式: 结果 = zm.SQLiteCreateTbl(数据库路径, 表名, 字段名)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
表名: 字符串, 要创建的数据表名
字段名: 表, 要创建的字段名,后面可跟数据类型,例如{“id INTEGER”,”name TEXT”}
返回值: 布尔值:成功返回true,失败返回false
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteCreateTbl(GetSdcardDir() & "/zimao.db", "student", {"id INTEGER","name TEXT"})
TracePrint ret
备注: V1.1738: 加入命令
命令名称: zm.SQLiteDropTbl 删除SQLite3数据表
功能说明: 删除SQLite3数据库的数据表。
语法格式: 结果 = zm.SQLiteDropTbl(数据库路径, 表名)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
表名: 字符串, 要删除的数据表名
返回值: 布尔值:成功返回true,失败返回false
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteDropTbl(GetSdcardDir() & "/zimao.db", "student")
TracePrint ret
备注: V1.1738: 加入命令
命令名称: zm.ArrayInsert 插入数组元素
功能说明: 在一维数组的指定位置插入元素。
语法格式: 数组 = zm.ArrayInsert(一维数组, 待插入值[, 下标位置[, 是否传值调用]])
命令参数: 一维数组: 数组型, 原一维数组。
待插入值: 任意类型, 待插入到数组中的值。
下标位置: 数值型, 可选参数,表示插入的下标位置,省略默认为追加到数组末尾。
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回插入元素后的一维数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫", "学院"}
zm.ArrayInsert a, "编程", 1
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
V1.1720: 加入命令
V1.1739: 加入传值调用参数
命令名称: zm.ArrayRemove 删除数组元素
功能说明: 移除一维数组的某个下标元素。
语法格式: 数组 = zm.ArrayRemove(一维数组, 下标位置[, 是否传值调用])
命令参数: 一维数组: 数组型, 原一维数组。
下标位置: 数值型, 要删除元素的下标位置
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回删除指定元素后的数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫", "编程", "学院"}
zm.ArrayRemove a, 1
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
V1.1720: 加入命令
V1.1739: 加入传值调用参数
命令名称: zm.ArrayRemoveDuplicate 数组去重
功能说明: 删除一维数组中的重复成员值
语法格式: 数组 = zm.ArrayRemoveDuplicate(一维数组[, 是否忽略大小写[, 是否传值调用]])
命令参数: 一维数组: 数组型, 原一维数组。
是否忽略大小写: 布尔型, 可选参数,true为忽略大小写,false为不忽略大小写,省略默认为false。
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回删除重复成员后的数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫猫", "编程", "学院", "紫猫", 2, 0, 1, 2}
zm.ArrayRemoveDuplicate a
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
V1.1750: 加入命令
V1.1803: 去重后顺序不变
命令名称: zm.ArrayReplace 替换数组元素
功能说明: 替换一维数组中的指定元素内容, 错误返回null
语法格式: 结果 = zm.ArrayReplace(一维数组, 查找内容, 替换内容[, 是否模糊搜索[, 是否忽略大小写[, 替换数量]]])
命令参数: 一维数组: 数组型, 被查找的一维数组。
查找内容: 任意类型, 要查找的内容,请注意数据类型。
替换内容: 任意类型, 替换后内容,请注意数据类型。
是否模糊搜索: 布尔型, 可选参数,true为模糊匹配搜索,false为完整匹配搜索,省略默认为false。
是否忽略大小写: 布尔型, 可选参数,true为忽略大小写,false为不忽略大小写,省略默认为false。
替换数量: 数值型, 可选参数,-1为全部替换, 其他为替换次数, 省略默认为-1。
返回值: 数组型:返回替换后的数组。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {"紫猫", "老师", "QQ是多少"}
Dim tt = zm.ArrayReplace(t, "QQ", "345911220", true)

For i = 0 To UBOUND(tt)
	TracePrint tt(i)
Next
备注: V1.1820: 加入命令
命令名称: zm.ArraySearch 搜索数组元素
功能说明: 搜索一维数组的成员下标,根据返回个数参数的值决定返回内容。
语法格式: 结果 = zm.ArraySearch(一维数组, 搜索内容[, 是否模糊搜索[, 是否忽略大小写[, 返回个数]]])
命令参数: 一维数组: 数组型, 被查找的一维数组。
搜索内容: 任意类型, 要查找的内容,请注意数据类型。
是否模糊搜索: 布尔型, 可选参数,true为模糊匹配搜索,false为完整匹配搜索,省略默认为false。
是否忽略大小写: 布尔型, 可选参数,true为忽略大小写,false为不忽略大小写,省略默认为false。
返回个数: 数值型, 可选参数,null为返回第一个下标,0为返回所有下标数组,其他数值为返回该个数下标数组,省略默认为null。
返回值: 返回个数参数 | 返回值数据类型 | 返回值解释
——-|———|——
null | 数值型 | 返回找到的第一个下标,没找到返回-1
0 | 数值型数组 | 返回找到的所有下标,没找到返回长度-1的数组
其他大于0的数值 | 数值型数组 | 返回找到的指定个数下标数组,没找到返回长度-1的数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"Hello", "紫猫", "编程", "学院", "Hello"}

Dim index = zm.ArraySearch(a, "编程")
TracePrint index '返回数值2

index = zm.ArraySearch(a, "he", true)
TracePrint index '返回数值-1

index = zm.ArraySearch(a, "he", true, true)
TracePrint index '返回数值0

Dim iArr = zm.ArraySearch(a, "He", true, true, 0)
TracePrint zm.VarInfo(iArr) '返回数值型数组{0, 4}
备注: 目前仅支持一维数组。
V1.1720: 加入命令
命令名称: zm.ArraySort 数组元素排序
功能说明: 对一维数组进行排序,数组元素的数据类型必须一致。
语法格式: 结果 = zm.ArraySort(一维数组[, 是否降序[, 是否转数值[, 是否传值调用]]])
命令参数: 一维数组: 数组型, 待排序的数组。
是否降序: 布尔型, 可选参数,是否按降序排序,省略默认为false。
是否转数值: 布尔型, 可选参数,是否将数组元素转换成数值型,省略默认为false。
是否传值调用: 布尔型, 可选参数,为true时修改原数组,false不修改,省略默认false。
返回值: 数组型:返回排序后的数组,也可使用参数做返回值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {1, 0, 2, 4, 3, 8, 5, 9, 7, 6}

zm.ArraySort a
TracePrint zm.VarInfo(a)

zm.ArraySort a, true
TracePrint zm.VarInfo(a)
备注: 目前仅支持一维数组。
如果转数值失败会出错。
V1.1720: 加入命令
V1.1739: 加入传值调用参数
命令名称: zm.Clone 超级克隆
功能说明: 除了可以克隆数组外,还可以克隆表(table),支持深层嵌套的表。
语法格式: 结果 = zm.Clone(原表)
命令参数: 原表: 数组或表, 准备被克隆的数组或者表。
返回值: 表:克隆后的独立数组或表。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 表a, 表b, 表c
//对表a进行赋值
表a = {"姓名":"紫猫", "职业":"教师", "QQ":345911220}

//使用等号将表a赋值给表b
表b = 表a

//使用zm.Clone将表a克隆给表c
表c = zm.Clone(表a)

//分别改变3个表的一个键值
表a["姓名"] = "紫猫学院"
表b["职业"] = "编程教学"
表c["QQ"] = "欢迎加入"

//输出3张表的键值
TracePrint "表a键值:", 表a["姓名"], 表a["职业"], 表a["QQ"]
TracePrint "表b键值:", 表b["姓名"], 表b["职业"], 表b["QQ"]
TracePrint "表c键值:", 表c["姓名"], 表c["职业"], 表c["QQ"]
备注: 只克隆数组或表的值,不复制地址,与 clone 相比,多了支持表的深层克隆。
V1.1722: 插件加入本命令
命令名称: zm.PosExclude 排除指定范围坐标
功能说明: 在二维坐标数组中排除指定范围的坐标, 支持圆形范围和矩形范围
语法格式: 结果 = zm.PosExclude(原坐标数组, x1, y1[, 半径或x2[, y2]])
命令参数: 原坐标数组: table, 等待处理的坐标数组, 格式为{ {x,y},{x,y},{xy},…}, 兼容超级图色里的返回找到所有坐标格式
x1: 数值型, 表示左上角x坐标或圆心x坐标
y1: 数值型, 表示左上角y坐标或圆心y坐标
半径或x2: 数值型, 可选, 当不填写参数y2时, 表示圆心范围的半径, 当填写参数y2时表示矩形右下角x坐标
y2: 数值型, 可选, 矩形右下角y坐标
返回值: 坐标数组, table: 得到排除后剩下的坐标
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//以圆形15,15, 半径10排除坐标, 最终得到{{30,40}}
Dim t1 = zm.PosExclude({{10,20},{30,40}}, 15, 15, 10)

//以范围5,5,25,25排除坐标, 最终得到{{30,40}}
Dim t2 = zm.PosExclude({{10,20},{30,40}}, 5, 5, 25, 25)
备注: 常用于超级图色返回所有坐标的结果处理
V2.1829: 加入命令
V3.1902: 修复返回不正确问题
命令名称: zm.PosInclude 获取包含范围坐标
功能说明: 在二维坐标数组中获取包含范围的坐标, 支持圆形范围和矩形范围
语法格式: 结果 = zm.PosInclude(原坐标数组, x1, y1[, 半径或x2[, y2]])
命令参数: 原坐标数组: table, 等待处理的坐标数组, 格式为{ {x,y},{x,y},{xy},…}, 兼容超级图色里的返回找到所有坐标格式
x1: 数值型, 表示左上角x坐标或圆心x坐标
y1: 数值型, 表示左上角y坐标或圆心y坐标
半径或x2: 数值型, 可选, 当不填写参数y2时, 表示圆心范围的半径, 当填写参数y2时表示矩形右下角x坐标
y2: 数值型, 可选, 矩形右下角y坐标
返回值: 坐标数组, table: 得到包含指定范围的坐标
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//以圆形15,15, 半径10获取坐标, 最终得到{{10,20}}
Dim t1 = zm.PosInclude({{10,20},{30,40}}, 15, 15, 10)

//以范围5,5,25,25获取坐标, 最终得到{{10,20}}
Dim t2 = zm.PosInclude({{10,20},{30,40}}, 5, 5, 25, 25)
备注: 常用于超级图色返回所有坐标的结果处理
V2.1829: 加入命令
V3.1902: 修复返回不正确问题
命令名称: zm.PosSort 坐标排序
功能说明: 对二维坐标数组按远近进行排序, 支持升序, 降序
语法格式: 结果 = zm.PosSort(坐标数组[, x, y][, 是否降序])
命令参数: 坐标数组: table, 等待排序的坐标数组, 格式为{ {x,y},{x,y},{xy},…}, 传址调用, 兼容超级图色里的返回找到所有坐标格式
x: 数值型, 可选, 表示用于比较远近的x坐标, 省略默认为0
y: 数值型, 可选, 表示用于比较远近的y坐标, 省略默认为0
是否降序: 布尔型, 可选, 填写true表示从远到近, 填写false表示从近到远, 省略为false
返回值: 坐标数组, table: 得到排序后的坐标数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//按照与坐标0,0的远近升序, 最终得到{{10,20},{30,25}}
Dim t1 = zm.PosSort({{30,25},{10,20}}) 

//按照与坐标0,0的远近降序, 最终得到{{30,25},{10,20}}
Dim t2 = zm.PosSort({{30,25},{10,20}}, true)

//按照与坐标15,15的远近升序, 最终得到{{10,20},{30,40}}
Dim t3 = zm.PosSort({{10,20},{30,40}}, 15, 15)
备注: 常用于超级图色返回所有坐标的结果处理
V2.1829: 加入命令
命令名称: zm.TableClear 清空表
功能说明: 将一个数组或者table表清空所有成员
语法格式: 结果 = zm.TableClear(表)
命令参数: 表: 表, 待清空的表
返回值: 表: 成功返回长度-1的表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {1, 2, "a":{3, 4}}
Dim tt = zm.TableClear(t)

TracePrint zm.VarInfo(t)
TracePrint zm.VarInfo(tt)
备注: V2.1826: 加入此命令, 注意参数属于传址引用
命令名称: zm.TableUnpack 数组解包
功能说明: 返回传入参数数组的所有元素, 原型是Lua中的table.unpack(), 目前手机版变量赋值只能接收一个元素, 但可选参数的函数命令可以接收多个元素, 详见示例
语法格式: 结果 = zm.TableUnpack([数组, …][, 起始[, 终止]])
命令参数: 数组: table, 待处理的数组, 支持传入多个数组
起始: table, 可选, 截取表的起始位置, 从1开始计算, 省略默认为1
终止: table, 可选, 截取表的终止位置, 从1开始计算, -1表示最后一个元素位置, 省略默认为-1
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {"a":"hello", 345911220, true, "紫猫"}
//数组tt只能接受第一个元素, 因为按键语法不支持多个变量返回值
Dim tt = zm.TableUnpack(t)
TracePrint tt

//可以打印输出所有返回值, 因为TracePrint支持多个可选参数
//没有显示键名a的元素, 因为只支持数组内容部分
TracePrint zm.TableUnpack(t)

//可以利用{}语法合并两个数组元素到新的数组中
Dim t1 = {1, 2, 3}
Dim newT = {zm.TableUnpack(t, t1)}
TracePrint zm.VarInfo(newT)

//可以解决超级多点找色或多点比色参数过长问题
Dim 颜色1 = {"0DD200","4|2|FFFFFF,3|7|211003,27|1|1592FF"}
Dim 颜色2 = {"123456","40|27|FFFFFF,31|5|211003"}

//下面这两句代码实现效果完全相同
zm.FindMultiColor zm.TableUnpack(颜色1, 颜色2), "显示"
zm.FindMultiColor "0DD200","4|2|FFFFFF,3|7|211003,27|1|1592FF","123456","40|27|FFFFFF,31|5|211003","显示"
备注: V3.1835: 初次加入
命令名称: zm.FileBytes 获取文件字节大小
功能说明: 获取文件的字节大小
语法格式: 结果 = zm.FileBytes(文件路径)
命令参数: 文件路径: 字符串, 要获取大小的文件路径
返回值: 数值型: 返回文件的字节(b)大小
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, "欢迎加入紫猫学院"

Dim b = zm.FileBytes(path)

TracePrint "文件字节大小为:", b
备注: 1pb=1024tb, 1tb=1024gb, 1gb=1024mb, 1mb=1024kb, 1kb=1024b
V1.1818: 加入命令
命令名称: zm.FileDeleteLine 删除指定行文本
功能说明: 在一个文本文件中删除指定一行内容, 支持倒数行数
语法格式: 结果 = zm.FileDeleteLine(文件路径, 指定行)
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示删除第几行内容, 负数为倒数第几行内容
返回值: 表: 返回删除后的文本数组, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院","紫猫老师QQ: 345911220", "学院官网: zimao.vip"}

Dim txts1 = zm.FileDeleteLine(path, 1)
TracePrint zm.VarInfo(txts1)

Dim txts2 = zm.FileDeleteLine(path, -1)
TracePrint zm.VarInfo(txts2)
备注: V1.1818: 加入命令
命令名称: zm.FileEncode 获取文件编码
功能说明: 获取一个文件的编码, 可以用于 zm.fileinit 等命令, 目前仅支持`UTF-8`和`中文编码`(兼容gb2312等)
语法格式: 结果 = zm.FileEncode(文件路径[, 是否设置编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
是否设置编码: 布尔型, 可选, 是否将获取的编码设置为File系列命令的默认编码, 省略默认false
返回值: 字符串: 成功返回`”utf-8″`或`”gb18030″`, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim code = zm.FileEncode("/sdcard/测试编码文件.txt", True)
If code Then
  TracePrint "得到并设置文件编码为: ", code
Else
  TracePrint "获取编码失败"
End If
备注: 本命令目前仅支持`中文`和`utf-8`两种编码, 脚本只关心读取结果不出现乱码, 不在乎正确编码
V3.1832: 加入命令
V3.1837: 由`zm.FileGetEncode()`改名为`zm.FileEncode()`, 且加入是否设置编码可选参数
命令名称: zm.FileInit 初始化设置File参数
功能说明: 初始化设置File系列命令的默认参数内容, 对绝大多数File系列命令有效
语法格式: 结果 = zm.FileInit(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如填写`{“encode”:”电脑”}`可解决电脑文件乱码问题, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
encode | “utf-8” | 字符串 | 文件编码, 填写`{“encode”:”电脑”}`可解决电脑文件乱码问题
replacepath | {“^/storage/emulated/0/”:”/sdcard/”} | 表 | 解决路径无权限问题, 替换指定路径

返回值: 表: 返回设置成功后的默认参数表
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.FileInit {"encode":"电脑"}

//在电脑上新建文件, 写入几个中文内容后, 传入设备中读取
Dim path = "/sdcard/紫猫学院电脑文件.txt"

zm.FileWriteAppend path, "\r\n", "听说写入电脑文件的内容会乱码?"

Dim txt = zm.FileRead(path)

TracePrint "不会乱码的内容如下:", txt
备注: 命令原理是内部对字符进行了转码, 电脑对应的是gb18030, 如果你的文件是其他编码格式的, 可以自行填写对应编码
V1.1818: 加入命令
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
V3.1852: 加入 `replacepath:{“^/storage/emulated/0/”:”/sdcard/”}` 属性, 解决部分路径无权限问题
命令名称: zm.FileLinesNumber 获取文件总行数
功能说明: 获取文本文件的总行数
语法格式: 结果 = zm.FileLinesNumber(文件路径)
命令参数: 文件路径: 字符串, 要操作的文件路径
返回值: 数值型: 返回文本文件的总行数
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"第一行内容", "第二行内容", "第三行内容"}

Dim lines = zm.FileLinesNumber(path)

TracePrint "总行数:", lines
备注: V1.1818: 加入命令
命令名称: zm.FileRead 读取文本文件
功能说明: 读取文件所有内容, 支持设置文件编码
语法格式: 结果 = zm.FileRead(文件路径[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 字符串: 返回该文件的所有文本内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流QQ群: 7333555"}

Dim txt = zm.FileRead(path)

TracePrint "读取到的内容为:", txt

txt = zm.FileRead("/sdcard/电脑文件.txt", "电脑")

TracePrint "读取到的内容为:", txt
备注: 文件编码参数与 zm.fileinit 中的`”encode”:”utf-8″`参数相同
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReadBinary 读取二进制文件
功能说明: 以二进制读取文件内容
语法格式: 结果 = zm.FileReadBinary(文件路径)
命令参数: 文件路径: 字符串, 要操作的文件路径
返回值: 字符串: 返回读取到的二进制内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 读取路径 = "/sdcard/截图1.png"
Dim 写入路径 = "/sdcard/截图2.png"
SnapShot 读取路径

Dim bin = zm.FileReadBinary(读取路径)

zm.FileWriteBinary 写入路径, bin
备注: V1.1818: 加入命令
命令名称: zm.FileReadBinaryBase64 以Base64读取二进制文件
功能说明: 读取文件二进制内容, 并转为Base64编码, 受 zm.initbase64 影响, 失败返回null
语法格式: 结果 = zm.FileReadBinaryBase64(路径)
命令参数: 路径: 字符串, 要读取的文件路径
返回值: 字符串: 返回读取的Base64结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim b64 = zm.FileReadBinaryBase64("/sdcard/紫猫.png")

zm.FileWriteBinaryBase64("/sdcard/新紫猫.png", b64)
备注: V1.1745: 加入命令
V1.1818: `zm.ReadFileBase64()` 改为 `zm.FileReadBinaryBase64()`
命令名称: zm.FileReadForm 读取文本文件表格
功能说明: 按指定分隔符读取文件所有内容保存到二维数组中, 支持设置文件编码
语法格式: 结果 = zm.FileReadForm(文件路径, 分隔符[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
分隔符: 字符串_或_数值型, 字符串表示每行文本中的分隔符, 数值型表示按长度分隔
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 二维数组: 返回每一行被分隔后的二维数组文本
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"帐号1====密码1====大区1", "帐号2====密码2====大区2", "帐号3====密码3====大区3"}

Dim txts = zm.FileReadForm(path, "====")
TracePrint zm.VarInfo(txts)

For Each v In txts
	TracePrint v[1], v[2], v[3]
Next
备注: 参数分隔符与 zm.split 相同
若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReadLine 读取指定行文本
功能说明: 读取指定行文本内容, 支持倒数行数, 超出行数返回null, 支持设置文件编码
语法格式: 结果 = zm.FileReadLine(文本路径, 指定行[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示读取第几行内容, 负数为倒数第几行内容
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 字符串: 返回指定行的文本内容, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流QQ群: 7333555"}

Dim txt = zm.FileReadLine(path, 1)
TracePrint "读取到的内容为:", txt

txt = zm.FileReadLine(path, -1)
TracePrint "读取到的内容为:", txt

txt = zm.FileReadLine(path, 10)
TracePrint "读取到的内容为:", txt
备注: 读取超出最大行或最小行将会返回`null`
若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReadLines 读取文本数组
功能说明: 读取文件所有内容保存到一维数组中, 支持设置文件编码
语法格式: 结果 = zm.FileReadLines(文件路径[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
文件编码: 字符串, 可选, 填写”电脑”可以解决电脑文件乱码问题, 也可以填写`”auto”`实现自动识别文件编码, 但是会降低读写速度, 省略默认为初始化编码
返回值: 一维数组: 返回文件每一行内容保存到一维数组中
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流QQ群: 7333555"}

Dim txt = zm.FileReadLines(path)
For i = 0 To UBOUND(txt)
	TracePrint txt(i)
Next
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReplaceLine 替换指定行文本
功能说明: 替换指定行文本, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileReplaceLine(文件路径, 指定行, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示替换第几行内容, 负数为倒数第几行内容
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 返回替换后的每一行文本数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"
zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "QQ群号是多少?"}

Dim txts = zm.FileReplaceLine(path, -1, "免费交流群: 7333555")

TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
V1.1818: 加入命令
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileWrite 覆盖写入文本
功能说明: 覆盖写入文本内容到文件中, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileWrite(文件路径, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 成功返回文本数组, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, "欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"
TracePrint zm.VarInfo(zm.FileReadLines(path))

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}
TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
注意本命令是覆盖写入, 即会清空文件所有内容, 重新写入新的内容
V1.1818: 加入命令
命令名称: zm.FileWriteAppend 追加写入文本
功能说明: 追加写入文本内容到文件中, 写完自动换行, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileWriteAppend(文件路径, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 布尔值: 成功返回`true`, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

zm.FileWriteAppend path, "追加1"

zm.FileWriteAppend path, "追加2"

TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
注意本命令是追加写入, 即保留原内容, 在末尾追加新内容, 写完会自动换行
V1.1818: 加入命令
命令名称: zm.FileWriteBinary 写入二进制文件
功能说明: 覆盖写入二进制到文件中
语法格式: 结果 = zm.FileWriteBinary(文件路径, 二进制文本)
命令参数: 文件路径: 字符串, 要操作的文件路径
二进制文本: 字符串, 待写入的二进制内容
返回值: 布尔值: 成功返回true, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 读取路径 = "/sdcard/截图1.png"
Dim 写入路径 = "/sdcard/截图2.png"
SnapShot 读取路径

Dim bin = zm.FileReadBinary(读取路径)

zm.FileWriteBinary 写入路径, bin
备注: V1.1818: 加入命令
命令名称: zm.FileWriteBinaryBase64 覆盖写入Base64解密二进制
功能说明: 将内容进行Base64解密, 并以二进制写入文件中, 受 zm.initbase64 影响, 失败返回null
语法格式: 结果 = zm.FileWriteBinaryBase64(路径, Base64文本)
命令参数: 路径: 字符串, 要写入的文件路径
Base64文本: 字符串, 待解密的Base64文本内容
返回值: 布尔型: 返回是否成功, 出错返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim b64 = zm.FileReadBinaryBase64("/sdcard/紫猫.png")

zm.FileWriteBinaryBase64("/sdcard/新紫猫.png", b64)
备注: V1.1821: 加入命令
命令名称: zm.FileWriteLine 插入指定行文本
功能说明: 追加写入到指定行, 支持 zm.fileinit 默认参数
语法格式: 结果 = zm.FileWriteLine(文件路径, 指定行, …)
命令参数: 文件路径: 字符串, 要操作的文件路径
指定行: 数值型, 表示插入第几行内容, 负数为倒数第几行, 0为末尾新增一行, 不能超出最大行
文本内容: 字符串_或_表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 返回插入后的所有内容一维数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学院.txt"

zm.FileWrite path, {"欢迎加入紫猫学院,", "紫猫老师QQ: 345911220 ", "免费交流群: 7333555"}

zm.FileWriteLine path, 2, "好好学习, 天天向上"

TracePrint zm.VarInfo(zm.FileReadLines(path))
备注: 若需设置文件编码, 请使用 zm.fileinit 进行设置
注意本命令是追加写入, 即保留原内容, 在指定行加入新内容, 原有内容向下移动
V1.1818: 加入命令
V3.1902: 修复插入第一行出错问题
命令名称: zm.RemoveLastTempFile 已失效
功能说明: 从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!

删除由 zm.tempfile 最近一次生成的临时文件

语法格式: 结果 = zm.RemoveLastTempFile()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim p = zm.TempFile()
TracePrint "临时文件路径:", p

File.Write p, "欢迎加入紫猫编程学院"
TracePrint "读取临时文件:", File.Read(p)

//删除上一次的临时文件
zm.RemoveLastTempFile
备注: 从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!
从1.1813版本开始移除本命令, 请勿使用!

V1.1730: 初次加入。
V1.1813: 移除本命令, 请勿使用。

命令名称: zm.FileTemp 生成一个临时文件路径
功能说明: 随机生成一个不重复的临时文件路径名,当你执行写文件等保存文件操作后,才会真正生成文件。
语法格式: 结果 = zm.FileTemp([文件名])
命令参数: 文件名: 字符串, 可选, 指定文件名, 省略默认为随机文件名
返回值: 字符串:返回生成的路径,失败返回null。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim p = zm.FileTemp()
TracePrint "临时文件路径:", p

File.Write p, "欢迎加入紫猫编程学院"
TracePrint "读取临时文件:", File.Read(p)
备注: 该命令是生成路径名,并非真实文件,需要你对该路径执行保存文件之类的操作后才会真正出现文件。
V1.1720: 加入命令
V1.1818: `zm.TempFile()` 改为 `zm.FileTemp()`
命令名称: zm.LTrim 删除前导字符
功能说明: 从左边开始删除指定的字符,直到出现非指定字符为止。
语法格式: 结果 = zm.LTrim(原字符串[, 前导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
前导字符: 字符串, 可选,要删除的字符,省略默认为”\r\n \t”
返回值: 字符串:返回删除前导后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除左边的空格和a
Dim s = zm.LTrim("  abc abc", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.RegExMatch 正则匹配
功能说明: Lua的正则匹配(也叫模式匹配),获取匹配成功的结果并保存到数组中。
语法格式: 结果 = zm.RegExMatch(源字符串, 正则表达式[, 返回表])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,与Javascript或Perl等正则不同,详见 pattern-matching
返回表: 表, 可选参数, 只能填写数据类型为数组的变量, 匹配失败返回最大下标为-1的数组
返回值: 字符串数组:返回匹配成功的结果保存到数组中,失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret() //返回表参数, 可以省略该参数
Dim s = "紫猫老师QQ:345911220, Email:345911220@qq.com"
Dim data = zm.RegExMatch(s, "%d+", ret)
If data then
    For i = 0 to Ubound(data)
        TracePrint "返回结果: " & data(i)
    Next

    //若填写了返回表参数, 则可以取出结果
    For i = 0 to Ubound(ret)
        TracePrint "返回表: " & ret(i)
    Next
Else
    TracePrint "未匹配到数据"
End If
备注: 从1.1750起, 失败返回值由长度-1的数组改为null
V1.1738: 加入命令
V1.1739: 修复`.*`出现死循环的BUG
V1.1750: 失败返回null, 加入返回参数
命令名称: zm.RegExMatchEx 正则子匹配
功能说明: 捕获子匹配结果,并保存到二维数组中。
语法格式: 结果 = zm.RegExMatchEx(源字符串, 正则表达式[, 返回表])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,必须含有子匹配,与Javascript或Perl等正则不同,详见 pattern-matching
返回表: 表, 可选参数, 只能填写数据类型为数组的变量, 匹配失败返回最大下标为-1的数组
返回值: 字符串数组:返回捕获的子匹配结果保存到二维数组中,失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret()
Dim s = "紫猫老师QQ:345911220, Email:345911220@qq.com"
Dim data = zm.RegExMatchEx(s, "QQ:(%d+).-Email:(%w-@%w-%.%w+)", ret
If data then
    For Each v in data
        TracePrint "返回本轮匹配结果:"
        For Each vv in v
            TracePrint vv
        Next
    Next

    //若填写了返回表参数, 则可以取出结果
    For Each v in ret
        TracePrint "返回本轮表的结果:"
        For Each vv in v
            TracePrint vv
        Next
    Next
Else
    TracePrint "未捕获到数据"
End If
备注: 从1.1750起, 失败返回值由长度-1的数组改为null
V1.1738: 加入命令
V1.1739: 修复`.*`出现死循环的BUG
V1.1745: 修复无法获取多个匹配结果的问题
V1.1750: 失败返回null, 加入返回参数
命令名称: zm.RegExMatchExSingle 单个正则子匹配
功能说明: 根据序号捕获子匹配单个结果,若要所有结果请使用 zm.regexmatchex
语法格式: 结果 = zm.RegExMatchExSingle(源字符串, 正则表达式[, 序号])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,必须含有子匹配, 与Javascript或Perl等正则不同, 详见 pattern-matching
序号: 数值型, 可选参数, 返回首个指定序号的子匹配结果, 省略默认为1
返回值: 字符串: 成功返回捕获第一个指定序号的子匹配结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫老师QQ:345911220, Email:345911220@qq.com"
Dim data = zm.RegExMatchExSingle (s, "QQ:(%d+).-Email:(%w-@%w-%.%w+)")
TracePrint "捕获第1个子匹配结果", data

data = zm.RegExMatchExSingle (s, "QQ:(%d+).-Email:(%w-@%w-%.%w+)", 2)
TracePrint "捕获第2个子匹配结果", data
备注: V3.1849: 加入命令
命令名称: zm.RegExMatchSingle 单个正则匹配
功能说明: Lua的正则匹配(也叫模式匹配),获取匹配成功的指定结果,若要返回所有结果请使用 zm.regexmatch
语法格式: 结果 = zm.RegExMatchSingle(源字符串, 正则表达式[, 序号])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式,与Javascript或Perl等正则不同,详见 pattern-matching
序号: 数值型, 可选参数, 返回首个指定序号的匹配结果, 省略默认为1
返回值: 字符串:返回匹配成功的指定序号结果,失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫老师QQ:345911220, 公开交流群:7333555"
Dim data
data = zm.RegExMatchSingle(s, "%d+")
TracePrint "第1个结果", data

data = zm.RegExMatchSingle(s, "%d+", 2)
TracePrint "第2个结果", data

data = zm.RegExMatchSingle(s, "%d+", 3)
TracePrint "第3个结果", data
备注: V3.1849: 加入命令
命令名称: zm.RegExReplace 正则替换
功能说明: 对源字符串进行模式匹配并替换内容。
语法格式: 结果 = zm.RegExReplace(源字符串, 正则表达式, 替换内容[, 替换次数])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
正则表达式: 字符串, 匹配模式, 与Javascript或Perl等正则不同, 详见 pattern-matching
替换内容: 字符串或表, 字符串表示替换后的内容; table表示以匹配结果为键名, 从表中查找对应的键值替换
替换次数: 数值型, 可选, 匹配成功后替换的次数, 省略默认为null, 表示全替换
返回值: 字符串:返回模式匹配替换后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫老师QQ:12345"
Dim data = zm.RegExReplace(s, "%d+", "345911220")
TracePrint "替换后结果为:", data
```

```mq 例子2
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = {"name":"紫猫", "QQ":345911220}
Dim s = "姓名:$name, QQ号:$QQ"
Dim data = zm.RegExReplace(s, "$(%w+)", t)
TracePrint "table替换后结果为:", data
备注: V1.1738: 加入命令
命令名称: zm.RTrim 删除后导字符
功能说明: 从右边开始删除指定的字符,直到出现非指定字符为止。
语法格式: 结果 = zm.RTrim(原字符串[, 后导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
后导字符: 字符串, 可选,要删除的字符,省略默认为”\r\n \t”
返回值: 字符串:返回删除后导字符后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除右边的空格和a
Dim s = zm.RTrim("  abc cba ", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.Split 超级分割
功能说明: 按指定分隔符或长度对原内容进行分割, 支持模式匹配, 返回分割后的一维数组。
语法格式: 结果 = zm.Split(原内容, 分隔符[, 模式匹配])
命令参数: 原内容: 字符串, 待分割的原字符串内容
分隔符: 字符串_或_数值型, 当字符串型时表示按此分隔符进行分割数组, 当数值型时表示按此长度进行分割数组
模式匹配: 布尔型, 可选, true表示开启模式匹配, 省略默认为false
返回值: 表: 返回分割后的一维数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//按字符串分割数组
Dim a = zm.Split("1,2,3,4,5", ",")
For i = 0 To UBOUND(a)
	TracePrint a(i)
Next

//按长度分割数组
Dim b = zm.Split("紫猫编程学院", 1)
For i = 0 To UBOUND(b)
	TracePrint b(i)
Next

//按模式匹配分割数组
Dim c = zm.Split("这234句话里45645646有605数字", "%d+", true)
For i = 0 To UBOUND(c)
	TracePrint c(i)
Next
备注: 匹配模式,与Javascript或Perl等正则不同,详见 pattern-matching
V1.1816: 加入命令
命令名称: zm.Trim 删除前后导字符
功能说明: 分别从左右两边开始删除指定的字符,每边直到出现非指定字符为止。
语法格式: 结果 = zm.Trim(原字符串[, 前后导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
前后导字符: 字符串, 可选,要删除的字符,省略默认为”\r\n \t”
返回值: 字符串:返回删除前后导字符后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除右边的空格和a
Dim s = zm.Trim("  abc cba ", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.GetNetworkTime 获取精准网络时间
功能说明: 内置淘宝, 苏宁, qq等多个获取网络时间接口, 优先获取毫秒级的淘宝时间接口
语法格式: 结果 = zm.GetNetworkTime([格式])
命令参数: 格式: 数值型_或_字符串, 可选, 表示返回的格式, 当数值型时, 0表示返回时间戳数值, 1表示返回”年-月-日 时:分:秒”, 2表示返回”年月日时分秒”,$n 当字符串时表示自定义格式化, 与DateTime.Format()的第一个参数格式相同, 省略默认为0
返回值: 数值型_或_字符串: 成功返回时间戳或格式化时间字符串, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.GetNetworkTime()
TracePrint "网络时间戳:", t
备注: getnetworktime 更加精准稳定快速
V3.1832: 加入命令
命令名称: zm.TimeAdd 时间计算
功能说明: 计算时间加减后的数值, 例如一天后的时间, 3年前的时间等, 数值单位由参数3决定
语法格式: 结果 = zm.TimeAdd([时间, ]数值[, 单位])
命令参数: 时间: 数值型_或_字符串, 可选, 待计算的时间, 字符串时支持”2017年7月23日 23:29:31″, “2017-07-23 23:29:38″等格式, 数值时表示时间戳, 省略默认为当前时间
数值: 数值型, 表示要加减的具体数值, 支持正负数
单位: 字符串, 可选, 表示数值的计算单位, 可填写[“年”, “月”, “日”, “天”, “时”, “分”, “秒”]或[“Y”, “m”, “d”, “H”, “M”, “S”], 省略默认为”秒”
返回值: 数值型: 返回加减计算后的时间戳结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//计算15天后的时间日期
TracePrint zm.TimeAdd("2019年8月3日 14:03:26", 15, "日")

//计算当前时间往后20个月的时间
TracePrint zm.TimeAdd(20, "月")
备注: 一个月约为30.4天, 一年为365天
V3.1832: 加入命令
命令名称: zm.TimeDiff 计算时间差
功能说明: 计算时间1减去时间2的时间差, 返回单位以第3个参数为准
语法格式: 结果 = zm.TimeDiff(时间1[, 时间2][, 单位][, 是否取整])
命令参数: 时间1: 数值型_或_字符串, 第1个时间, 字符串时支持”2017年7月23日 23:29:31″, “2017-07-23 23:29:38″等格式, 数值时表示时间戳
时间2: 数值型_或_字符串, 可选, 第2个时间, 字符串时支持”2017年7月23日 23:29:31″, “2017-07-23 23:29:38″等格式, 数值时表示时间戳, 省略默认为当前时间
单位: 字符串, 可选, 表示计算返回的时间单位, 可填写[“年”, “月”, “日”, “天”, “时”, “分”, “秒”]或[“Y”, “m”, “d”, “H”, “M”, “S”], 省略默认为”秒”
是否取整: 布尔型, 可选, 表示返回值是否只保留整数, 省略默认为false
返回值: 数值型: 成功返回两者时间差, 单位由参数3决定, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//计算参数1减去参数2, 返回单位秒数
TracePrint zm.TimeDiff("2019年8月3日 14:03:26", "2018-08-03 22:06:04")

//计算2018-12-01 00:00:00减去当前时间, 返回单位天数, 并取整
TracePrint zm.TimeDiff("2018-12-01", "日", true)
备注: 一个月约为30.4天, 一年为365天
V3.1832: 加入命令
命令名称: zm.Timestamp 转时间戳
功能说明: 将时间格式的字符串转换成时间戳,支持`2017年7月23日 23:29:31`,`2017-07-23 23:29:38`等格式。
语法格式: 结果 = zm.Timestamp([时间])
命令参数: 时间: 字符串, 可选, 任意有效时间格式的字符串, 支持`年-月-日 时:分:秒`等格式, 省略默认为当前时间
返回值: 数值型:返回Unix时间戳,即从1970年1月1日到指定时间的总秒数,失败返回0。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.Timestamp("2017-07-23 23:29:38")
备注: 只要格式是年月日时分秒的顺序,并且每个之间都有分隔字符,即可转换成时间戳。
V1.1730: 初次加入
V3.1832: 参数`时间`改为可选参数, 省略默认为当前时间
命令名称: zm.ConvBase 任意进制转换
功能说明: 2到62进制任意转换。
语法格式: 结果 = zm.ConvBase(原数值, 原进制, 目标进制)
命令参数: 原数值: 数值型或字符串, 待转换的原数值。
原进制: 数值型, 原来的进制,取值2至62。
目标进制: 数值型, 转换的目标进制,取值2至62。
返回值: 字符串:转换后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = zm.ConvBase(100, 2, 10)
TracePrint s '返回4

s = zm.ConvBase(100, 10, 16)
TracePrint s '返回64
备注: 支持2到62进制的任意类型转换,错误进制返回长度为0的字符串。
V1.1813: 加入命令
V2.1826: 为统一编码函数名字规范, 由`zm.BaseConver()`改为`zm.ConvBase()`
命令名称: zm.ConvCoding 转换任意编码
功能说明: 使用iconv进行编码转换, 常用于将gb2312的网页源码转换为utf8编码内容
语法格式: 结果 = zm.ConvCoding(转换内容, 原来编码, 目标编码)
命令参数: 转换内容: 字符串, 待转换的字符串内容
原来编码: 字符串, 转换前的编码, 常见有gb2312, gbk, utf-8等
目标编码: 字符串, 转换后的编码, 常见有gb2312, gbk, utf-8等
返回值: 字符串: 转换成功后的字符串内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//用电脑上的记事本写入一些中文内容后, 将该文件传到手机上测试
Dim 转码前内容 = File.Read("/sdcard/Pictures/文本.txt")
TracePrint 转码前内容
Dim 转码后内容 = zm.ConvCoding(转码前内容, "gb2312", "utf-8")
TracePrint 转码后内容
备注: V1.1813: 插件加入本命令。
命令名称: zm.ConvCP1252ToUTF8 CP1252转UTF8
功能说明: 将CP1252转为UTF8
语法格式: 结果 = zm.ConvCP1252ToUTF8(CP1252码)
命令参数: CP1252码: 字符串, 要转换的CP1252码
返回值: 字符串: 返回UTF8字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//ISO-8859-1里的欧元符号
Dim str1252 = "1\128"
TracePrint str1252
//以UTF8输出欧元符号
Dim strutf8 = zm.ConvCP1252ToUTF8(str1252)
TracePrint strutf8
//UTF8转为CP1252
Dim str1252_2 = zm.ConvUTF8ToCP1252(strutf8)
TracePrint str1252_2
备注: V1.1805: 加入命令
命令名称: zm.ConvUnicodeToUTF16 Unicode转UTF16
功能说明: 将Unicode字符串转为以`\uXXXX`表示的UTF16字符串, 常用于获取emoji代码
语法格式: 结果 = zm.ConvUnicodeToUTF16(unicode值)
命令参数: unicode值: 数值型或字符串, 要转换的Unicode值, 数值型表示十进制, 字符串型表示十六进制
返回值: 字符串: 返回以`\uXXXX`表示的UTF16字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.ConvUnicodeToUTF16("1F601") //显示\ud83d\ude01
TracePrint zm.ConvUnicodeToUTF16(128513) //显示\ud83d\ude01
TracePrint zm.ConvUnicodeToUTF16(&H1F601) //显示\ud83d\ude01
备注: emoji整理网址:
V1.1802: 加入命令
命令名称: zm.ConvUnicodeToUTF8 Unicode转UTF8
功能说明: 将Unicode转为UTF8
语法格式: 结果 = zm.ConvUnicodeToUTF8(unicode值)
命令参数: unicode值: 数值型或字符串, 要转换的Unicode值, 数值型表示十进制, 字符串型表示十六进制
返回值: 字符串: 返回UTF8字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 笑脸 = zm.ConvUnicodeToUTF8(&H1F601)
UI.NewLayout "layout1"
UI.AddTextView "layout1", "emoji", 笑脸
UI.Show "layout1"
TracePrint zm.ConvUTF8ToUnicode(笑脸)
备注: emoji整理网址:
V1.1805: 加入命令
命令名称: zm.ConvUTF8ToCP1252 UTF8转CP1252
功能说明: 将UTF8转为CP1252
语法格式: 结果 = zm.ConvUTF8ToCP1252(UTF8)
命令参数: UTF8: 字符串, 要转换的UTF8字符串
返回值: 字符串: 返回CP1252字符串
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//ISO-8859-1里的欧元符号
Dim str1252 = "1\128"
TracePrint str1252
//以UTF8输出欧元符号
Dim strutf8 = zm.ConvCP1252ToUTF8(str1252)
TracePrint strutf8
//UTF8转为CP1252
Dim str1252_2 = zm.ConvUTF8ToCP1252(strutf8)
TracePrint str1252_2
备注: V1.1805: 加入命令
命令名称: zm.ConvUTF8ToUnicode UTF8转Unicode
功能说明: 将UTF8转为Unicode
语法格式: 结果 = zm.ConvUTF8ToUnicode(UTF8)
命令参数: UTF8: 字符串, 要转换的UTF8
返回值: 数值型: 返回Unicode码
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 笑脸 = zm.ConvUnicodeToUTF8(&H1F601)
UI.NewLayout "layout1"
UI.AddTextView "layout1", "emoji", 笑脸
UI.Show "layout1"
TracePrint zm.ConvUTF8ToUnicode(笑脸)
备注: V1.1805: 加入命令
命令名称: zm.DecodeAES AES解密
功能说明: 对数据进行标准AES解密, 支持AES128,AES196和AES256, 能对通过 zm.encodeaes 加密的结果进行解密还原。
语法格式: 结果 = zm.DecodeAES(密文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待解密的密文内容。
密钥: 字符串, 用于解密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | 128,192,256 | 128 | 数据块
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写,其他模式必填且要有16个字节长度。
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回解密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeAES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-ECB加密结果", s
v = zm.DecodeAES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行AES-ECB解密结果", v

s = zm.EncodeAES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES加密输出Base64结果", s
v = zm.DecodeAES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES解密输出Base64结果", v

s = zm.EncodeAES(text, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-CBC加密结果", s
v = zm.DecodeAES(s, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES-CBC解密结果", v
备注: V1.1723b: 初次加入
V2.1828:
彻底解决加解密出错失败的问题
改为使用封装 https://github.com/somesocks/lua-lockbox 的代码, 不兼容旧版加解密结果!
V3.1831:
修改为标准AES加解密, 注意不兼容上版本的加解密结果!
对密钥长度加入限制
修复解密结果包含`\0`字符的问题
命令名称: zm.DecodeBase64 快速Base64文本解密
功能说明: 对一串文本内容进行快速Base64解密, 可通过 zm.initbase64 设置模式
语法格式: 结果 = zm.DecodeBase64(密文)
命令参数: 密文: 字符串, 待解密的加密内容
返回值: 字符串: 返回Base64解密后的内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 原文 = "紫猫编程学院"
Dim 密文 = zm.EncodeBase64(原文)
TracePrint "Base64加密结果:", 密文

Dim 解密 = zm.DecodeBase64(密文)
If 解密 = 原文 Then 
	TracePrint "解密成功"
Else 
	TracePrint "解密失败"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加解密
文件Base64解密请使用 zm.decodebase64file
V1.1821: 加入命令
命令名称: zm.DecodeBase64File 快速Base64文件解密
功能说明: 对一个文件进行快速Base64解密, 可通过 zm.initbase64 设置模式
语法格式: 结果 = zm.DecodeBase64File(加密文件路径, 解密保存路径)
命令参数: 加密文件路径: 字符串, Base64文件路径, 文件必须存在
解密保存路径: 字符串, 解密文件保存的路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//准备文件
Dim 原文件路径 = GetTempDir() & "紫猫编程学院.txt"
zm.FileWrite 原文件路径, "欢迎加入紫猫学院"

//文件加密
Dim 加密文件路径 = GetTempDir() & "加密.txt"
zm.EncodeBase64File 原文件路径, 加密文件路径
TracePrint "加密后的内容:", zm.FileRead(加密文件路径)

//文件解密
Dim 解密文件路径 = GetTempDir() & "解密.txt"
zm.DecodeBase64File 加密文件路径, 解密文件路径

//读取内容判断加解密是否成功
If zm.FileRead(解密文件路径) = "欢迎加入紫猫学院" Then 
	TracePrint "加解密成功"
Else 
	TracePrint "加解密结果不一致"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加解密
文本Base64解密请使用 zm.decodebase64
V1.1821: 加入命令
命令名称: zm.DecodeDES DES解密
功能说明: 对数据进行标准DES解密, 支持DES和DES3, 可以对 zm.encodedes 结果解密。
语法格式: 结果 = zm.DecodeDES(密文, 密钥[, 高级属性])
命令参数: 密文: 字符串, 待解密的密文内容。
密钥: 字符串, 用于解密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | des,des3 | des | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回解密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "12345678"
Dim s, v
s = zm.EncodeDES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行DES-ECB加密结果", s
v = zm.DecodeDES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行DES-ECB解密结果", v

s = zm.EncodeDES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES加密输出Base64结果", s
v = zm.DecodeDES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES解密输出Base64结果", v

s = zm.EncodeDES(text, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES3-CBC加密结果", s
v = zm.DecodeDES(s, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES3-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.DecodeTEA TEA解密
功能说明: 对数据进行TEA解密, 支持TEA和XTEA, 可以对 zm.encodetea 结果解密。
语法格式: 结果 = zm.DecodeTEA(密文, 密钥[, 高级属性])
命令参数: 密文: 字符串, 待解密的密文内容。
密钥: 字符串, 用于解密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | tea,xtea | tea | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回解密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeTEA(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA-ECB加密结果", s
v = zm.DecodeTEA(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行TEA-ECB解密结果", v

s = zm.EncodeTEA(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA加密输出Base64结果", s
v = zm.DecodeTEA(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行TEA解密输出Base64结果", v

s = zm.EncodeTEA(text, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行XTEA-CBC加密结果", s
v = zm.DecodeTEA(s, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行XTEA-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.DecodeURL URL解码
功能说明: zm.encodeurl 产生的密文进行解密还原。
语法格式: 结果 = zm.DecodeURL(密文)
命令参数: 密文: 字符串, 经过URL编码的字符串内容。
返回值: 字符串:返回URL解码后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim urls = zm.EncodeURL("紫猫")
TracePrint "对紫猫进行URL编码,得到", urls
Dim data = zm.DecodeURL(urls)
TracePrint "对", urls, "进行URL解码,得到", data
备注: +会被转为空格,保留数字、英文和`-_.~`。
仅支持3.2.1版本以上的按键。
V1.1723b: 初次加入
命令名称: zm.EncodeAES AES加密
功能说明: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是美国联邦政府采用的一种区块加密标准。属于对称加密的一种,能通过 zm.decodeaes 进行解密还原, 支持AES128,AES196和AES256。
语法格式: 结果 = zm.EncodeAES(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
密钥: 字符串, 用于加密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | 128,192,256 | 128 | 数据块
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写,其他模式必填且要有16个字节长度。
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回加密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeAES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-ECB加密结果", s
v = zm.DecodeAES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行AES-ECB解密结果", v

s = zm.EncodeAES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES加密输出Base64结果", s
v = zm.DecodeAES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES解密输出Base64结果", v

s = zm.EncodeAES(text, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对明文", text, "使用密钥", pwd, "进行AES-CBC加密结果", s
v = zm.DecodeAES(s, pwd, {"mode":"cbc","iv":"1234567890abcdef"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行AES-CBC解密结果", v
备注: V1.1723b: 初次加入
V2.1828:
彻底解决加解密出错失败的问题
改为使用封装 https://github.com/somesocks/lua-lockbox 的代码, 不兼容旧版加解密结果!
V3.1831:
修改为标准AES加解密, 注意不兼容上版本的加解密结果!
对密钥长度加入限制
修复解密结果包含`\0`字符的问题
命令名称: zm.EncodeBase64 快速Base64文本加密
功能说明: 对一串文本内容进行快速Base64加密, 可通过 zm.initbase64 设置加密模式
语法格式: 结果 = zm.EncodeBase64(原文)
命令参数: 原文: 字符串, 待加密的原文本内容
返回值: 字符串: 返回Base64加密后的内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 原文 = "紫猫编程学院"
Dim 密文 = zm.EncodeBase64(原文)
TracePrint "Base64加密结果:", 密文

Dim 解密 = zm.DecodeBase64(密文)
If 解密 = 原文 Then 
	TracePrint "解密成功"
Else 
	TracePrint "解密失败"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加密
加密后的文本可以用 zm.decodebase64 进行解密
文件Base64加密请使用 zm.encodebase64file
V1.1821: 加入命令
命令名称: zm.EncodeBase64File 快速Base64文件加密
功能说明: 对一个文件进行快速Base64加密, 可通过 zm.initbase64 设置模式
语法格式: 结果 = zm.EncodeBase64File(原文件路径, 加密保存路径)
命令参数: 原文件路径: 字符串, 待加密的文件路径, 文件必须存在
加密保存路径: 字符串, 加密文件保存的路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//准备文件
Dim 原文件路径 = GetTempDir() & "紫猫编程学院.txt"
zm.FileWrite 原文件路径, "欢迎加入紫猫学院"

//文件加密
Dim 加密文件路径 = GetTempDir() & "加密.txt"
zm.EncodeBase64File 原文件路径, 加密文件路径
TracePrint "加密后的内容:", zm.FileRead(加密文件路径)

//文件解密
Dim 解密文件路径 = GetTempDir() & "解密.txt"
zm.DecodeBase64File 加密文件路径, 解密文件路径

//读取内容判断加解密是否成功
If zm.FileRead(解密文件路径) = "欢迎加入紫猫学院" Then 
	TracePrint "加解密成功"
Else 
	TracePrint "加解密结果不一致"
End If
备注: Base64模式可以通过 zm.initbase64 来设置, 支持URL安全Base64加解密
文本Base64加密请使用 zm.encodebase64
V1.1821: 加入命令
命令名称: zm.EncodeDES DES加密
功能说明: 对数据进行标准DES加密, 支持DES和DES3。
语法格式: 结果 = zm.EncodeDES(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
密钥: 字符串, 用于加密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | des,des3 | des | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回加密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "12345678"
Dim s, v
s = zm.EncodeDES(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行DES-ECB加密结果", s
v = zm.DecodeDES(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行DES-ECB解密结果", v

s = zm.EncodeDES(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES加密输出Base64结果", s
v = zm.DecodeDES(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES解密输出Base64结果", v

s = zm.EncodeDES(text, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行DES3-CBC加密结果", s
v = zm.DecodeDES(s, pwd, {"mode":"cbc","block":"des3","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行DES3-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.EncodeHMAC HMAC签名
功能说明: 计算消息的HMAC签名结果, 支持md2,md4,md5,sha1,sha224,sha256,ripemd128,ripemd160算法
语法格式: 结果 = zm.EncodeHMAC(消息, 密钥[, 算法[, 返回格式]])
命令参数: 消息: 字符串, 待计算的消息内容
密钥: 字符串, 用于计算的密钥
算法: 字符串, 可选, 省略默认为sha1算法, 可填写md2,md4,md5,sha1,sha224,sha256,ripemd128,ripemd160
返回格式: number, 可选, 表示返回值内容, 省略默认为16, 0为原生二进制数据字符串, 2为字节数组, 16为十六进制字符串, 64为原生内容base64编码
返回值: 字符串: 返回HMAC签名结果, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim m = "紫猫学院", key = "zimaoxy.com"

Dim hmac = zm.EncodeHMAC(m, key)

TracePrint "hmac-sha1签名的十六进制结果为:", hmac
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V2.1829: 算法参数与返回格式参数可以乱序
命令名称: zm.EncodeMD5 MD5计算
功能说明: 对数据进行MD5计算, 支持MD2,MD4和MD5
语法格式: 结果 = zm.EncodeMD5(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
算法: 字符串, 可选, 省略默认为md5, 可填写md2, md4, md5
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫"

TracePrint "md5:", zm.EncodeMD5(s)
TracePrint "md4:", zm.EncodeMD5(s, "md4")
TracePrint "md2:", zm.EncodeMD5(s, "md2")
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
命令名称: zm.EncodeMD5File 计算文件MD5值
功能说明: 计算一个文件的MD5值。
语法格式: 结果 = zm.EncodeMD5File(文件路径)
命令参数: 文件路径: 字符串, 要计算MD5值的文件路径
返回值: 字符串:返回指定文件的MD5值。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim p = GetTempDir() & "Plugin/File.lua"
Dim md5 = zm.EncodeMD5File(p)
TracePrint md5
备注: V1.1730: 初次加入。
命令名称: zm.EncodeRIPEMD RIPEMD计算
功能说明: 对数据进行RIPEMD计算, 支持RIPEMD128和RIPEMD160
语法格式: 结果 = zm.EncodeRIPEMD(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
算法: 字符串, 可选, 省略默认为ripemd128, 可填写ripemd128, ripemd160
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫"

TracePrint "ripemd128:", zm.EncodeRIPEMD(s)
TracePrint "ripemd160:", zm.EncodeRIPEMD(s, "ripemd160")
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
命令名称: zm.EncodeSHA SHA计算
功能说明: 对数据进行SHA签名计算, 支持SHA1,SHA224和SHA256
语法格式: 结果 = zm.EncodeSHA(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
算法: 字符串, 可选, 签名使用的算法, 省略默认为sha1, 可填写sha1, sha224, sha256
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim s = "紫猫"

TracePrint "sha1:", zm.EncodeSHA(s)
TracePrint "sha224:", zm.EncodeSHA(s, "sha224")
TracePrint "sha256:", zm.EncodeSHA(s, "sha256")
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
命令名称: zm.EncodeTEA TEA加密
功能说明: 对数据进行TEA加密, 支持TEA和XTEA。
语法格式: 结果 = zm.EncodeTEA(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
密钥: 字符串, 用于加密的密钥。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为{“属性名”:”属性值”,…},详见下方表。

属性名 | 可选值列表 | 默认值 | 作用
—-|——-|—–|—
mode | ecb,cbc,ctr,ofb,cfb,ige,pcbc | ecb | 密文加密模式
padding | zero,pkcs7,isoiec7816,ansix923 | zero | 填充方式
block | tea,xtea | des | 加密算法
iv | 任意字符串 | 0 | iv偏移量,ecb模式不用填写
cipherout | 0,2,16,64 | 16 | 密文类型,0为原二进制字符串,2为字节数组, 16为十六进制字符串, 64为原二进制字符串Base64编码

返回值: 字符串:返回加密后的结果,失败为null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = "紫猫", pwd = "m.zimaoxy.com"
Dim s, v
s = zm.EncodeTEA(text, pwd)
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA-ECB加密结果", s
v = zm.DecodeTEA(s, pwd)
TracePrint "对密文", s, "使用密钥", pwd, "进行TEA-ECB解密结果", v

s = zm.EncodeTEA(text, pwd, {"cipherout":64})
TracePrint "对明文", text, "使用密钥", pwd, "进行TEA加密输出Base64结果", s
v = zm.DecodeTEA(s, pwd, {"cipherout":64})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行TEA解密输出Base64结果", v

s = zm.EncodeTEA(text, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对明文", text, "使用密钥", pwd, "进行XTEA-CBC加密结果", s
v = zm.DecodeTEA(s, pwd, {"mode":"cbc","block":"xtea","iv":"abcdefgh"})
TracePrint "对十六进制密文", s, "使用密钥", pwd, "进行XTEA-CBC解密结果", v
备注: V2.1828:
初次加入
封装 https://github.com/somesocks/lua-lockbox 的代码
V3.1831: 加入密钥长度限制
命令名称: zm.EncodeURL URL编码
功能说明: 对参数进行URL编码,常用于网址参数中,例如`紫猫`编码后就是`%E7%B4%AB%E7%8C%AB`。
语法格式: 结果 = zm.EncodeURL(明文)
命令参数: 明文: 字符串, 待编码的内容。
返回值: 字符串:返回URL编码后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim urls = zm.EncodeURL("紫猫")
TracePrint "对紫猫进行URL编码,得到", urls
Dim data = zm.DecodeURL(urls)
TracePrint "对", urls, "进行URL解码,得到", data
备注: 空格会被转为+,保留数字、英文和`-_.~`。
仅支持3.2.1版本以上的按键。
V1.1723b: 初次加入
命令名称: zm.InitBase64 初始化Base64模式
功能说明: 初始化设置Base64的加解密模式, 支持URL安全Base64, 默认为标准Base64, 已集成到 zm.init
语法格式: 结果 = zm.InitBase64([字符表[, 填充符]])
命令参数: 字符表: 数值型_或_字符串, 可选, 省略默认为标准Base64加解密, 数值1为base64标准加解密, 数值2为base64url安全加解密, 数值3为base64noterm标准无填充加解密, 填写长度64的不重复字符串时表示自定义编码表
填充符: 字符串, 可选, 省略默认为标准Base64加解密, 末尾填充字符
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//默认为标准Base64加解密
//zm.InitBase64
TracePrint zm.EncodeBase64("紫猫学院zimaoxy.com")
TracePrint "紫猫学院zimaoxy.com" = zm.DecodeBase64("57Sr54yr5a2m6ZmiemltYW94eS5jb20=")

//使用URL安全Base64加解密, 对所有base64相关命令生效
zm.InitBase64 2
TracePrint zm.EncodeBase64("紫猫学院zimaoxy.com")
TracePrint "紫猫学院zimaoxy.com" = zm.DecodeBase64("57Sr54yr5a2m6ZmiemltYW94eS5jb20")

//自定义字符表编码与填充符
Dim 字符表编码 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!"
Dim 填充符 = "%"
zm.InitBase64 字符表编码, 填充符
TracePrint zm.EncodeBase64("紫猫学院zimaoxy.com")
TracePrint "紫猫学院zimaoxy.com" = zm.DecodeBase64("vxIhvuohvQscwPcYUcbjOMzuUIvZRsq%")
备注: 该命令已集成到 zm.init
对所有的Base64系列命令有影响
V1.1821: 加入命令
命令名称: zm.GetGateway 获取默认网关地址
功能说明: 获取默认网关地址。
语法格式: 结果 = zm.GetGateway()
命令参数:
返回值: 字符串:返回当前默认网关地址。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetGateway()
备注: V1.1805: 加入命令
命令名称: zm.GetIPNet 获取外网IP
功能说明: 获取外网IP地址等信息, 根据参数决定返回内容
语法格式: 结果 = zm.GetIPNet([返回格式])
命令参数: 返回格式: 数值型, 可选, 填写0表示只返回ip地址字符串, 填写大于0的数字表示返回详细信息表, 包括省份等内容, 不同数字代表不同接口的返回值, 省略默认为0
返回值: 字符串_或_表: 返回ip或详细信息表, 由参数返回格式决定返回内容, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//强烈建议使用默认参数直接获取ip, 内置数十个接口, 保证稳定性
Dim ip = zm.GetIPNet()
TracePrint "我的ip是:", ip

//不同接口的返回值格式与内容均有所不同, 由于部分接口可能不稳定, 故不推荐使用此方法
Dim ipt
For i = 1 to 7
  ipt = zm.GetIPNet(i)
  If ipt Then
    TracePrint "接口", i, zm.VarInfo(ipt)
  Else
    TracePrint "接口", i, "获取ip失败"
  End
Next
备注: V1.1818: 加入命令
V3.1833: 增加多个接口, 提高获取ip稳定性
命令名称: zm.HttpDownload 下载文件
功能说明: 以HTTP协议的Get方法下载文件, 支持提交cookie与头信息
语法格式: 结果 = zm.HttpDownload([对象][网址][,保存路径][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为{“url”:”网址”, “path”:”保存路径”, “cookie”:”cookie字符串或文件”, “header”:{“头信息1”, “头信息2”}, “customize”:”自定义curl参数”}
网址: string, 可选, 与对象参数二选一填写, 文件的下载地址
保存路径: string, 可选, 文件的保存路径, 省略为当前路径下的默认文件名
提交cookie: string, 可选, 要提交的cookie字符串或者cookie文件路径, 省略为””
请求头信息: string|table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为””
自定义: string, 可选, curl的高级参数, 一般不需要填写, 省略默认为””
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.HttpDownload "http://m.anjian.com/download/MobileAnjian3.2.9.apk", "/sdcard/anjian.apk"
备注: V1.1813: 加入命令
命令名称: zm.HttpGet 获取网页源码
功能说明: 以Http协议的Get方法获取网页源码, 支持提交cookie与头信息, 可保存当前cookie文件
语法格式: 结果 = zm.HttpGet([对象][网址][,网页编码][,保存cookie][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为{“url”:”网址”,”code”:”网页编码”, “setcookie”:”保存cookie文件路径”, “cookie”:”发送cookie字符串或文件”, “header”:{“头信息1”, “头信息2”}, “customize”:”自定义curl参数”}
网址: string, 可选, 与对象参数二选一, 要获取网页源码的网址
网页编码: string, 可选, 省略默认为”UTF-8″, 可通过右击查看网页源码中的charset获知正确编码
保存cookie: string, 可选, 省略默认为””, 表示保存cookie的路径, 可用 zm.filetemp 生成路径保存
提交cookie: string, 可选, 省略默认为””, 要提交的cookie字符串或者cookie文件路径
请求头信息: string|table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为””
自定义: string, 可选, curl的高级参数, 一般不需要填写, 省略默认为””
返回值: 字符串: 获取的网页源码内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HttpGet("www.baidu.com")
备注: V1.1813: 加入命令
V3.1837: 内置10秒超时
命令名称: zm.HttpPost 提交网页数据
功能说明: 以Http协议的Post方法提交数据并获取网页源码, 支持提交cookie与头信息, 可保存当前cookie文件
语法格式: 结果 = zm.HttpPost([对象][网址][,提交数据][,网页编码][,保存cookie][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为{“url”:”网址”,”data”:”提交数据”,”code”:”网页编码”, “setcookie”:”保存cookie文件路径”, “cookie”:”发送cookie字符串或文件”, “header”:{“头信息1”, “头信息2”}, “customize”:”自定义curl参数”}
网址: string, 可选, 与对象参数二选一, 要获取网页源码的网址
提交数据: string, 可选, 省略默认为””, 包含中文或空格之类时, 建议先使用 zm.encodeurl 进行编码转换后传入
网页编码: string, 可选, 省略默认为”UTF-8″, 可通过右击查看网页源码中的charset获知正确编码
保存cookie: string, 可选, 省略默认为””, 表示保存cookie的路径, 可用 zm.filetemp 生成路径保存
提交cookie: string, 可选, 省略默认为””, 要提交的cookie字符串或者cookie文件路径
请求头信息: string|table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为””
自定义: string, 可选, curl的高级参数, 一般不需要填写, 省略默认为””
返回值: 字符串: 获取的网页源码内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HttpPost("www.baidu.com")
备注: V1.1813: 加入命令
V3.1837: 强制post提交, 内置10秒超时
命令名称: zm.NetDataCount 网络数据行数
功能说明: 从数据表中获取数据总数量
语法格式: 结果 = zm.NetDataCount([数据表名])
命令参数: 数据表名: 字符串, 可选, 省略默认为初始化的数据表名, 数据表必须存在
返回值: 数值型: 返回数据表的总行数
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 总数量 = zm.NetDataCount()
TracePrint "一共有", 总数量, "个数据"
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1818: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataDel 删除网络数据
功能说明: 从数据表中删除指定共享网络数据, 仅删除一个变量数据, 不会清空所有数据
语法格式: 结果 = zm.NetDataDel(键名[, 数据表名])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
数据表名: 字符串, 可选, 从指定数据表中删除共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim VIP = zm.NetDataGet("VIP")
TracePrint zm.VarInfo(VIP)

zm.NetDataDel "VIP"

Dim 检查删除结果 = zm.NetDataGet("VIP")
TracePrint 检查删除结果
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataGet 获取网络数据
功能说明: 从数据表中获取网络共享数据
语法格式: 结果 = zm.NetDataGet(键名[, 数据表名][, 是否删除])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
数据表名: 字符串, 可选, 从指定数据表中获取共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
是否删除: 布尔型, 可选, 表示获取后是否直接删除该键名, 省略默认为false
返回值: 字符串_或_数值型_或_布尔型_或_表: 返回键值内容, 该数据类型与写入时相同
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 等级 = zm.NetDataGet("等级")
Dim 昵称 = zm.NetDataGet("昵称")
Dim VIP = zm.NetDataGet("VIP", True)

TracePrint zm.VarInfo(等级)
TracePrint zm.VarInfo(昵称)
TracePrint zm.VarInfo(VIP)

Dim 检查删除结果 = zm.NetDataGet("VIP")
TracePrint 检查删除结果
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V1.1818: 支持table
V2.1826: 解决写入成功, 读取失败的问题
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataGetRows 获取多行网络数据
功能说明: 从数据表中获取指定行数的数据, 数据表名与是否删除参数顺序可以打乱
语法格式: 结果 = zm.NetDataGetRows(行数[, 起始行][, 数据表名][, 是否删除])
命令参数: 行数: 数值型, 从指定数据表中获取多少行数据
起始行: 数值型, 可选, 表示从第几行开始获取, 省略默认为1
数据表名: 字符串, 可选, 从指定数据表中获取共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
是否删除: 布尔型, 可选, 表示获取后是否直接删除这些数据, 省略默认为false
返回值: 表: 返回二维表, 格式{ {“id”:id,”key”:key,”value”:value}, …}, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本", True

zm.NetDataSet "帐号1", "密码1"
zm.NetDataSet "帐号2", "密码2"
zm.NetDataSet "帐号3", "密码3"
zm.NetDataSet "帐号4", "密码4"
zm.NetDataSet "帐号5", "密码5"

//从第一行开始获取1行数据, 并且删除
Dim 帐号密码 = zm.NetDataGetRows(1, True)
TracePrint "帐号是: ", 帐号密码[1]["key"]
TracePrint "密码是: ", 帐号密码[1]["value"]

//从第2行开始获取3行数据
Dim 多个帐号密码 = zm.NetDataGetRows(3, 2)
For Each k , v In 多个帐号密码
	TracePrint "帐号是: ", v["key"]
	TracePrint "密码是: ", v["value"]
Next
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataInit 初始化网络数据
功能说明: 初始化共享网络数据, 创建指定数据表, 实现网络通信功能, 参数顺序可以打乱, 需要网站程序配合, 搭建方法详见备注
语法格式: 结果 = zm.NetDataInit([网址][, 数据表名][, 是否清空])
命令参数: 网址: 字符串, 可选, 网站程序sql.php的网址
数据表名: 字符串, 可选, 用于存放变量数据的表
是否清空: 布尔型, 可选, 清空指定数据表下所有变量数据, 不会删除数据表, 省略默认为false, 表示不清空
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//例子1 初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 等级 = zm.NetDataGet("等级")
Dim 昵称 = zm.NetDataGet("昵称")
Dim VIP = zm.NetDataGet("VIP", True)

TracePrint zm.VarInfo(等级)
TracePrint zm.VarInfo(昵称)
TracePrint zm.VarInfo(VIP)

Dim 检查删除结果 = zm.NetDataGet("VIP")
TracePrint 检查删除结果

//例子2 清空以前数据并初始化
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本", True
备注: 本功能是使用http协议来操作php数据库网站, 实现多设备共享网络数据, 所以需要自行搭建网站程序, 操作步骤如下:

搭建php5.4以上的运行环境, 新手小白可以下载安装[phpstudy](http://www.php.cn/xiazai/gongju/845)之类的软件部署环境, 以下步骤以内网环境进行讲解
下载安装并运行phpstudy软件, 若提示安装vc运行库, 请自行下载安装解决
在**其他选项菜单**中打开**网站根目录**文件夹
将紫猫插件压缩包中的**medoo.php**和**sql.php**文件([点我下载](https://pan.baidu.com/s/125x21HMERn9lbxSPM1TOPw))复制到上面的**网站根目录**文件夹中
点击**启动**按钮
查看本机内网ip地址(不会的请百度解决), 在本机设备上打开网页访问ip/sql.php, 例如**http://192.168.1.100/sql.php**, 只要网页显示**通信成功**, 就说明电脑服务端环境搭建成功
在模拟器或者手机里打开网页访问电脑服务端的网址, 也就是上一步的网址, 同样如果网页显示**通信成功**, 就说明这两台设备网络通信成功, 可以使用本命令功能, 无法访问的请关闭防火墙, 并检查电脑服务端的ip是否正确
外网通信请自行购买虚拟主机或VPS之类的建站空间, 然后与上面步骤类似, 外网环境请注意修改**sql.php**中的ip, 账户, 密码等配置
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率

命令名称: zm.NetDataQuery 执行SQL语句
功能说明: 执行SQL语句, 需要一定SQL语法知识
语法格式: 结果 = zm.NetDataQuery(SQL)
命令参数: SQL: 字符串, 要执行的SQL语句
返回值: 字符串: 执行SQL后的返回结果。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "等级", 99
zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "VIP", True

Dim 结果 = zm.NetDataQuery("SELECT * FROM `测试脚本`")
TracePrint 结果
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
命令名称: zm.NetDataSet 设置网络数据
功能说明: 往数据表中添加或修改共享网络数据
语法格式: 结果 = zm.NetDataSet(键名, 键值[, 数据表名])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
键值: 字符串_或_数值型_或_布尔型_或_表, 存放的数据, 类似于变量值
数据表名: 字符串, 可选, 往指定数据表中设置共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且不清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本"

zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "等级", 99
zm.NetDataSet "VIP", True
备注: 脚本开头必须先调用一次 zm.netdatainit
V1.1816: 加入命令
V1.1818: 支持table
V3.1903: 大幅度提高执行效率
命令名称: zm.TCPClose 关闭TCP连接
功能说明: 关闭TCP连接。
语法格式: 结果 = zm.TCPClose()
命令参数:
返回值: 数值型:返回1表示关闭成功, 返回2表示当前无连接, 返回null表示关闭失败。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.TCPConnect 连接TCP服务端
功能说明: 连接TCP服务端。
语法格式: 结果 = zm.TCPConnect(目标IP, 目标端口[, 超时时间])
命令参数: 目标IP: 字符串, 要连接的TCP服务端IP地址
目标端口: 数值型, 要连接的TCP服务端端口
超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 数值型:返回1表示连接成功, 返回null表示连接失败。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
V3.1849: 修复使用TCP功能后无法启动多线程的问题(可能会导致超时参数失效)。
命令名称: zm.TCPReceive 接收TCP数据
功能说明: 接收TCP数据,此命令为阻塞命令!
语法格式: 结果 = zm.TCPReceive([超时时间[, 接收模式]])
命令参数: 超时时间: 数值型, 可选, 单位秒, 默认为10秒
接收模式: 字符串, 可选, 支持`*a`和`*l`两种模式, 省略默认为`*l`
返回值: 字符串:成功返回字符串数据内容, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.TCPSend 发送TCP数据
功能说明: 发送TCP数据
语法格式: 结果 = zm.TCPSend(数据, [超时时间])
命令参数: 数据: 字符串, 要发送的数据内容, 注意, 末尾会默认加上`\n`字符
超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 数值型:成功返回大于0的数据长度, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//连接192.168.1.100:12345的TCP服务端
Dim isConn = zm.TCPConnect("192.168.1.100", 12345)
If isConn Then 
    //发送数据到服务端
    TracePrint zm.TCPSend("QQ345911220", 15)
    //接收数据
    TracePrint zm.TCPReceive(60)
    //关闭TCP连接
    TracePrint zm.TCPClose()
Else 
    TracePrint "TCP连接失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPBind 绑定UDP
功能说明: 绑定UDP
语法格式: 结果 = zm.UDPBind(IP, 端口[, 超时时间])
命令参数: IP: 字符串, 要绑定的IP地址
端口: 数值型, 要绑定的端口
超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 数值型:成功返回大于0的数值, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPClose 关闭UDP
功能说明: 关闭UDP
语法格式: 结果 = zm.UDPClose()
命令参数:
返回值: 数值型:返回`1`表示关闭成功, 返回`2`表示没有找到绑定, 返回`null`表示失败
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPReceive 接收UDP数据
功能说明: 接收UDP数据, 注意, 此命令为阻塞命令
语法格式: 结果 = zm.UDPReceive([超时时间])
命令参数: 超时时间: 数值型, 可选, 单位秒, 默认为10秒
返回值: 表:成功返回{数据内容, 来源IP, 来源端口}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.UDPSend 发送UDP数据
功能说明: 发送UDP数据
语法格式: 结果 = zm.UDPSend(数据, IP, 端口)
命令参数: 数据: 字符串, 要发送的数据内容
IP: 字符串, 目标IP地址
端口: 数值型, 目标端口
返回值: 数值型:成功返回大于0的数值, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//往192.168.1.100:12345发送数据
TracePrint zm.UDPSend("QQ345911220", "192.168.1.100", 12345)
//绑定192.168.1.101:12345
Dim isBind = zm.UDPBind("192.168.1.101", 12345, 15)
If isBind Then 
    //接收数据
    TracePrint zm.UDPReceive(60)
    //关闭UDP
    TracePrint zm.UDPClose()
Else 
    TracePrint "UDP绑定失败"
End If
备注: V1.1805: 加入命令
命令名称: zm.GetUIValue 读取UI控件值
功能说明: 读取UI动态界面控件的值, 与 ui.getvalue 相比, 本命令直接以(数值型/布尔型/字符串)形式返回结果
语法格式: 结果 = zm.GetUIValue(控件名)
命令参数: 控件名: 字符串, UI界面的控件名
返回值: 数值型/布尔型/字符串: 由控件决定对应的数据类型, 返回控件值
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

'创建一个名称为"layout1"的布局控件
UI.NewLayout ("layout1")
'以下例子为分别创建文字框、输入框、按钮等控件并使用获取GetValue它们的值
UI.AddTextView("layout1", "文字框1", "姓名:") 
Dim 内容= zm.GetUIValue("文字框1")
TracePrint 内容
UI.AddEditText("layout1", "输入框1", "请在此输入内容") 
Dim 内容2= zm.GetUIValue("输入框1")
TracePrint 内容2
UI.AddButton("layout1", "按钮1", "这是个按钮") 
Dim 内容3= zm.GetUIValue("按钮1")
TracePrint 内容3
UI.AddRadioGroup("layout1","单选框1",{"1小瓶", "2中瓶", "3大瓶"},0)
Dim 内容4= zm.GetUIValue("单选框1")
TracePrint 内容4
UI.AddCheckBox("layout1", "多选框1","多选框选项1", false)
Dim 内容5= zm.GetUIValue("多选框1")
TracePrint 内容5
UI.NewRow("layout1", "new_row_1")
Dim SpinnerTable = {"湖南", "湖北", "广东", "广西"}
UI.AddSpinner("layout1", "下拉框1", SpinnerTable, 0)
Dim 内容6= zm.GetUIValue("下拉框1")
TracePrint 内容6
'显示名称为:"layout1" 的布局控件
UI.Show ("layout1")
备注: V1.1804: 加入命令
V1.1805: 命令名改为`zm.GetUIValue()`
命令名称: zm.CmpColorEx 超级多点比色
功能说明: cmpcolorex 更加强大的命令, 具体特色如下

– 支持多组多点比色数据, 并且返回找到的序号, 详见示例
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象参数只能填写第一个外, 其他参数大部分可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setcmpcolorex 来自定义修改
– 担心一次对比不到颜色? 自由设置限时循环对比时间, 提高成功率
– 画面变化太大, 颜色相似度不好设置? 智能颜色相似度帮你全自动查找
– 对比点存在误差, 需要忽略一定数量的点? 数量相似度解决此问题
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写, 返回值中有序号, 坐标, 颜色
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.cmpcolorextap
– 需要遍历多个对象数组? 推荐使用 zm.cmpcolorextable

语法格式: 结果 = zm.CmpColorEx([对象][颜色组, …][, 颜色相似度[, 智能颜色相似度[, 颜色相似度步长]]][, 数量相似度][, 对比超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色组: 字符串, 可选, 需要对比的点xy坐标和16进制颜色, **支持填写多组不同的颜色组**, 格式与 cmpcolorex 参数相同, 都是(X坐标|Y坐标|16进制颜色), 多个颜色用“|”号分隔, 需要偏色用“`-`”号分隔, 多个点信息用“`,`”号分隔, 比如”100|200|FFFFFF|123456-000000,300|500|FFFFFF”
颜色相似度: 数值型, 可选, 对比查找的颜色相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能颜色相似度: 数值型, 可选, 与颜色相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`颜色相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
颜色相似度步长: 数值型, 可选, 智能颜色相似度调节变化间隔, 必须写在`颜色相似度`和`智能颜色相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
数量相似度: 字符串, 可选, 一组颜色组中符合条件的颜色数量比值, 注意是字符串数据类型, 省略默认为`”1.0″`, 取值范围`[“0”, “1.0”]`, 越高越相似
对比超时: 数值型, 可选, 限时对比时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要对比成功后自动点击该组的第一个点坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为对比成功组的第一点坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击对比成功组的第一点坐标的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 返回符合要求的第一个点坐标并保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 对比失败或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
//--------------------例子1--------------------//
//表示对比两组多点比色数据, 分别是"205|177|0CBB00,228|169|FFFFFF"和"61|340|3DC3EE"
//支持无限添加多点比色数据, 按顺序比较, 只要有一组对比成功, 就返回结果
//不填写相似度情况下, 省略默认相似度为0.9
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子2--------------------//
//如何对比动态变化的画面?
//原理:用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
//     说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
//     那么对每一次截图采集一些多点比色数据, 然后让脚本循环多次比较这些数据
//     只要任何一组数据对比成功, 都可以认为是找到这个动态图了
//     所以可以使用本命令的无限添加多点比色数据与设置超时时间来实现
//     想提高查找速度的话, 建议提高相似度, 增加多点比色数据
//下面代码实现在5000毫秒内不断循环比较两组多点比色数据, 任何一组对比成功了, 就立即返回该组数据的第一个坐标
//超过5000毫秒没对比成功, 就返回null
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 5000)
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子3--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//除对象参数外, 大部分参数都可以打乱顺序填写, 只要数据类型与格式正确即可
//下面代码实现以(0.8)的颜色相似度比较两组多点比色数据, 并把返回结果保存在数组变量(返回数组)中
If zm.CmpColorEx(0.8, "205|177|0CBB00,228|169|FFFFFF", 返回数组, "61|340|3DC3EE") Then
    TracePrint "对比颜色成功, 序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "name=" & 返回数组["name"]
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子4--------------------//
//有时候颜色的相似度不好取值, 那么可以借助智能相似度实现判断
//下面这段代码中就表示从高相似度1.0到低相似度0.7, 以每次减少0.1的值进行循环对比
//只要对比成功了, 就立即返回结果, 需注意, 相似度步长必须写在两个颜色相似度后面
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.7, 1.0, 0.1)
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子5--------------------//
//请注意这个例子中的参数("0.7"), 这是指数量相似度, 必须是字符串数据类型
//数量相似度是指多点比色数据中符合条件点的比例, "0.7"即70%以上个点符合条件
//例如下面这组多点比色数据一共有4个点, 那么对比时, 只要有4*0.7=2.8个点以上符合条件, 就可以返回对比成功
ret = zm.CmpColorEx("5|7|0CBB00,2|1|FFFFFF,4|3|3DC3EE,1|3|354311", "0.7")
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子6--------------------//
//写代码过程中的调试输出信息是非常重要的, 但是每次都要专门写一次TracePrint也挺麻烦
//所以可以直接把输出信息写在参数里, 让它自动输出详细内容
//加入参数("显示")或("show")就表示要输出结果, 没有这个参数就不会输出内容
//加入参数("@内容")就表示输出的备注信息, 因为这个输出是不带行号的, 所以备注信息很有必要输出显示
//加入参数("_行数")表示在带上输出行号, 不过代码改动, 行号变化后, 这里也要重新修改, 比较麻烦, 不如备注来的方便
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", "显示", "@怪物", "_72")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子7--------------------//
//对比成功后可能会需要点击操作, 那么加入参数(true)就可以实现点击返回的坐标
//但是由于对比和点击是由两个动作组成, 所以更加推荐使用zm.CmpColorExTap()命令来实现这个功能
//省略点击坐标参数情况下, 默认点击的坐标是对比成功的颜色组第一个点
//比如第一组颜色对比成功, 那么点击就是(205,177), 如果是第二组, 那么就是点击(61,340)
//如果加入点击坐标参数("100,-20,3000"), 那么点击坐标将发生改变, 以返回坐标(205,177)为例
//实际点击坐标是(100,177-20=157), 并且点击后延时3000毫秒
//更多关于点击坐标参数格式请查看参数信息里的内容
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", True, "100,-20,3000")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If


//--------------------例子8--------------------//
//有时候需要判断对比成功后, 过一段时间画面消失, 也就是对比失败这个过程
//那么可以通过等待消失和消失超时参数来实现
//下面代码中, 参数(-2)表示开启等待消失功能, 参数(-5000)表示在5000毫秒内不断判断对比是否失败
//如果对比失败, 就表示画面消失了, 立即返回结果
//其中返回的坐标依旧是对比成功点的坐标, 而是否消失的结果保存在键名("miss")中
//要注意的是只有先对比成功后, 才会进入等待消失, 如果一开始就对比失败, 那就不会去等待消失了
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", -2, -5000)
If ret Then
    TracePrint "对比颜色成功, 序号=" & ret(0), "x=" & ret(1), "y=" & ret(2), "name=" & ret(3)
    TracePrint "画面是否消失 = ", ret["miss"]
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子9--------------------//
//可选参数都可以组合起来实现, 大部分参数可以乱序填写, 下面代码意思如下:
//以颜色相似度为(0.8), 数量相似度("0.7")的设置
//比较两组多点比色数据, 分别是"205|177|0CBB00,228|169|FFFFFF"和"61|340|3DC3EE"
//限时在2000毫秒内循环比较, 找到任何一个后退出循环查找
//并将对比成功颜色组的序号和第一个点坐标保存在数组变量(ret)与(返回数组)中
//比如"205|177|0CBB00,228|169|FFFFFF"对比成功则返回序号0, 坐标(205,177)
//而如果是"61|340|3DC3EE"对比成功, 则返回序号1, 坐标(61,340)
//同时开启日志的输出("显示")功能, 输出备注("@紫猫Boss"), 对比结果与其他参数信息
ret = zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.8, "0.7", 2000, "显示", "@紫猫Boss", 返回数组)
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//--------------------例子10--------------------//
//脚本变量的管理是一个难题, 每组图色数据都是独立的, 为了方便代码结构的管理
//可以把所有参数放到一个表中, 表中的数据一样可以打乱顺序任意填写或省略
//这个表就是对象参数, 它必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_133"), 则表示重写对象里的("_36"), 使日志输出显示在46行
//注意, 多点比色数据不会被覆盖重写, 只会被追加, 相当于所有的多点比色数据都会被用来查找
//如果你有多组不同的对象参数需要遍历, 那么推荐使用zm.CmpColorExTable()
Dim 史莱姆 = {"205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", 0.8, 2000, "显示", "@怪物1", 返回数组, "_39"}
zm.CmpColorEx 史莱姆, "_134", "11|140|1542EE"

//--------------------例子11--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有超级多点比色相关命令都默认输出调试信息
//更多修改默认设置详见 zm.SetCmpColorEx() 命令帮助
zm.SetCmpColorEx {"ret":IXYs, "showlog":"显示"}
If zm.CmpColorEx("205|177|0CBB00,228|169|FFFFFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "对比颜色成功, 序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "对比颜色成功, 序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "对比颜色成功, 序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
Else
    TracePrint "对比颜色失败"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点比色颜色组数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。颜色相似度是粗调,指对颜色整体做百分比判断。
数量相似度是指颜色组对比成功点的比例, 例如 `”1|1|3DC3EE,2|2|346AFF,3|3|1592FF,4|4|1592FF,5|5|231209,6|6|241306,7|7|201004,8|8|241306,9|9|241306″` 这组多点比色数据有9个点, 如果数量相似度填写`”0.8″`就意味着对比成功条件是`0.8*9=7.2`个点以上符合要求, 而点的个数肯定是整数, 所以就是必须要8个点或9个点才能算对比成功
V3.1830: 加入命令
命令名称: zm.CmpColorExTable 超级多点比色遍历
功能说明: zm.cmpcolorex 类似, 参数只有一个对象数组, 可实现多个对象的遍历对比
语法格式: 结果 = zm.CmpColorExTable(对象table)
命令参数: 对象table: table, 把 zm.cmpcolorex 的对象参数放入table数组中, 实现多个对象的遍历对比
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name}, …}`, 全部没找到或失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//将多个对象放入打怪table中, 每个对象都有各自的键名与各自的参数键值
Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"61|340|3DC3EE,91|344|346AFF,472|154|1592FF", true}
打怪["黑龙"] = {"421|237|241306,438|261|241306", 0.8, true}
打怪["紫猫BOSS"] = {"295|290|241306", Boss坐标} //这个不点击

//遍历打怪table, 返回每个对象成员的结果
Dim t = zm.CmpColorExTable(打怪)
If t Then
    TracePrint zm.VarInfo(t)
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    //在确认有找到的情况下, 可以单独判断某个对象是否有找到, 包括获取该对象的坐标结果等
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

//对象参数中的返回数组参数依旧可以拿出来单独判断使用
If Boss坐标(0) > -1 Then
    TracePrint "找到紫猫BOSS"
Else
    TracePrint "没有找到紫猫BOSS"
End If
备注: 该命令与 zm.cmpcolorex 类似, 唯一区别在于参数只有一个对象table
V3.1830: 加入命令
命令名称: zm.CmpColorExTap 超级多点比色点击
功能说明: zm.cmpcolorex 类似, 区别在于本命令内置对比成功后点击, 无需`是否点击`参数, 由于对比与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.CmpColorExTap([对象][颜色组, …][, 颜色相似度[, 智能颜色相似度[, 颜色相似度步长]]][, 数量相似度][, 对比超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色组: 字符串, 可选, 需要对比的点xy坐标和16进制颜色, 格式为(X坐标|Y坐标|16进制颜色), 多个颜色用“|”号分隔, 需要偏色用“`-`”号分隔, 多个点信息用“`,`”号分隔, 比如”100|200|FFFFFF|123456-000000,300|500|FFFFFF”, 支持填写多组不同的颜色组
颜色相似度: 数值型, 可选, 对比查找的颜色相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能颜色相似度: 数值型, 可选, 与颜色相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`颜色相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
颜色相似度步长: 数值型, 可选, 智能颜色相似度调节变化间隔, 必须写在`颜色相似度`和`智能颜色相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
数量相似度: 字符串, 可选, 一组颜色组中符合条件的颜色数量比值, 注意是字符串数据类型, 省略默认为`”1.0″`, 取值范围`[“0”, “1.0”]`, 越高越相似
对比超时: 数值型, 可选, 限时对比时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为对比成功组的第一点坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击对比成功组的第一点坐标的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 返回符合要求的第一个点坐标并保存到表中, 格式为{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, 对比失败或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
//省略点击坐标参数情况下, 默认点击的坐标是对比成功的颜色组第一个点
//比如"205|177|0CBB00,228|169|FFFFFF"对比成功, 那么点击的坐标就是(205,117)
ret = zm.CmpColorExTap("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE")
If ret Then
    TracePrint "对比颜色成功, 执行点击操作"
Else
    TracePrint "对比颜色失败"
End If

//如果加入点击坐标参数("100,-20,3000"), 那么点击坐标将发生改变, 以返回坐标(205,177)为例
//实际点击坐标是(100,177-20=157), 并且点击后延时3000毫秒
//更多关于点击坐标参数格式请查看参数信息里的内容
ret = zm.CmpColorExTap("205|177|0CBB00,228|169|FFFFFF", "61|340|3DC3EE", "100,-20,3000")
If ret Then
    TracePrint "对比颜色成功"
Else
    TracePrint "对比颜色失败"
End If

//其他更多例子见zm.CmpColorEx*()命令, 本命令除了强制点击外, 无其他区别
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点比色颜色组数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。颜色相似度是粗调,指对颜色整体做百分比判断。
数量相似度是指颜色组对比成功点的比例, 例如 `”1|1|3DC3EE,2|2|346AFF,3|3|1592FF,4|4|1592FF,5|5|231209,6|6|241306,7|7|201004,8|8|241306,9|9|241306″` 这组多点比色数据有9个点, 如果数量相似度填写`”0.8″`就意味着对比成功条件是`0.8*9=7.2`个点以上符合要求, 而点的个数肯定是整数, 所以就是必须要8个点或9个点才能算对比成功
V3.1830: 加入命令
命令名称: zm.FindColor 超级找色
功能说明: findcolor 更加强大的命令, 具体特色如下

– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindcolor 来自定义修改
– 担心一次找不到颜色? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 查找方向的数值总是记不住? 直接用中文 `”左上”,”中心”,”右上”,”左下”,”右下”,…` 来代替
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的颜色值
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.findcolortap
– 需要遍历多个对象数组? 推荐使用 zm.findcolortable
– 需要返回所有找到的坐标? 推荐使用 zm.findcolorex

语法格式: 序号坐标颜色 = zm.FindColor([对象,][x1,y1,x2,y2,][颜色][,方向][,相似度[,智能相似度[,相似度步长]]][,查找次数][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`1.0`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为 `{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}` , 没找到或出错返回`null`, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
//0.9表示相似度, 内置省略默认为1.0, 可自由设置
ret = zm.FindColor("00AAFF", 0.9)
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "颜色=" & ret(3)
    TracePrint "找到颜色序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "颜色=" & ret[4]
    TracePrint "找到颜色序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "颜色=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写
If zm.FindColor(100, 200, 300, 400, "00AAFF", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "颜色=" & 返回数组(3)
    TracePrint "找到颜色序号" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "颜色=" & 返回数组[4]
    TracePrint "找到颜色序号" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "颜色=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//"00AAFF"颜色后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可, 详见上面参数介绍
//这句代码意思如下:
//在范围(100,200,300,400)里, 以相似度为(0.8)的设置, 从("中心")向四周循环限时2秒钟内查找颜色为("00AAFF")的点
//找到后退出循环查找, 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_36")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindColor(100, 200, 300, 400, "00AAFF", 0.8, 2000, "中心", "显示", "@怪物1", 返回数组, "_36")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 颜色后面的可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_46"), 则表示重写对象里的("_36"), 使日志输出显示在46行
Dim 史莱姆 = {"00AAFF", 0.8, 2000, "显示", "@攻击史莱姆", 返回数组, "_46"}
zm.FindColor 史莱姆, 100, 200, 300, 400, "_46"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindColor() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindColor() 命令帮助
zm.SetFindColor {"ret":IXYs, "showlog":"显示"}
If zm.FindColor("00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "颜色=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "颜色=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "颜色=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到颜色值
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findcolortap
命令名称: zm.FindColorEx 超级找色返回所有坐标
功能说明: zm.findcolor 类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组
语法格式: 结果 = zm.FindColorEx([对象][x1, y1, x2, y2, ]颜色[, 相似度[, 智能相似度[, 相似度步长]]][, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`1.0`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 找到返回结果保存到表中, 格式为 `{ {id, x, y}, …, “xy”:{id:{ {x,y}, …}, …}, “id”:{id, …}, “counts”:数量, “miss”:miss}` , 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindColorEx("BDBDBD|614B6B|FFFFFF")
If ret Then
    TracePrint "颜色找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint "颜色序号:", ret(i, 0), " 坐标:", ret(i, 1), ret(i, 2)
    Next

    TracePrint "第2种:遍历键名"
    For Each k , v In ret["xy"]
    	For Each xy In v
    		TracePrint "颜色序号:", k, " 坐标:", xy[1], xy[2]
    	Next
    Next
    
    TracePrint "第3种:获取指定颜色序号的坐标"
    If ret["xy"][2] Then 
    	For Each xy In ret["xy"][2]
    		TracePrint "颜色序号2的找到坐标:", xy[1], xy[2]
    	Next
    Else 
    	TracePrint "颜色序号2没有找到"
    End If
Else
    TracePrint "没有找到颜色"
End If
备注: 该命令与 zm.findcolor 类似, 唯一区别在于返回内容是找到的所有坐标二维数组
V3.1830: 加入命令
V3.1831: 修复返回值被前次结果覆盖的问题
命令名称: zm.FindColorTable 超级找色遍历
功能说明: zm.findcolor 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindColorTable(对象table)
命令参数: 对象table: table, 把 zm.findcolor 的对象参数放入table数组中, 实现遍历找色
返回值: 查找结果, table: 找到返回结果保存到表中, 格式为 `{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}` , 全部没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"00AAFF", true}
打怪["黑龙"] = {100,200,300,400, "1155BB", true}
打怪["紫猫BOSS"] = {"FFFFFF", Boss坐标} //这个不点击

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindColorTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findcolor 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
命令名称: zm.FindColorTap 超级找色点击
功能说明: zm.findcolor 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号坐标颜色 = zm.FindColorTap([对象,][x1,y1,x2,y2,][颜色][,方向][,相似度[,智能相似度[,相似度步长]]][,查找次数][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`1.0`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 在调试日志信息中加入该内容, 比如`”@拾取屠龙刀”`, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindColor()相同
Dim ret
//找到颜色后执行点击
ret = zm.FindColorTap("00AAFF", 0.9)
If ret Then
    TracePrint "颜色找到并执行了点击"
Else
    TracePrint "没有找到颜色, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
命令名称: zm.FindMultiColor 超级多点找色
功能说明: findmulticolor 更加强大的命令, 具体特色如下

– 支持多个多点找色数据, 并且返回找到的序号, 详见示例
– 想找会变化的动态图? 请看下面示例
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindmulticolor 来自定义修改
– 担心一次找不到颜色? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 查找方向的数值总是记不住? 直接用中文 `”左上”,”中心”,”右上”,”左下”,”右下”,…` 来代替
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的颜色值
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据, 多点数据比较特殊, 详见示例
– 需要防检测点击功能? 推荐使用 zm.findmulticolortap
– 需要遍历多个对象数组? 推荐使用 zm.findmulticolortable
– 需要返回所有找到的坐标? 推荐使用 zm.findmulticolorex

语法格式: 序号坐标颜色 = zm.FindMultiColor([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
第一点颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″, 后面必须跟偏移颜色组, 支持多参数, 详见示例
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
//表示查找两个多点找色数据, 分别是"BDBDBD","56|33|614B6B"和"242424","-10|2|ABC54A,9|4|12DC67"
//支持无限添加多点找色数据, 只要按照格式"第一点颜色","偏移颜色组"依次添加即可
ret = zm.FindMultiColor("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67")
If ret Then
    TracePrint "颜色找到并执行了点击"
Else
    TracePrint "没有找到颜色, 不执行点击"
End If

//--------------------查找变化动态图--------------------//
Dim ret
//原理: 用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
//     说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
//     那么对每一次截图采集一些多点找色数据, 然后让脚本循环多次查找这些数据
//     只要任何一个数据找到了, 都可以认为是找到这个动态图了
//     所以可以使用本命令的无限添加多点数据与设置超时时间来实现
//     想提高查找速度的话, 建议缩小范围, 提高相似度
ret = zm.FindMultiColor("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67",5000)
If ret Then
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "颜色=" & ret(3)
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写, 除对象参数外, 其他参数都要写在范围后面
If zm.FindMultiColor(100, 200, 300, 400, "000000", "44|42|565656", 0.8, 返回数组) Then
    TracePrint "找到序号" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "颜色=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//范围后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//注意, "第一点颜色","偏移颜色组"这两个参数必须连在一起, 详见上面参数介绍
//这句代码意思如下:
//在范围(100,200,300,400)里, 以相似度为(0.8)的设置, 从("中心")向四周循环多点找色查找最多2秒钟
//第一点为("00AAFF")偏移颜色组为("42|42|565656")和第一点为("DD58FF")偏移颜色组为("3|4|A25C6D")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_39")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindMultiColor(100, 200, 300, 400, "00AAFF", "42|42|565656", 0.8, 2000, "中心", "DD58FF", "3|4|A25C6D", True, "显示", "@怪物1", 返回数组, "_39")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_46"), 则表示重写对象里的("_36"), 使日志输出显示在46行
//注意, 多点找色数据不会被覆盖重写, 只会被追加, 相当于所有的多点找色数据都会被用来查找
Dim 史莱姆 = {"00AAFF", "42|42|565656", 0.8, 2000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindMultiColor 史莱姆, 100, 200, 300, 400, "_46", "DD58FF", "3|4|A25C6D"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindMultiColor() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindMultiColor() 命令帮助
zm.SetFindMultiColor {"ret":IXYs, "showlog":"显示"}
If zm.FindMultiColor("00AAFF", "42|42|565656") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "颜色=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "颜色=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "颜色=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点找色数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
偏移颜色组是指相对于第一个点的偏移坐标与颜色,比如第一个点颜色123456在100,120坐标,第二个点颜色abcdef在150,180坐标,那么点2相对于点1的偏移坐标就是150-100,180-120,偏移颜色组为“50|60|abcdef”。
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到颜色值
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时和等待消失无效的问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findmulticolortap
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindMultiColorEx 超级多点找色返回所有坐标
功能说明: zm.findmulticolor 类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组
语法格式: 序号坐标颜色 = zm.FindMultiColorEx([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击坐标][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
第一点颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″, 后面必须跟偏移颜色组, 支持多参数, 详见示例
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: table, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 找到返回结果保存到表中, 格式为`{ {id, x, y}, …, “xy”:{id:{ {x,y}, …}, …}, “id”:{id, …}, “counts”:数量, “miss”:miss}`, 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindMultiColorEx("BDBDBD", "56|33|614B6B", "000000", "56|33|614B6B")
If ret Then
    TracePrint "颜色找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint "颜色序号:", ret(i, 0), " 坐标:", ret(i, 1), ret(i, 2)
    Next

    TracePrint "第2种:遍历键名"
    For Each k , v In ret["xy"]
    	For Each xy In v
    		TracePrint "颜色序号:", k, " 坐标:", xy[1], xy[2]
    	Next
    Next
    
    TracePrint "第3种:获取指定颜色序号的坐标"
    If ret["xy"][2] Then 
    	For Each xy In ret["xy"][2]
    		TracePrint "颜色序号2的找到坐标:", xy[1], xy[2]
    	Next
    Else 
    	TracePrint "颜色序号2没有找到"
    End If
Else
    TracePrint "没有找到颜色"
End If
备注: 该命令与 zm.findmulticolor 类似, 唯一区别在于返回内容是找到的所有坐标二维数组
V2.1829: 加入命令
V3.1830:
函数名从`zm.FindMultiColorAll()`改为`zm.FindMultiColorEx()`
返回值格式改动, 具体看帮助
V3.1831: 修复返回值被前次结果覆盖的问题
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindMultiColorTable 超级多点找色遍历
功能说明: zm.findmulticolor 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindMultiColorTable(对象table)
命令参数: 对象table: table, 把 zm.findmulticolor 的对象参数放入table数组中, 实现遍历多点找色
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 全部没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"00AAFF", "44|12|F01BA0-101010", true}
打怪["黑龙"] = {100,200,300,400, "1155BB", "11|-2|F01123", true}
打怪["紫猫BOSS"] = {"FFFFFF", "-55|102|000000", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindMultiColorTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findmulticolor 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindMultiColorTap 超级多点找色点击
功能说明: zm.findmulticolor 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号坐标颜色 = zm.FindMultiColorTap([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
第一点颜色: 字符串, 可选, 要查找的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″, 后面必须跟偏移颜色组, 支持多参数, 详见示例
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindMultiColor()相同
Dim ret
ret = zm.FindMultiColorTap("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67")
If ret Then
    TracePrint "颜色找到并执行了点击"
Else
    TracePrint "没有找到颜色, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
多点找色数据请通过抓抓进行获取
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
偏移颜色组是指相对于第一个点的偏移坐标与颜色,比如第一个点颜色123456在100,120坐标,第二个点颜色abcdef在150,180坐标,那么点2相对于点1的偏移坐标就是150-100,180-120,偏移颜色组为“50|60|abcdef”。
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
V3.1852:
偏移颜色组参数支持带小数点坐标
启用检测是否消失功能后, 返回最后一次出现的坐标与序号, 保存在键名`missx`, `missy`, `missid`中
命令名称: zm.FindPic 超级找图
功能说明: findpic 更加强大的命令, 具体特色如下

– 想找会变化的动态图? 请看下面示例
– 附件Attachment单词太长? 那就直接省略掉, 只写图片文件名
– 想要兼容多套分辨率? 那就指定pic路径默认值为当前分辨率与dpi
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindpic 来自定义修改
– 担心一次找不到图片? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 查找方向的数值总是记不住? 直接用中文 `”左上”,”中心”,”右上”,”左下”,”右下”,…` 来代替
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的图片名
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.findpictap
– 需要遍历多个对象数组? 推荐使用 zm.findpictable

语法格式: 序号坐标图片名 = zm.FindPic([对象,][x1,y1,x2,y2,][图片][,偏色][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
图片: 字符串, 可选, 查找的图片路径, 多个图片路径用“|”隔开, 支持透明图, 支持PNG BMP JPG等格式
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为”000000″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
//一张图片名实现附件找图功能, 省略了Attachment:
ret = zm.FindPic("图片.png")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "图片名=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "图片名=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "图片名=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------查找变化动态图--------------------//
Dim ret
//原理: 用抓抓截图后, 图片是静止不变的, 多次截图可以获取到不同的画面
//      说明所谓的动态图其实就是由一些静止不动的画面来回切换实现的
//      那么对每一次截图并保存下来, 只要任何一张图找到了, 都可以认为是找到这个动态图了
//      所以可以使用本命令设置超时时间来实现
//      想提高查找速度的话, 建议缩小范围, 提高相似度
ret = zm.FindPic("图片1.png|图片2.png|图片3.png",5000)
If ret Then
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "图片名=" & ret(3)
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//范围省略默认为全屏, 若填写, 则4个数字必须全写, 除对象参数外, 其他参数都要写在范围后面
If zm.FindPic(100, 200, 300, 400, "图片1.bmp|Attachment:图片2.png|/sdcard/图片3.jpg", 0.8, 返回数组) Then
    TracePrint "找到序号" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "图片名=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//范围后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//注意, "第一点颜色","偏移颜色组"这两个参数必须连在一起, 详见上面参数介绍
//这句代码意思如下:
//在范围(100,200,300,400)里, 以相似度为(0.8)的设置, 从("中心")向四周循环查找("图片.png")最多2秒钟
//找到任何一张后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_54")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindPic(100, 200, 300, 400, "图片.png", 0.8, 2000, "中心", True, "显示", "@怪物1", 返回数组, "_54")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
//如果参数对象后面还有参数, 比如("_46"), 则表示重写对象里的("_36"), 使日志输出显示在65行
Dim 史莱姆 = {"图片.png", 0.8, 2000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindPic 史莱姆, "_65", "史莱姆.bmp"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindPic() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindPic() 命令帮助
zm.SetFindPic {"ret":IXYs, "showlog":"显示"}
If zm.FindPic("图片.png") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "图片名=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "图片名=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "图片名=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
透明图是指当你图片4个角的颜色均相同时,则这张图片中所有这个颜色将被视为透明色,在找图匹配点过程中忽略这些点的颜色。另外,透明图也支持PNG格式图片中的透明点。
更多详细说明与例子见
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到图片名
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findpictap
命令名称: zm.FindPicEx 超级找图返回所有坐标
功能说明: zm.findpic 类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组
语法格式: 结果 = zm.FindPicEx([对象,][x1,y1,x2,y2,][图片][,偏色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
图片: 字符串, 可选, 查找的图片路径, 多个图片路径用“|”隔开, 支持透明图, 支持PNG BMP JPG等格式
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为”000000″
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: table: 找到返回结果保存到表中, 格式为`{ {id, x, y}, …, “xy”:{id:{ {x,y}, …}, …}, “id”:{id, …}, “counts”:数量, “miss”:miss}`, 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindPicEx("紫猫.png|学院.bmp|/sdcard/test.png")
If ret Then
    TracePrint "图片找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint "图片序号:", ret(i, 0), " 坐标:", ret(i, 1), ret(i, 2)
    Next

    TracePrint "第2种:遍历键名"
    For Each k , v In ret["xy"]
    	For Each xy In v
    		TracePrint "图片序号:", k, " 坐标:", xy[1], xy[2]
    	Next
    Next
    
    TracePrint "第3种:获取指定图片序号的坐标"
    If ret["xy"][2] Then 
    	For Each xy In ret["xy"][2]
    		TracePrint "图片序号2的找到坐标:", xy[1], xy[2]
    	Next
    Else 
    	TracePrint "图片序号2没有找到"
    End If
Else
    TracePrint "没有找到图片"
End If
备注: 该命令与 zm.findpic 类似, 区别在于返回内容是找到的所有坐标二维数组
V3.1831: 加入命令
命令名称: zm.FindPicTable 超级找图遍历
功能说明: zm.findpic 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindPicTable(对象table)
命令参数: 对象table: table, 把 zm.findpic 的对象参数放入table数组中, 实现遍历找图
返回值: 查找结果, table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 全部没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆1.bmp|史莱姆2.png", true}
打怪["黑龙"] = {100,200,300,400, "龙.png", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师.png", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindPicTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findpic 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
命令名称: zm.FindPicTap 超级找图点击
功能说明: zm.findpic 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号坐标图片名 = zm.FindPicTap([对象,][x1,y1,x2,y2,][图片][,偏色][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
图片: 字符串, 可选, 查找的图片路径, 多个图片路径用“|”隔开, 支持透明图, 支持PNG BMP JPG等格式
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为”000000″
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`”左上”`, 支持`[“左上”,”中心”,”右上”,”左下”,”右下”,”上左”,”上右”,”下左”,”下右”]`这几个值
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindPic()相同
Dim ret
ret = zm.FindPicTap("图片.png")
If ret Then
    TracePrint "图片找到并执行了点击"
Else
    TracePrint "没有找到图片, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
透明图是指当你图片4个角的颜色均相同时,则这张图片中所有这个颜色将被视为透明色,在找图匹配点过程中忽略这些点的颜色。另外,透明图也支持PNG格式图片中的透明点。
更多详细说明与例子见
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
命令名称: zm.FindStr 超级找字
功能说明: findstr 更加强大的命令, 具体特色如下

– 不想记设置字库与切换字库命令? 本命令已集成这两个功能, 只要填写参数即可
– 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
– 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
– 省略参数的默认值不理想? 可使用 zm.setfindstr 来自定义修改
– 担心一次找不到文字? 自由设置限时循环查找时间, 提高成功率
– 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
– 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
– 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
– 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
– 返回值中有序号, 坐标, 还有对应的文字内容
– 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
– 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
– 需要防检测点击功能? 推荐使用 zm.findstrtap
– 需要遍历多个对象数组? 推荐使用 zm.findstrtable

语法格式: 序号与坐标 = zm.FindStr([对象,][x1,y1,x2,y2,][文字][,颜色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,字库文件名][,字库序号][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
颜色: 字符串, 可选, 要文字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
字库文件名: 字符串, 可选, 填写字库的文件名即可, 附件路径`”Attachment:”`可以省略不写
字库序号: 字符串, 可选, 切换字库序号, 0号字库填写`”#0″`, 以此类推, 当填写字库文件名, 不填字库序号时, 默认设置并使用9号字库
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为找到的坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
Dim ret
SetDictEx 0, "Attachment:mq_soft.txt"
UseDict 0
//默认全屏查找颜色为"FFFFFF-101010"的"紫猫学院"这4个字
ret = zm.FindStr("紫猫学院", "FFFFFF-101010")
If ret Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & ret(0), "x=" & ret(1), "y=" & ret(2), "文字=" & ret(3)
    TracePrint "找到序号" & ret[1], "x=" & ret[2], "y=" & ret[3], "文字=" & ret[4]
    TracePrint "找到序号" & ret["id"], "x=" & ret["x"], "y=" & ret["y"], "文字=" & ret["name"]
Else
    TracePrint "没有找到"
End If

//--------------------中级用法--------------------//
Dim 返回数组()
//参数返回值必须是任意数组的变量名, 注意括号写法
//设置附件的"mq_soft.txt"为9号字库, 注意, 所有找字命令都会默认使用此字库
//范围省略默认为全屏, 若填写, 则4个数字必须全写, 除对象参数外, 其他参数都要写在范围后面
If zm.FindStr(100, 200, 300, 400, "紫猫学院", "FFFFFF-101010", "mq_soft.txt", 返回数组) Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号=" & 返回数组(0), "x=" & 返回数组(1), "y=" & 返回数组(2), "文字=" & 返回数组(3)
    TracePrint "找到序号=" & 返回数组[1], "x=" & 返回数组[2], "y=" & 返回数组[3], "文字=" & 返回数组[4]
    TracePrint "找到序号=" & 返回数组["id"], "x=" & 返回数组["x"], "y=" & 返回数组["y"], "文字=" & 返回数组["name"]
Else
    TracePrint "没有找到"
End If

//--------------------高级用法--------------------//
//文字后面的可选参数全部可以打乱顺序任意填写或省略, 只要数据类型与格式正确即可
//这句代码意思如下:
//在范围(100,200,300,400)里, 相似度为(0.8), 设置附件字库("mq_soft.txt")为("1")号字库
//限时2000毫秒内循环查找颜色为("FFFFFF-101010")的("紫猫|学院")
//找到任何一个后退出循环查找, 然后点击找到的坐标(True), 并将找到的序号与坐标结果保存到数组变量(ret)与(返回数组)中
//同时开启日志的输出("显示")功能, 在当前脚本第("_40")行输出备注("@怪物1"), 查找结果与其他参数信息
ret = zm.FindStr(100, 200, 300, 400, "紫猫|学院", "FFFFFF-101010", 0.8, 2000, True, "mq_soft.txt", "#1", "显示", "@怪物1", 返回数组, "_40")
If ret Then
    TracePrint "找到了"
Else
    TracePrint "没有找到"
End If

//--------------------对象用法--------------------//
//可以把所有参数放到一个表中, 可选参数一样可以打乱顺序任意填写或省略
//对象参数必须填写在第一个参数位置
Dim 史莱姆 = {"紫猫|学院", 0.8, 3000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStr 史莱姆

//--------------------重写用法--------------------//
//如果参数对象后面还有参数, 比如("_56"), 则表示重写对象里的("_36"), 使日志输出显示在65行
//注意, 如果重写, 则必须给参数文字带前缀"$", 比如"$紫猫|学院"
Dim 史莱姆 = {"$紫猫|学院", 0.8, 1000, True, "显示", "@攻击史莱姆", 返回数组, "_36"}
zm.FindStr 史莱姆, "$喵星人", "FFFFFF-101010", 1.0, "_56"

//--------------------修改默认值--------------------//
Dim IXYs()
//设置默认参数返回值IXYs, 若命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 zm.FindStr() 都默认输出调试信息
//更多修改默认设置详见 zm.SetFindStr() 命令帮助
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStr("喵星人", "00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2), "文字=" & IXYs(3)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3], "文字=" & IXYs[4]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"], "文字=" & IXYs["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
当区域范围均为0时,表示全屏查找文字,强烈建议缩小范围查找,这样可以提高效率。
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
颜色格式为“BGR”,目前不支持HSV颜色、不支持背景色识别。
目前只支持附件中的字库,不支持绝对路径,故更新字库后,一定要记得更新附件。
参数字库文件名仅支持新版抓抓制作的字库, 若使用大漠字库, 请用官方命令设置
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V1.1746: 加入点击坐标参数
V1.1750: 删除随机范围点击功能, 加入智能相似度参数
V1.1802:
支持 zm.settap 的随机点击
通过 keepcapture 加快超级图色查找速度
优化部分参数判定, 兼容更多乱序参数
返回值加入找到文字
V1.1803: 支持超级缩放命令, 点击功能只受是否点击参数影响
V1.1804: 加入找到后等待消失可选参数
V1.1813: 修复点击参数不继承`zm.SetTap()`设置延时问题, 感谢`likanglong`反馈
V1.1818:
修复由超级缩放命令引起的自动点击坐标0,0问题, 感谢`ersheep`反馈此BUG
修复超级图色输出是否点击异常, 感谢`2578学员`反馈此BUG
V2.1826: 为智能相似度增加另一种方便的写法, 旧语法依旧有效
V2.1828: 若要点击找到坐标, 推荐使用 zm.findstrtap
命令名称: zm.FindStrTable 超级找字遍历
功能说明: zm.findstr 类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindStrTable(对象table)
命令参数: 对象table: table, 把 zm.findstr 的对象参数放入table数组中, 实现遍历找字
返回值: table: 找到返回结果保存到表中, 格式为`{“success”:找到数量, “fail”:没找到数量, “键名”:{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}, …}`, 没找到或失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//此处省略了设置字库的代码, 请自行补充完善

Dim 打怪(), Boss坐标()
打怪["史莱姆"] = {"史莱姆", "000000", true}
打怪["黑龙"] = {100,200,300,400, "黑龙", "123ABC-303030", true}
打怪["紫猫BOSS"] = {"帅气的紫猫老师","FFFFFF", Boss坐标} //这个不点击, 并返回值保存在Boss坐标中

//遍历打怪数组, 返回每个对象成员的结果
Dim t = zm.FindStrTable(打怪)
If t Then
    TracePrint "找到了", t["success"], "个对象"
    TracePrint "没找到", t["fail"], "个对象"
    If t["史莱姆"] Then
        TracePrint "找到史莱姆, 坐标为", t["史莱姆"]["x"], t["史莱姆"]["y"]
    End If
Else
    TracePrint "所有对象都没有找到"
End If

If Boss坐标(0) > -1 Then
    TracePrint "紫猫BOSS对象里的返回参数依旧有效"
End If
备注: 该命令与 zm.findstr 类似, 唯一区别在于参数只有一个对象table, 可以遍历所有对象
V2.1829: 加入命令
命令名称: zm.FindStrTap 超级找字点击
功能说明: zm.findstr 类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 序号与坐标 = zm.FindStrTap([对象,][x1,y1,x2,y2,][文字][,颜色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,字库文件名][,字库序号][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x1: 数值型, 可选, 查找范围的左上角x坐标, 省略默认为0
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为0
x2: 数值型, 可选, 查找范围的右下角x坐标, 省略默认为0
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为0
文字: 字符串, 可选, 查找的文字内容, 多个文字用“|”隔开, 可以用`$`开头表示文字参数
颜色: 字符串, 可选, 要文字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如”FFFFFF-101010|123456″
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
字库文件名: 字符串, 可选, 填写字库的文件名即可, 附件路径`”Attachment:”`可以省略不写
字库序号: 字符串, 可选, 切换字库序号, 0号字库填写`”#0″`, 以此类推, 当填写字库文件名, 不填字库序号时, 默认设置并使用9号字库
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`”±x,±y,t”`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`”100,100″`表示固定点击坐标100,100, `”+10,-10″`表示偏移点击找到的x+10,y-10位置, `”10,10,2000″`表示点击10,10坐标后延时2000毫秒, 该参数会受 zm.settap 影响
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为”隐藏”, 支持`[“显示”,”隐藏”,”show”,”hide”]`这几个值
输出行号: 字符串, 可选, 格式为`”_”`开头后跟行号, 比如`”_10″`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为`”@”`开头后跟内容, 比如`”@拾取屠龙刀”`, 输出调试信息窗口就会增加这条内容, 若连续两个`”@@”`则表示在浮窗中显示信息, 需要开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填-1和-2, 省略默认为`-2000`
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, “id”:id, “x”:x, “y”:y, “name”:name, “miss”:miss}`, 没找到或出错返回null, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindStr()相同
Dim ret
SetDictEx 0, "Attachment:mq_soft.txt"
UseDict 0
ret = zm.FindStrTap("紫猫学院", "FFFFFF-101010")
If ret Then
    TracePrint "文字找到并执行了点击"
Else
    TracePrint "没有找到文字, 不执行点击"
End If
备注: 内置找到后点击坐标, 无法取消, 建议需要点击操作的超级图色使用本命令, 方便代码阅读理解
该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
当区域范围均为0时,表示全屏查找文字,强烈建议缩小范围查找,这样可以提高效率。
偏色是微调,指对RBG三色分别确定取色范围。相似度是粗调,指对颜色整体做百分比判断。
颜色格式为“BGR”,目前不支持HSV颜色、不支持背景色识别。
目前只支持附件中的字库,不支持绝对路径,故更新字库后,一定要记得更新附件。
参数字库文件名仅支持新版抓抓制作的字库, 若使用大漠字库, 请用官方命令设置
V1.1820: 加入命令
V2.1826
为智能相似度增加另一种方便的写法, 旧语法依旧有效
命令名称: zm.SetCmpColorEx 设置CmpColorEx默认参数
功能说明: 修改 zm.cmpcolorex 的默认参数值。
语法格式: 默认值 = zm.SetCmpColorEx(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
sim | 0.9 | 数值型 | 默认颜色相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
numsim | “1.0” | 字符串 | 默认数量相似度, 取值范围[0, 1.0], 越高越相似
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环对比间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 对比成功后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找色命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级多点比色 都默认输出调试信息
zm.SetCmpColorEx {"ret":IXYs, "showlog":"显示"}
If zm.CmpColorEx("51|66|00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动颜色相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetCmpColorEx(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V3.1830: 加入命令
V3.1835: 加入循环对比间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.SetFindColor 设置FindColor默认参数
功能说明: 修改 zm.findcolor 的默认参数值。
语法格式: 默认值 = zm.SetFindColor(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
color | “” | 字符串 | 默认查找的十六进制颜色值
dir | “左上” | 字符串 | 默认从左上开始查找, 可选[“左上”,”中心”,”右上”,”左下”,”右下”]这几个值
sim | 1.0 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找色命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级找色 都默认输出调试信息
zm.SetFindColor {"ret":IXYs, "showlog":"显示"}
If zm.FindColor("00AAFF") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindColor(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.SetFindMultiColor 设置FindMultiColor默认参数
功能说明: 修改 zm.findmulticolor 的默认参数值。
语法格式: 默认值 = zm.SetFindMultiColor(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
dir | “左上” | 字符串 | 默认从左上开始查找, 可选[“左上”,”中心”,”右上”,”左下”,”右下”]这几个值
sim | 0.9 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若多点找色命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级多点找色 都默认输出调试信息
zm.SetFindMultiColor {"ret":IXYs, "showlog":"显示"}
If zm.FindMultiColor("00AAFF", "1|4|1432AB") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindMultiColor(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
v3.1852
偏移颜色组参数可以通过 zm.setfindmulticolor 设置 `”offsetxy”:1` 属性或其他数字, 实现偏移坐标再次变动功能, 该属性不支持 zm.findmulticolorex
命令名称: zm.SetFindPic 设置FindPic默认参数
功能说明: 修改 zm.findpic 的默认参数值。
语法格式: 默认值 = zm.SetFindPic(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.9, “showlog”:”显示”}表示修改相似度默认为0.9, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
pic | “Attachment:” | 字符串 | 默认图片路径, 当参数图片只写文件名时, 自动附加此路径
color | “000000” | 字符串 | 默认图片偏色
dir | “左上” | 字符串 | 默认从左上开始查找, 可选[“左上”,”中心”,”右上”,”左下”,”右下”]这几个值
sim | 0.8 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找图命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级找图 都默认输出调试信息
zm.SetFindPic {"ret":IXYs, "showlog":"显示"}
If zm.FindPic("紫猫.bmp") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到颜色序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到颜色序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到颜色序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindPic(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.SetFindStr 设置FindStr默认参数
功能说明: 修改 zm.findstr 的默认参数值。
语法格式: 默认值 = zm.SetFindStr(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如{“sim”:0.8, “showlog”:”显示”}表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
x1 | 0 | 数值型 | 查找范围左上角x坐标
y1 | 0 | 数值型 | 查找范围左上角y坐标
x2 | 0 | 数值型 | 查找范围右下角x坐标
y2 | 0 | 数值型 | 查找范围右下角y坐标
color | “000000” | 字符串 | 默认文字颜色
sim | 0.9 | 数值型 | 默认相似度, 取值范围[0, 1.0], 越高越相似
autosim | “” | 字符串 | 默认智能相似度, 格式为”最低相似度-最高相似度-相似度步长”
timeout | 1 | 数值型 | 默认超时时间, 默认1毫秒
delaytime | 10 | 数值型 | 循环查找间隔时间, 开启超时时间参数后, 如果发现设备出现卡顿, 可加大delaytime
delaytap | 0 | 数值型 | 找到后如果要点击, 则延时一段时间再点击
tap | false | 布尔型 | 找到后是否点击, 默认不点击
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值
ret | null | 数组型 | 参数返回值, 只能写数组变量名, 设置后, 若命令不带参数返回值, 则默认返回到此变量中

返回值: 表: 返回所有默认属性值, 可使用 `For Each` 遍历查看
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim IXYs() //预定义默认参数返回数组
//设置默认参数返回值IXYs, 若找字命令不填写参数返回值, 则默认保存在该变量中
//设置默认日志输出为显示状态, 后面所有 超级找字 都默认输出调试信息
zm.SetFindStr {"ret":IXYs, "showlog":"显示"}
If zm.FindStr("紫猫|学院", "FBFBFB-202020", "0", "mq_soft.txt") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & IXYs(0), "x=" & IXYs(1), "y=" & IXYs(2)
    TracePrint "找到序号" & IXYs[1], "x=" & IXYs[2], "y=" & IXYs[3]
    TracePrint "找到序号" & IXYs["id"], "x=" & IXYs["x"], "y=" & IXYs["y"]
End If

//默认值改动后, 效果会一直存在, 并且可以随时增加新的变化
//此处改动相似度默认为0.8, 超时时间为5000毫秒, 并将日志改为隐藏, 找到后自动点击一次
Dim t = {"sim":0.8, "timeout":5000, "tap":true, "showlog":"hide"}
Dim ret = zm.SetFindStr(t)
//可以通过For Each查看目前所有默认属性值, 参数列表中未出现的属性不建议修改
TracePrint "属性名:属性值"
For Each k , v In ret
    TracePrint k, ":", v
Next
备注: 请严格按照参数列表的属性名与数据类型进行赋值改动
V1.1741: 加入命令
V1.1745: 查找次数参数修改为超时参数, 加入自定义日志备注与行号, 其中设置相关的属性也有所变动
V3.1835: 加入循环查找间隔时间
V3.1849:
加入延时点击属性`delaytap`
修改循环间隔时间默认为10毫秒
命令名称: zm.KeyPress 超级按键
功能说明: 按下并弹起一个按键, 可加入随机延时防检测
语法格式: 结果 = zm.KeyPress([对象][按键[, 间隔毫秒[, 随机毫秒]]][, 显示日志][, 输出行号][, 备注])
命令参数: 对象: table, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据, 省略默认为null
按键: 字符串_或_数值型, 可选, 字符串时表示某个键的名字, 数值时表示某个键的编码, 填写对象参数后可省略
间隔毫秒: 数值型, 可选, 按下与弹起之间的间隔时间, -1表示与自带KeyPress相同, 单位毫秒, 省略默认为-1
随机毫秒: 数值型, 可选, 与间隔毫秒组成随机数范围, -1表示不随机, 单位毫秒, 省略默认为-1
显示日志: 字符串, 可选, 输出调试日志信息, 支持[“显示”,”隐藏”,”show”,”hide”]这几个值, 省略默认为”隐藏”
输出行号: 字符串, 可选, 格式为”_”开头后跟行号, 比如”_10″表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
备注: 字符串, 可选, 格式为”@”开头后跟内容, 比如”@拾取屠龙刀”, 输出调试信息窗口就会增加这条内容, 若连续两个”@@”则表示在浮窗中显示信息, 需要开启显示日志才有效
返回值: table: 返回实际按键与间隔时间表, 格式为{key,t,”key”:key,”t”:t}, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//按住电源键3秒后松开
zm.KeyPress "power", 3000

//按住音量+随机3到5秒
zm.KeyPress "VolUp", 3000, 5000
备注: V3.1835: 初次加入
命令名称: zm.KeyPressCopy 按下复制键
功能说明: 模拟按下快捷键复制文本, 类似于`Ctrl+C`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressCopy(是否关闭菜单)
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressCopy()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressCut 按下剪贴键
功能说明: 模拟按下快捷键剪贴文本, 类似于`Ctrl+X`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressCut(是否关闭菜单)
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressCut()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressDel 按下删除键
功能说明: 删除文本内容, 可以向左或向右删除, 也可以删除当前一行内容, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressDel([方向])
命令参数: 方向: 数值型, 可选, 0表示删除光标左边的字符, 1表示删除光标右边的字符, 2表示删除当前一行内容, 省略默认为0
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressDel()   //删除左边的
zm.KeyPressDel(1)  //删除右边的
zm.KeyPressDel(2)  //删除一整行
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressPaste 按下粘贴键
功能说明: 模拟按下快捷键粘贴文本, 类似于`Ctrl+V`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressPaste(是否关闭菜单)
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressPaste()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressScreenShot 按下截图键
功能说明: 按下截图键自动保存, 注意, 部分设备的截图文件夹位置可能不一致, 需要手动设置
语法格式: 结果 = zm.KeyPressScreenShot([截图文件夹][, 保存路径])
命令参数: 截图文件夹: 字符串, 可选, 指定设备默认截图文件夹路径, 大部分设备默认路径为”/sdcard/Pictures/Screenshots/”, 截图路径不对时, 请手动截图一次查看截图文件夹路径, 本参数必须以”/”结尾
保存路径: 字符串, 可选, 复制截取的图片到指定文件路径, 省略默认不复制
返回值: 字符串: 返回默认保存到截图文件夹的图片路径, 不受参数2影响
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path
path = zm.KeyPressScreenShot() //按下截图键保存
TracePrint path
备注: 注意, 部分设备的截图文件夹位置可能不一致, 请手动截图一次查看截图文件夹路径, 再传入到截图文件夹参数中
V3.1852: 初次加入命令
命令名称: zm.KeyPressSelectAll 按下全选键
功能说明: 模拟按下快捷键粘贴文本, 类似于`Ctrl+A`, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressSelectAll([是否关闭菜单])
命令参数: 是否关闭菜单: 布尔型, 可选, 部分设备或app按下组合键后会出现菜单, 省略默认false
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressSelectAll()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.KeyPressStr 模拟按键输入
功能说明: 模拟KeyPress输入字符串内容, 在InputText无效情况下尝试使用, 仅支持小写字母, 数字, 英文标点符号, 不支持大写字母, 中文!
语法格式: 结果 = zm.KeyPressStr(按键字符串[, 间隔毫秒])
命令参数: 按键字符串: 字符串, 待输入的字符串内容, 仅支持小写字母, 数字, 英文标点符号, 不支持大写字母, 中文
间隔毫秒: 数值型, 可选, 两个字符串之间按键间隔时间, 单位毫秒, 省略默认为200
返回值: 布尔型: 成功返回true, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//输入abc,def
zm.KeyPressStr "abc,def"
备注: 命令原型是使用KeyPress命令模拟按下字符串参数的每一个字符键, 所以不支持中文, 大写字母之类的字符!
V3.1835: 初次加入
命令名称: zm.KeyPressSwitch 打开运行程序列表
功能说明: 打开当前后台程序列表, 类似于切换应用的键, 注意, 部分设备或App可能存在不兼容导致失效情况!
语法格式: 结果 = zm.KeyPressSwitch()
命令参数:
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.KeyPressSwitch()
备注: 注意, 部分设备或App可能存在不兼容导致失效情况!
V3.1852: 初次加入命令
命令名称: zm.SetKeyPress 设置超级按键
功能说明: 修改 ` zm.keypress ` 的默认参数值
语法格式: 结果 = zm.SetKeyPress(属性表)
命令参数: 属性表: table, 按照指定格式对表中的键值对进行赋值, 例如{“t”:100, “rndt”:200, “showlog”:”显示”}表示修改按下与弹起之间随机延时100到200毫秒, 日志输出默认为显示, 更多属性见下面表格

属性 | 默认值 | 数据类型 | 解释
—|—–|——|—
t | -1 | 数值型 | 按下与弹起的间隔毫秒, -1表示KeyPress的默认值
rndt | -1 | 数值型 | 与间隔毫秒组成随机数范围, -1表示不随机
showlog | “隐藏” | 字符串 | 日志输出显示, 可选[“显示”,”隐藏”,”show”,”hide”]这几个值

返回值: table: 返回设置后的参数列表, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//设置按键按下与弹起之间的间隔时间为随机1000毫秒到2000毫秒
zm.SetKeyPress {"t":1000, "rndt":2000}
备注: V3.1835: 初次加入
命令名称: zm.RndArrElement 随机数组元素
功能说明: 从一维数组的指定下标范围随机取元素。
语法格式: 结果 = zm.RndArrElement(一维数组[, 起始下标[, 终止下标]])
命令参数: 一维数组: 数组型, 待随机取值的一维数组。
起始下标: 数值型, 可选参数,表示下标随机范围,当终止下标省略时,随机0到起始下标。
终止下标: 数值型, 可选参数,表示下标随机范围,当起始下标省略时,随机0到最大下标。
返回值: 任意类型:返回随机到的数组元素。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {"紫", "猫", "编", "程", "学", "院", 345911220}
Dim s = zm.RndArrElement(a)
TracePrint s
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次,防止出现有规律的随机。
V1.1720: 加入命令
命令名称: zm.RndInitSeed 初始化随机种子
功能说明: 使用socket库初始化随机种子, 防止规律随机, 建议省略参数, zm.Init()内部已经执行此函数, 无需重复调用
语法格式: 结果 = zm.RndInitSeed([种子])
命令参数: 种子: 数值型, 可选, 要初始化的种子, 省略默认将对当前时间计算获取种子值
返回值: 数值型:返回随机数种子
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.RndInitSeed //如果你开头执行过zm.Init()命令, 则无需再调用本命令
备注: V1.1720: 加入命令
V1.1730: 修复报错问题
V1.1738: 优化提示
命令名称: zm.RndName 随机取姓名
功能说明: 随机取姓名,可以指定性别。
语法格式: 结果 = zm.RndName([性别])
命令参数: 性别: 数值型, 可选参数,表示取姓名的性别,0为女性,1为男性,默认省略为null,表示全随机。
返回值: 字符串:返回随机姓名结果
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim name = zm.RndName()
TracePrint name
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
V1.1720: 加入命令
命令名称: zm.RndNum 随机整数
功能说明: 获取指定范围的随机数,两个参数不区分大小顺序。
语法格式: 结果 = zm.RndNum(m, n)
命令参数: m: 数值型, 可选参数,最大值或最小值,省略默认为0。
n: 数值型, 可选参数,最大值或最小值,省略默认为0。
返回值: 数值型:返回参数范围的随机整数。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RndNum(100, 10) //随机10到100
TracePrint zm.RndNum(10, 100) //随机10到100
TracePrint zm.RndNum(100)     //随机0到100
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
V1.1720: 加入命令
命令名称: zm.RndPos 随机坐标
功能说明: 从多个坐标中随机获取一个坐标与序号
语法格式: 结果 = zm.RndPos([x,y,…][坐标数组,…])
命令参数: x: 数值型, 横坐标数值, 与坐标数组参数二选一, 详见例子
y: 数值型, 纵坐标数值, 与坐标数组参数二选一, 详见例子
坐标数组: 表, 由坐标组成的数组, 格式为{x,y}, 与坐标数值参数二选一, 详见例子
返回值: 表: 返回序号与坐标, 序号从0开始, 格式为{id, x, y}
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//------------数值坐标参数例子------------//
//支持任意数量的坐标, 只要按照x,y格式顺序填写即可
//不可以与坐标数组参数同时填写!
//下面例子是从(100,200),(300,400),(500,600)这3个坐标中随机获取一个坐标
Dim xy = zm.RndPos(100,200,300,400,500,600)
TracePrint "序号:" & xy(0), ", x坐标=" & xy(1), ", y坐标=" & xy(2)

//------------坐标数组参数例子------------//
//支持任意数量的坐标数组, 不可以与数值坐标参数同时填写!
//下面例子是从(100,200),(300,400),(500,600)这3个坐标中随机获取一个坐标
Dim xxyy = zm.RndPos({100,200},{300,400},{500,600})
TracePrint "序号:" & xxyy(0), ", x坐标=" & xxyy(1), ", y坐标=" & xxyy(2)
备注: V1.1804: 加入命令
命令名称: zm.RndStr 随机字符串
功能说明: 随机指定范围的字符串内容。
语法格式: 结果 = zm.RndStr(个数[, 模式[, 是否不重复]])
命令参数: 个数: 数值型, 随机字符个数
模式: 数值型, 可选参数,表示随机内容,详见下表格,多个类型可相加,省略默认为1+2+4
是否不重复: 布尔型, 可选参数,是否取不重复随机内容,省略默认为false

模式参数 | 表示范围
—–|—–
1 | 随机0到9的数字
2 | 随机a到z的小写字母
4 | 随机A到Z的大写字母
8 | 随机标点符号!#$%&()*+,-./:;<=>?@[\]^_`{|}~’

返回值: 字符型:随机到的字符串内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RndStr(5)
TracePrint zm.RndStr(6, 2)
TracePrint zm.RndStr(10, 1 + 4, true)
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
V1.1720: 加入命令
V1.1724: 增加随机标点符号。
V1.1802: 修复可选参数无效问题
命令名称: zm.RndUniqueArr 不重复随机数
功能说明: 从一维数组中随机取指定个数的不重复元素值。
语法格式: 结果 = zm.RndUniqueArr([数组,][ 最小值, 最大值,] 个数)
命令参数: 数组: 数组型, 可选,一维数组,待随机的数组,与最小值最大值参数二选一。
最小值: 数值型, 可选,随机最小值,与数组参数二选一。
最大值: 数值型, 可选,随机最大值,与数组参数二选一。
个数: 数值型, 可选,获取随机数的数量,省略为最大个数,即打乱顺序,洗牌功能。
返回值: 数组型:获取到的不重复随机元素。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim b = zm.RndUniqueArr(a, 5)
TracePrint zm.VarInfo(b)

//从1到10中随机取5个不重复随机数
Dim c = zm.RndUniqueArr(1,10,5)
TracePrint zm.VarInfo(c)
备注: 调用随机函数前,可用 zm.rndinitseed 运行一次。
提供的一维数组里元素不能出现重复,否则结果可能会出现重复。
V1.1720 加入命令
V1.1750 加入数字范围参数
V3.1830 从`zm.RndNoRepeatArr()`函数名改为`zm.RndUniqueArr()`
命令名称: zm.UUID 生成UUID
功能说明: 生成唯一不重复的UUID, 失败返回null, 建议在脚本开头执行一次 zm.init 后使用本命令
语法格式: 结果 = zm.UUID([格式])
命令参数: 格式: 数值型, 可选, 表示返回大小写格式, 0为小写, 1为大写, 省略默认为0
返回值: 字符串: 返回36位长度的UUID字符串, 失败返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

For 10
	TracePrint zm.UUID()
Next
备注: V1.1820: 加入命令
V3.1902: 加入返回大小写参数

JsDroid 安卓自动化插件帮助文档

Posted in 按键精灵
JsDroid 安卓自动化插件帮助文档JsDroid,是以UI界面为核心,直接作用与节点,适应任何分辨率

命令名称: JsDroid.About 介绍与帮助
详细参数: text(“String”)

text(Pattern.compile(“正则表达式”))textContains(“包含的文本”)

textEndsWith(“包含文本结尾”)

textStartsWith(“包含起始文本”)

clazz(“class”)

clazz(Pattern.compile(“正则表达式”))

clazz(Object.class)

clazz(“包名package”,”类名class”)

clickable(true/false) 是否可点击

copy(参数By选择器) 没用过

depth(整数型深度值) 深度

desc(“String”)

desc(Pattern.compile(“正则表达式”))

descContains(“包含”)

descEndsWith(“结尾”)

descStartsWith(“开头”)

enabled(true/false) 启用

focusable(true/false) 可聚焦的

focused(true/false) 聚焦的

hasChild(参数是By选择器) 添加子选择器条件 By.text(“QQ”).hasChild(By.text(“xxx”))

hasDescendant(By选择器) 添加一个后代选择器条件 By.text(“QQ”).hasDescendant(By.text(“xx”))

hasDescendant(By选择器, 整数型深度)

longClickable(true/false) 长点击

pkg(“包名”)

pkg(Pattern.compile(“正则表达式”))

res(“资源描述”)

res(Pattern.compile(“正则表达式”))

res(“包名”,”资源描述”)

scrollable(true/false) 可滚动

selected(truue/false) 可选中

命令名称: JsDroid.CheckUpdate 检查更新 [点我下载插件] 提取码fekg
语法格式: JsDroid.CheckUpdate
命令参数:
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.CheckUpdate
备注: 无。
命令名称: JsDroid.Click 点击节点
语法格式: JsDroid.Click(节点信息[,下标,超时时长])
命令参数: 参数1:必选,字符串型,节点信息。
参数2:可选,数值型,节点下标,节点初始下标为0
参数3:可选,数值型,执行超时时间,单位毫秒,默认执行10毫秒。
节点格式:
By.text(“String”)
By.text(Pattern.compile(“正则表达式”))

By.textContains(“包含的文本”)

By.textEndsWith(“包含文本结尾”)

By.textStartsWith(“包含起始文本”)

By.clazz(“class”)

By.clazz(Pattern.compile(“正则表达式”))

By.clazz(Object.class)

By.clazz(“包名package”,”类名class”)

By.desc(“String”)

By.desc(Pattern.compile(“正则表达式”))

By.descContains(“包含”)

By.descEndsWith(“结尾”)

By.descStartsWith(“开头”)

By.hasChild(参数是By选择器) 添加子选择器条件 By.text(“QQ”).hasChild(By.text(“xxx”))

By.hasDescendant(By选择器) 添加一个后代选择器条件 By.text(“QQ”).hasDescendant(By.text(“xx”))

By.hasDescendant(By选择器, 整数型深度)

By.longClickable(true/false) 长点击

By.pkg(“包名”)

By.pkg(Pattern.compile(“正则表达式”))

By.res(“资源描述”)

By.res(Pattern.compile(“正则表达式”))

By.res(“包名”,”资源描述”)

 

返回值: 布尔值型:成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
//例子1,普通点击
If JsDroid.Click("By.text('按键精灵')") Then 
	TracePrint "点击成功"
Else 
	TracePrint "点击失败"
End If
//例子2,和FindNode结合
If JsDroid.FindNode("By.text('按键精灵')","node") Then 
	TracePrint JsDroid.Click("node")
	TracePrint "点击成功"
Else 
	TracePrint "点击失败"
End If
//例子3,点击下标7的节点
TracePrint  JsDroid.Click ("By.clazz('android.widget.TextView')", 7)
//例子4,点击节点,超时2000毫秒
TracePrint  JsDroid.Click ("By.clazz('android.widget.TextView')", 2000)
//例子5,点击节点,与FindNodes结合
If JsDroid.FindNodes("By.clazz('android.widget.TextView')","nodes") Then 
	TracePrint JsDroid.Click("nodes",5)
	TracePrint "点击成功"
Else 
	TracePrint "点击失败"
End If
备注: 下标值不得小于超时时间。
命令名称: JsDroid.Code 执行JavaScript代码
语法格式: JsDroid.Code(Script)
命令参数: 参数1:字符串型,必选,JavaScript代码
返回值: 字符串型。
脚本例子:
复制代码
Import "JsDroid.luae"			
TracePrint JsDroid.Code("'Hello word!'")
备注: 无。
命令名称: JsDroid.Drag 拖动节点
语法格式: JsDroid.Drag(节点信息,X,Y,拖动速度)
命令参数: 参数1:必选,字符串型,节点信息
参数2:必选,数值型,拖动的终点X
参数3:必选,数值型,拖动的终点Y
参数4:可选,数值型,拖动速度,取值越大速度越快,忽略则默认常速,建议取值300-1000
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"			
TracePrint JsDroid.Drag("By.text('雷电游戏中心')",300,500,500)

备注: 无。
命令名称: JsDroid.FindImg 缩放找图
语法格式: JsDroid.FindImg(图片路径,左上角X,左上角Y,右下角X,右下角Y,偏色,相似度)
命令参数: 参数1:字符串型,图片路径,不支持附件
参数2:数值型,查找范围左上角X
参数3:数值型,查找范围左上角Y
参数4:数值型,查找范围右下角X
参数5:数值型,查找范围右下角X
参数6:字符串型,偏色
参数7:数值型,相似度,取值0.1-1.0
返回值: 数组型:成功返回图片范围,失败返回null。
脚本例子:
复制代码
Import "JsDroid.luae"				
dim rect
rect = JsDroid.FindImg("/sdcard/img.png", 0, 0, 0, 0, "101010", "0.7")
If rect Then
	TracePrint Join(rect,",")
Else
	TracePrint "未找到"
End If
备注: 无。
命令名称: JsDroid.FindNode 查找节点
语法格式: JsDroid.FindNode(节点信息[,指定下标,保存变量,执行超时])
命令参数: 参数1:必选,字符串型,节点信息。
参数2:字符串型,可选,保存变量。
参数3:可选,数值型,节点下标,节点初始下标为0
参数4:可选,数值型,执行超时时间,单位毫秒,默认执行10毫秒。
参数2,3,4不区分顺序
返回值: 布尔值,成功返回true,失败返回null。
脚本例子:
复制代码
Import "JsDroid.luae"			
//语法1,不再二次利用
TracePrint JsDroid.FindNode("By.text('雷电游戏中心')")
TracePrint JsDroid.FindNode("By.text('雷电游戏中心')",5000)//限时查找
TracePrint JsDroid.FindNode("By.clazz('android.widget.TextView')",3)//下标查找
//语法2
Dim Ret,Info()
Ret = JsDroid.FindNode("By.text('雷电游戏中心')","node")
If Ret Then
	Info = JsDroid.GetNodeInfo("node")
	TracePrint Info[1]//text或desc文本内容
	TracePrint Info[2][1],Info[2][2]//中心坐标
	TracePrint Info[3][1],Info[3][2],Info[3][3],Info[3][4]//节点范围
End If
备注: 无。
命令名称: JsDroid.FindNodeS 查找所有符合条件的节点信息
语法格式: JsDroid.FindNodeS(节点信息,保存变量)
命令参数: 参数1:字符串型,节点信息
参数2:字符串型,保存变量
返回值: 布尔值:成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"				
//例子,与GetNodeInfoAll命令相结合使用
Dim Ret,Info()
Ret = JsDroid.FindNodeS("By.clazz('android.widget.TextView')","node")
If Ret Then
	/*
		Info是数组表 
		Info[1]数组下的元素是text或desc内容
		Info[2]数组下的元素是节点中心点坐标
		Info[3]数组下的元素是节点所在的范围
	*/
    Info = JsDroid.GetNodeInfoAll("node")
    For i = 1 To UBOUND(Info[1]) + 1
        TracePrint "----------------------------------------------------"
        TracePrint "节点内容",Info[1][i]
        TracePrint "节点中心坐标X",Info[2][i][1],"节点中心坐标Y",Info[2][i][2]
        TracePrint "节点左上角X",Info[3][i][1],"节点左上角Y",Info[3][i][2],"节点右下角X",Info[3][i][3],"节点右下角Y",Info[3][i][4]
    Next 
End If 
备注: 无。
命令名称: JsDroid.GetOcr ocr识别
语法格式: JsDroid.GetOcr([图片路径],[左上角X,左上角Y,右下角X,右下角Y])
命令参数: 参数:图片路径或识别范围,二选一
图片路径:字符串型
识别范围:数值型,100,120,240,200
图片范围不能太小,不支持 0,0,0,0格式,貌似不支持正方形,只支持物理路径,不支持附件图片
返回值: 字符串型:识别结果。
脚本例子:
复制代码
Import "JsDroid.luae"				
//语法1
Dim Ret
Ret = JsDroid.GetOcr("/sdcard/123.png")
TracePrint Ret
//语法2
Ret = JsDroid.GetOcr(100,120,240,200)
TracePrint Ret
备注: 无。
命令名称: JsDroid.GetNodeInfoAll 获取所有符合条件的节点信息
语法格式: JsDroid.GetNodeInfoAll(节点信息)
命令参数: 参数1:字符串型,节点信息或FindNodeS的保存变量
返回值: table表:成功返回表,失败返回null。
脚本例子:
复制代码
Import "JsDroid.luae"				
/*
Info是数组表 
Info[1]数组下的元素是text或desc内容
Info[2]数组下的元素是节点中心点坐标
Info[3]数组下的元素是节点所在的矩形范围
*/
Dim Info()
Info = JsDroid.GetNodeInfoAll("By.clazz('android.widget.TextView')")
If Info Then 
    For i = 1 To UBOUND(Info[1]) + 1
        TracePrint "----------------------------------------------------"
        TracePrint "节点text内容",Info[1][i]//节点text内容
        TracePrint "节点中心坐标X",Info[2][i][1],"节点中心坐标Y",Info[2][i][2]
        TracePrint "节点左上角X",Info[3][i][1],"节点左上角Y",Info[3][i][2],"节点右下角X",Info[3][i][3],"节点右下角Y",Info[3][i][4]
    Next 
End If
备注: 无。
命令名称: JsDroid.GetNodeInfo 获取符合条件的节点信息
语法格式: JsDroid.GetNodeInfo(节点信息)
命令参数: 参数1:字符串型,节点信息
返回值: table表:成功返回表,失败返回null。
脚本例子:
复制代码
Import "JsDroid.luae"				
Dim Info()
Info = JsDroid.GetNodeInfo("By.clazz('android.widget.TextView')")
If Info Then 
	TracePrint "节点text或desc内容",Info[1]
	TracePrint "节点中心点X",Info[2][1],"节点中心点Y",Info[2][2]
	TracePrint "节点左上角X",Info[3][1],"节点左上角Y",Info[3][2],"节点右下角X",Info[3][3],"节点右下角Y",Info[3][4]
End If
备注: 无。
命令名称: JsDroid.Swipe 多点滑动
语法格式: JsDroid.Swipe(100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 50)
命令参数: 参数格式1:数值型,x1,y1,x2,y2[,x3,y3,x4,y4,x5,y5…],step,坐标越多,轨迹越明显
参数格式2:数组型,Array(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5[,step]),最少四个元素,支持传入step
参数格式3:数组+step,Array(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5)[,step]
step:可选,数值型,数字越大,滑动越慢
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"				
//调试时建议开启指针
JsDroid.Swipe (100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 10)
备注: 无。
命令名称: JsDroid.Include 加载脚本文件(命令库路径)
语法格式: JsDroid.Include([js文件路径][url链接])
命令参数: 字符串型:文件路径或者http链接。
返回值: 字符串型:成功返回”undefined”,失败返回”include err”。
脚本例子:
复制代码
Import "JsDroid.luae"				
//可以自主写一些js函数命令库导入,通过JsDroid.Code 调用
JsDroid.Include("/data/local/tmp/JsAndroid.js")
备注: 无。
命令名称: JsDroid.OpenwebMode 网页增强
语法格式: JsDroid.OpenwebMode()
命令参数: 无。
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"				
JsDroid.OpenwebMode
备注: 浏览器和某些APP无法获取节点和XML,需要开启网页增强。
命令名称: JsDroid.RegExA 返回正则匹配格式By字符串A
语法格式: JsDroid.RegExA(正则匹配节点信息,指定位置)
命令参数: 参数1:字符串型,节点信息,正则模式。
参数2:数值型,需要正则的参数位置,允许多个位置,不需要排序。
需要注意的是反斜杠”\”,在按键中是转义的意思,在插件中也是一样
匹配一个数字的正确格式:”\\\\d”,由按键转义后传入后的结果是”\\d”
返回值: 字符串型,正则替换后的新节点信息格式。
正则模式: 正则模式详解链接 https://blog.csdn.net/woniu317/article/details/52186694

\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
匹配中文:[\u4e00-\u9fa5]
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
(X) X,作为捕获组
非捕获
(?=X) X,通过零宽度的正lookahead
(?!X) X,通过零宽度的负lookahead
(?<=X) X,通过零宽度的正lookbehind
(?<!X) X,通过零宽度的负lookbehind
(?>X) X,作为独立的非捕获组

脚本例子:
复制代码
Import "JsDroid.luae"			
Dim By
By =  JsDroid.RegExA ("By.text('按键精灵').clazz('android.widget.TextView')",1)
TracePrint By
By =  JsDroid.RegExA ("By.text('按键精灵').clazz('android.widget.TextView')",2)
TracePrint By
By =  JsDroid.RegExA ("By.text('按键精灵').clazz('android.widget.TextView')",2,1)
TracePrint By
TracePrint  JsDroid.Click (By)
备注: 无。
命令名称: JsDroid.RegExB 返回正则匹配格式By字符串B
语法格式: JsDroid.RegExB(正则匹配节点信息)
命令参数: 参数1:字符串型,节点信息,正则模式,指定格式”By.text(r:'[0-9]{2}/[0-9]{1}/[0-9]{1,2}.*-x’)”
单引号内为模式,r:为指定格式内容,表示这是需要正则的参数。
返回值: 字符串型,正则替换后的新节点信息格式。
脚本例子:
复制代码
Import "JsDroid.luae"				
Dim By
By = JsDroid.RegexB("By.text(r:'[0-9]{2}/[0-9]{1}/[0-9]{1,2}.*-x')")
TracePrint By
TracePrint  JsDroid.Click (By)
备注: 无。

命令名称: JsDroid.StartServer 启动服务
语法格式: JsDroid.StartServer([true])
命令参数: 参数1:可选,布尔值,是否初始化,true则停止服务/刷新所有文件/启动服务。
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
If JsDroid.StartServer() Then 
    TracePrint "启动成功"
Else 
    TracePrint "启动失败"
    EndScript 
End If
备注: 无。
命令名称: JsDroid.Quit 退出服务
语法格式: JsDroid.Quit()
命令参数: 参数:无。
返回值: 无。
脚本例子:
复制代码
//停止事件,调试勿用,仅供打包
Sub OnScriptExit()
	Delly 2000 - Tickcount() 
	JsDroid.Quit()
End Sub 
备注: 无。
命令名称: JsDroid.Exec 执行shell命令
语法格式: JsDroid.Exec(shell命令)
网页文档链接:
adb shell常用命令地址:https://blog.csdn.net/offbye/article/details/53414480


adb shell详细文档地址:https://github.com/mzlogin/awesome-adb
命令参数: 参数:字符串型,shell 命令。
返回值: 字符串型。
脚本例子:
复制代码
Import "JsDroid.luae"				
//查看第三方包名				
Dim PkgArr = Split(JsDroid.Exec("pm list packages -3"),"\n")
For Each v In PkgArr
	TracePrint v
Next
备注: 无。
命令名称: JsDroid.SetConfig 插件设置(是否初始化启动服务,是否显示调试输出,插件二次调用延时)
语法格式: JsDroid.SetConfig(是否初始化启动服务,是否显示调试输出,插件二次调用延时)
命令参数: 参数1:布尔值型,必选,是否开启服务启动初始化。
参数2:布尔值型,可选,是否开启插件调试信息,true为开启。
参数3:数值型,可选,单位毫秒,是否对插件二次调用进行延时。
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.SetConfig False, False,200
备注: Code已默认开启url编码。
命令名称: JsDroid.Tap 点击坐标[非按键Tap原理]
语法格式: JsDroid.Tap(x,y)
命令参数: 参数1:整数型,JsDroid插件命令获取到的节点中心点x坐标。
参数2:整数型,JsDroid插件命令获取到的节点中心点y坐标。
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"				
Dim  Info = JsDroid.GetNodeInfo ("By.text('按键精灵')")
If Info Then 
	JsDroid.Tap Info[2][1],Info[2][2]
End If
备注: 竖屏时与按键坐标无差异,横屏时,必须使用JsDroid插件命令获取的xy坐标。
命令名称: JsDroid.Print 输出信息并打印到屏幕右上角
语法格式: JsDroid.Print(内容)
命令参数: 参数1:整数型或字符串或布尔值。
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"				
JsDroid.Print "欢迎使用JsDroid安卓自动化"
Delay 3000
备注: 无。
命令名称: JsDroid.ScrollToBottom
脚本例子:
复制代码

备注: 无。
命令名称: JsDroid.ScrollToTop
脚本例子:
复制代码

备注: 无。
命令名称: JsDroid.WaitDisappear 等待节点消失
语法格式: JsDroid.WaitDisappear(by,时长)
命令参数: 参数1:字符串型,节点信息。
参数2:整数型,等待时长,单位毫秒
返回值: 布尔值:节点消失返回true,否则返回false。
脚本例子:
复制代码
Import "JsDroid.luae"				
If JsDroid.WaitDisappear("By.text('按键精灵')",5000) Then 
	TracePrint "节点消失了"
Else 
	TracePrint "节点存在"
End If
备注: 无。
命令名称: JsDroid.FindNodeInfo 查找节点并获取节点信息
语法格式: JsDroid.FindNodeInfo(by[,获取属性,节点下标,获取时长,数组变量])
命令参数: 参数1:字符串型,必选,节点信息,节点存在返回true,不存在返回null。
参数:节点下标,可选,整数型,忽略则默认查找第一个节点,节点存在返回true,不存在返回null
参数:查找限时,可选,整数型,忽略则默认查找一次,节点存在返回true,不存在返回null,不得低于500毫秒
参数:返回信息,可选,字符串型或略则返回值为true或null
格式:’text’,获取节点text,返回值,字符串,节点不存在返回null
格式:’desc’,获取节点desc,返回值,字符串,节点不存在返回null
格式:’point’,获取节点中心点,返回值,数组,节点不存在返回null
格式:’rect’,获取节点矩形范围,返回值,数组,节点不存在返回null
格式:’res’,获取节点res信息,返回值,字符串,节点不存在返回null
格式:’allText’,获取节点所有文字,返回值,字符串,节点不存在返回null
格式:’clazz’,获取节点类名,返回值,字符串,节点不存在返回null
格式:任意字符串,比如”abc”,则获取节点的text,desc,point,rect信息,节点存在返回二维table,不存在返回null
返回格式:Tab[“text”],Tab[“desc”],Tab[“point”][1],Tab[“point”][2],Tab[“rect”][1],Tab[“rect”][2],Tab[“rect”][3],Tab[“rect”][4]
参数:数组型,返回变量,将获取的结果存到传入的数组中,此时插件命令返回true或null
返回值: 失败返回null,成功返回布尔值true,字符串,数组,表,具体返回结果看参数解释。
脚本例子:
复制代码
Import "JsDroid.luae"			
//JsDroid.FindNodeInfo的多种使用方法
Dim Tab()
//查找节点
TracePrint JsDroid.FindNodeInfo("By.text('按键精灵')")//返回true或null
Delay 500
//查找下标1的节点
TracePrint JsDroid.FindNodeInfo("By.text('按键精灵')",1)//返回true或null
Delay 500
//获取节点范围
Tab =  JsDroid.FindNodeInfo("By.text('按键精灵')","'rect'")//返回数组或null
If Tab Then 
    TracePrint "节点矩形范围",Tab[1],Tab[2],Tab[3],Tab[4]
End If
Delay 500
//获取节点text
TracePrint JsDroid.FindNodeInfo("By.text('按键精灵')","'text'")//返回字符串或null
Delay 500
//获取节点desc
TracePrint JsDroid.FindNodeInfo("By.text('按键精灵')","'desc'")//返回字符串或null,节点desc信息
Delay 500
//获取节点中心点
Tab = JsDroid.FindNodeInfo("By.text('按键精灵')","'point'")//返回数组或null,节点中心xy坐标
If Tab Then 
    TracePrint "节点中心点x y坐标:",Tab[1],Tab[2]
End If
Delay 500
//获取节点所有信息(text,desc,中心点坐标,节点范围)
Tab = JsDroid.FindNodeInfo("By.text('按键精灵')","'abc'")//返回二维table或null,参数为任意字符串,获取节点所有信息
If Tab Then 
    TracePrint "节点中心点x y坐标:",Tab["point"][1],Tab["point"][2]
    TracePrint "节点text:",Tab["text"]
    TracePrint"节点desc:",Tab["desc"]
    TracePrint "节点矩形范围",Tab["rect"][1],Tab["rect"][2],Tab["rect"][3],Tab["rect"][4]
End If
Delay 500
//获取下标2的节点所有信息(text,desc,中心点坐标,节点范围)
Tab = JsDroid.FindNodeInfo("By.clazz('android.widget.TextView')","'abc'",2)//返回二维table或null
If Tab Then 
    TracePrint "节点中心点x:",Tab["point"][1],Tab["point"][2]
    TracePrint "节点text:",Tab["text"]
    TracePrint"节点desc:",Tab["desc"]
    TracePrint "节点矩形范围",Tab["rect"][1],Tab["rect"][2],Tab["rect"][3],Tab["rect"][4]
End If
Delay 500
//获取下标2的节点的所在范围
Tab = JsDroid.FindNodeInfo("By.clazz('android.widget.TextView')",2,"'rect'")//返回table表或null
If Tab Then 
    TracePrint "节点矩形范围",Tab[1],Tab[2],Tab[3],Tab[4]
End If
Delay 500
//查找下标5的节点
TracePrint JsDroid.FindNodeInfo("By.clazz('android.widget.TextView')",5)//返回true或null
Delay 500
//结合JsDroid.FindNodes使用
If JsDroid.FindNodes("By.clazz('android.widget.TextView')", "node") Then 
	TracePrint JsDroid.FindNodeInfo("node",5,"text")//返回true或null,取下标5	
End If
//结合JsDroid.FindNode使用
If JsDroid.FindNode("By.clazz('android.widget.TextView')", "node") Then 
	TracePrint JsDroid.FindNodeInfo("node","text")//返回true或null,JsDroid.FindNode查找的是首个节点,所以没有下标
End If
//查找并点击
If JsDroid.FindNodeInfo("By.text('按键精灵')", "point", Tab) Then 
    TracePrint "节点中心点坐标xy",Tab[1],Tab[2]
    JsDroid.Tap Tab[1],Tab[2]
End If
//查找并获取范围
If JsDroid.FindNodeInfo("By.text('按键精灵')", "rect", Tab) Then 
    TracePrint "节点矩形范围",Tab[1],Tab[2],Tab[3],Tab[4]
End If
//查找并返回所有信息
If JsDroid.FindNodeInfo("By.text('按键精灵')", "rect", Tab) Then 
    TracePrint "text内容",Tab["text"]
	TracePrint "desc内容",Tab["desc"]
	TracePrint "节点中心点",Tab["point"][1],Tab["point"][2]
	TracePrint "节点矩形范围",Tab["rect"][1],Tab["rect"][2],Tab["rect"][3],Tab["rect"][4]
End If
备注: 无。
命令名称: JsDroid.GetChild 获取子节点集合
语法格式: JsDroid.GetChild(节点信息,保存变量[,指定下标])
命令参数: 参数1:字符串型,By信息或者FindNode和FindNodes的查找结果变量
参数2:字符串型,获取到的集合保存变量
参数3:数值型,可选,指定下标
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"			
//雷电游戏中心的主页面
If JsDroid.GetChild("By.res('com.android.flysilkworm:id/main_tab_radio_group').clazz('android.widget.RadioGroup')", "node") Then 
    Dim size = JsDroid.GetNodeSize("node")
    TracePrint "子节点集合数量",size
    For i = 0 To size - 1
        TracePrint "节点下标",i,"text内容",JsDroid.FindNodeInfo("node",i,"text")
    Next
End If
			
备注: 无。
命令名称: JsDroid.GetNodeSize 获取节点集合数量(节点集合变量)
语法格式: JsDroid.GetNodeSize(节点集合变量)
命令参数: 参数1:字符串型,节点集合变量,可以是FindNodes的保存变量
返回值: 整数型,成功返回数量,失败返回-1。
脚本例子:
复制代码
Import "JsDroid.luae"			
If JsDroid.FindNodes("By.clazz('android.widget.TextView')","node") Then 
	TracePrint "节点集合数量",JsDroid.GetNodeSize("node")
End If
备注: 无。
命令名称: JsDroid.GetParent 获取父节点
语法格式: JsDroid.GetParent(节点信息,父节点保存变量[,指定下标])
命令参数: 参数1:字符串型,必选,节点信息。
参数2:字符串型,必选,保存变量。
参数3:可选,数值型,节点下标,节点初始下标为0
返回值: 布尔值,成功返回true,失败返回null。
脚本例子:
复制代码
Import "JsDroid.luae"			
//雷电游戏中心的主页面,获取推荐的父节点
If JsDroid.GetParent("By.text('推荐')","node") Then 
	Dim Info = JsDroid.FindNodeInfo("node","rect")
	If Info Then 
		TracePrint "节点矩形范围",Join(Info,",") 
	End If
End If
备注: 无。
命令名称: JsDroid.QRcodeUrl 解析二维码为url
语法格式: JsDroid.QRcodeUrl(二维码图片路径)
命令参数: 参数1:字符串型,二维码图片路径,不支持附件
返回值: 字符串型,url链接,失败返回空或其他。
脚本例子:
复制代码
Import "JsDroid.luae"			
TracePrint JsDroid.QRcodeUrl("/sdcard/二维码.png")
备注: 不支持附件路径。
命令名称: JsDroid.Restart 重启自动化服务
语法格式: JsDroid.Restart()
命令参数: 参数:无
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
If JsDroid.Restart() Then 
    TracePrint "自动化服务重启成功"
Else 
    TracePrint "自动化服务重启失败"
End If
备注: 无。
命令名称: JsDroid.EditClear 清空输入框内容
语法格式: JsDroid.EditClear()
命令参数: 参数:无
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.EditClear
备注: 无。
命令名称: JsDroid.EditPaste 粘贴剪切板内容
语法格式: JsDroid.EditPaste()
命令参数: 参数:无
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.EditPaste
备注: 无。
命令名称: JsDroid.EditCopy 复制输入框内容
语法格式: JsDroid.EditCopy()
命令参数: 参数:无
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.EditCopy
备注: 无。
命令名称: JsDroid.CopyText 复制已选中内容
语法格式: JsDroid.CopyText()
命令参数: 参数:无
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.CopyText
备注: 无。
命令名称: JsDroid.Testing 检测加载指定文件是否成功
语法格式: JsDroid.Testing()
命令参数: 参数:无
返回值: 无。
脚本例子:
复制代码
Import "JsDroid.luae"
If JsDroid.Testing() Then 
	TracePrint "加载指定js文件成功"
Else 
	TracePrint "加载指定js文件失败"
End If
备注: 无。
命令名称: JsDroid.SeachNode 结果集中查找指定节点
语法格式: JsDroid.SeachNode(保存变量结果,要查找的节点信息)
命令参数: 参数1:必选,字符串型,保存变量结果
如果传入的是单个节点的变量结果,返回值为true或false
如果传入的是多个变量的变量结果,返回值是数值型或者false
参数2:必选,字符串型,By信息
返回值: 失败返回false,成功返回true或数值,具体类型看参数说明。
脚本例子:
复制代码
Import "JsDroid.luae"
JsDroid.SetConfig False, True 
Dim num
If JsDroid.FindNodeS("By.clazz('android.widget.TextView')", "nodes") Then 
    num = JsDroid.SeachNode("nodes", "By.text('按键精灵')")
    If num Then 
        TracePrint "指定节点所在下标", num
    Else 
        TracePrint "指定节点不存在"	
    End If
End If

If JsDroid.FindNode("By.clazz('android.widget.TextView')", "node") Then 
    TracePrint "指定节点是否存在" ,JsDroid.SeachNode("node", "By.text('按键精灵')")
End If
备注: 无。
命令名称: JsDroid.GetChildEx 获取多层子节点
语法格式: JsDroid.GetChildEx(By信息,保存变量[,指定下标][,下标组合表])
命令参数: 参数1:字符串型,必选,By信息
参数2:字符串型,必选,执行后的保存变量
参数3:数值型,指定下标,忽略则默认为0
参数4:数组型,遍历子节点层数
格式:{0,0,0},获取当前节点的子节点集合的下标0的子节点集合的下标0的子节点集合的下标0的子节点集合
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
If JsDroid.GetParentEx("By.text('按键精灵')", "node", 0, 4) Then //获取按键精灵4层父节点
    TracePrint Join(JsDroid.FindNodeInfo("node","rect"),",") 
    If JsDroid.GetChildEx("node", "node", 0, {0, 0, 0}) Then //获取节点4层子节点
        TracePrint "节点集合数量",JsDroid.GetNodeSize("node")
    End If
    For i = 0 To JsDroid.GetNodeSize("node")-1
        TracePrint JsDroid.FindNodeInfo("node",i,"desc")
    Next
End If
备注: 无。
命令名称: JsDroid.GetParentEx 获取多层父节点
语法格式: JsDroid.GetParentEx(By信息,保存变量[,指定下标][获取层数])
命令参数: 参数1:字符串型,必选,By信息
参数2:字符串型,必选,执行后的保存变量
参数3:数值型,指定下标,忽略则默认为0
参数4:数值型,获取父节点层数,默认获取1层
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
If JsDroid.GetParentEx("By.text('按键精灵')", "node", 0, 4) Then //获取按键精灵4层父节点
    TracePrint Join(JsDroid.FindNodeInfo("node","rect"),",") 
End If
备注: 无。
命令名称: JsDroid.ClearText 清空节点输入框文字
语法格式: JsDroid.ClearText(By信息[,指定下标])
命令参数: 参数1:字符串型,必选,By信息
参数2:数值型,指定下标,忽略则默认为0
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
TracePrint  JsDroid.ClearText("By.res('com.android.flysilkworm:id/search_edit')")
备注: 仅支持5.0.x以上系统版本。
命令名称: JsDroid.SetText 设置节点输入框文字
语法格式: JsDroid.SetText(By信息,设置内容[,指定下标])
命令参数: 参数1:字符串型,必选,By信息
参数2:字符串型,必选,需要设置的内容
参数3:数值型,指定下标,忽略则默认为0
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
TracePrint JsDroid.SetText("By.res('com.android.flysilkworm:id/search_edit')","欢迎使用JsDroid")
备注: 仅支持5.0.x以上系统版本。
命令名称: JsDroid.LongClick 长按节点
语法格式: JsDroid.LongClick(By信息[,指定下标])
命令参数: 参数1:字符串型,必选,By信息
参数2:数值型,指定下标,忽略则默认为0
返回值: 布尔值,成功返回true,失败返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
TracePrint  JsDroid.LongClick("By.res('com.android.flysilkworm:id/search_edit')")
备注: 无。
命令名称: JsDroid.IsChecked 多选框是否已被选中
语法格式: JsDroid.IsChecked(节点信息)
命令参数: 参数1:字符串型,节点信息
返回值: 布尔值,已被选中返回true,其他情况返回false。
脚本例子:
复制代码
Import "JsDroid.luae"
Dim By = "By.clazz('android.widget.CheckBox')"
If JsDroid.FindNode(By) Then 
    If JsDroid.IsChecked(By) Then 
        TracePrint "节点已被选中"
    Else 
        TracePrint "节点未被选中或不可被选中"
    End If 
Else 
    TracePrint "节点不存在"
End If

备注: 经测试,仅支持clazz属性为’android.widget.CheckBox’时生效。
命令名称: JsDroid.GetChildCount 获取子节点数量
语法格式: JsDroid.GetChildCount(By信息[,指定下标])
命令参数: 参数1:字符串型,必选,By信息
参数2:数值型,指定下标,忽略则默认为0
返回值: 数值型,存在子节点返回子节点数量,节点不存在或子节点不存在返回-1。
脚本例子:
复制代码
Import "JsDroid.luae"
Dim  Num
Num = JsDroid.GetChildCount("By.clazz('android.widget.FrameLayout')")
If Num > -1 Then 
    TracePrint "子节点数量",Num
Else 
    TracePrint "当前节点不存在或没有子节点"
End If
备注: 无。
命令名称: JsDroid.GetUIXml 获取界面XML信息
语法格式: JsDroid.GetUIXml()
命令参数: 参数:无
返回值: 字符串型,失败返回空字符。
脚本例子:
复制代码
Import "JsDroid.luae"
If JsDroid.StartServer() Then 
    TracePrint "启动成功"
Else 
    TracePrint "启动失败"
    EndScript 
End If
Dim t = TickCount()
Dim XML信息 = JsDroid.GetUIXml()
TracePrint XML信息
TracePrint "获取XML信息耗时",TickCount()-t,"毫秒" 

备注: 类似于shanhai.GetUIXML,但此功能获取速度极快。

按键精灵手机助手常用插件下载

Posted in 按键精灵

一、紫猫插件手机版V3.1903:

下载地址:

 

二、JsDroid1.7.7插件:

下载地址:

免责申明:

  • 本站所有软件资源均是通过网络合法渠道获取和搜集到的,仅供学习交流使用,版权归原作者所有。
  • 如需商业使用,请向版权所有者购买授权,并遵循国家相关法律规定,若因非法使用引起纠纷,一切后果由使用者承担
  • 如版权所有者认为有侵权、不妥之处,请联系站长并出示版权证明以便删除。
[zilla_toggle title="如果文章对您有帮助,欢迎打赏作者"] weixin zhifubao [/zilla_toggle]

化妆资料教程合集

资源简介:

HeadPicture

model

CourseShot



资源目录:

资源总大小:22.5GB

【化妆教程1】26集化妆视频教程全集 61.2 MB
1 真人视频01——跟我学化妆之睫毛膏.swf 2.53MB
2 真人视频02——跟我学化妆之粉底液.swf 1.30MB
3 真人视频03——跟我学化妆之两用粉饼.swf 1.48MB
4 真人视频04——跟我学化妆之普通粉饼.swf 3.46MB
5 真人视频05——跟我学化妆之按压式粉底液.swf 0.06MB
6 真人视频06——跟我学化妆之粉底霜.swf 2.44MB
7 真人视频07——跟我学化妆之蜜粉.swf 3.89MB
8 真人视频08——跟我学化妆之腮红.swf 2.36MB
9 真人视频09——跟我学化妆之霜状腮红.swf 3.21MB
10 真人视频10——跟我学化妆之单色腮红.swf 3.06MB
11 真人视频11——跟我学化妆之多色修饰粉.swf 3.32MB
12 真人视频12——跟我学化妆之睫毛膏(亚洲).swf 1.39MB
13 真人视频13——跟我学化妆之单色眼影.swf 3.20MB
14 真人视频14——跟我学化妆之四色眼影.swf 3.46MB
15 真人视频15——跟我学化妆之干湿两用单色眼影.swf 4.38MB
16 真人视频16——跟我学化妆之眼影霜.swf 2.76MB
17 真人视频17——跟我学化妆之木质眼线笔.swf 1.73MB
18 真人视频18——跟我学化妆之眼线液.swf 1.88MB
19 真人视频19——跟我学化妆之下眼线画法.swf 1.19MB
20 真人视频20——跟我学化妆之眉粉和眉笔画法.swf 2.51MB
21 真人视频21——跟我学化妆之三色眉粉.swf 2.24MB
22 真人视频22——跟我学化妆之唇蜜(1).swf 2.79MB
23 真人视频23——跟我学化妆之唇蜜(2).swf 1.44MB
24 真人视频24——跟我学化妆之淡妆唇膏.swf 1.47MB
25 真人视频25——跟我学化妆之浓妆唇膏.swf 2.48MB
26 真人视频26——跟我学化妆之唇线画法.swf 1.27MB
【化妆教程2】29款百变彩妆 983 MB
1 下班约会妆容.mp4 22.57MB
2 亲切活力面试妆.mp4 45.85MB
3 优雅可爱金色妆容.mp4 20.18MB
4 优雅小气贵公主妆.mp4 18.93MB
5 光透美唇逛街妆.mp4 21.38MB
6 内涵气质妆容.mp4 54.07MB
7 复古奢华妆容.mp4 44.43MB
8 如何画俏皮街妆.mp4 34.92MB
9 娇嫩水果妆.mp4 46.01MB
10 惹火撩人妆容.mp4 15.08MB
11 打造可爱小气贵公主妆.mp4 31.40MB
12 打造名媛上乘妆容.mp4 41.47MB
13 打造封面女郎妆容.mp4 28.41MB
14 打造日式萌感扮嫩妆.mp4 59.62MB
15 打造粉嫩蜜桃肌.mp4 20.69MB
16 打造芭比公主妆容.mp4 64.73MB
17 日系粉嫩淑女妆容.mp4 16.47MB
18 早春清新甜美妆容.mp4 29.77MB
19 清新文艺妆.mp4 27.55MB
20 清新气质韩式裸妆.mp4 21.25MB
21 清淡高品质妆.mp4 22.53MB
22 画出妖娆复古的吸血鬼妆.mp4 90.67MB
23 画娃娃大眼妆.mp4 68.18MB
24 画混血小脸底妆.mp4 30.24MB
25 稳重大方面试妆.mp4 27.73MB
26 端庄的紫罗兰妆.mp4 19.25MB
27 英伦中性风妆容.mp4 26.32MB
28 蜜桃双颊约会妆.mp4 18.42MB
29 轻熟女OL办公室妆容.mp4 15.42MB
【化妆教程3】33款韩国专业化妆 538 MB
1 化妆教程 化妆技巧之韩国 专业化妆 眼线使眼睛变大.flv 9.30MB
2 化妆方法之烟熏妆.flv 16.10MB
3 化妆步骤 如何化妆 化妆视频 .flv 20.10MB
4 化妆步骤.flv 28.66MB
5 化妆步骤教程实操演示.flv 13.77MB
6 化妆的步骤及技巧底妆.flv 13.68MB
7 韩国 专业化妆 画眼线的技巧.flv 7.68MB
8 韩国 专业化妆 眼线使眼睛变大.flv 9.31MB
9 韩国Jungsaemmool彩妆-路人&ldquo;妆&rdquo;成刘亦菲!Vogue封面仿妆来袭!.flv 12.57MB
10 韩国Jungsaemmool彩妆之 化腐朽为神奇的惊人化妆术.flv 17.52MB
11 韩国Jungsaemmool彩妆之偶像剧女主角妆.flv 17.46MB
12 韩国Jungsaemmool彩妆之奥黛丽&middot;赫本妆!绝世仿妆!.flv 17.52MB
13 韩国Jungsaemmool彩妆之少女时代闪亮妆.flv 12.93MB
14 韩国Jungsaemmool彩妆之性感女神妆.flv 14.93MB
15 韩国Jungsaemmool彩妆之时尚小公主妆.flv 20.48MB
16 韩国Jungsaemmool彩妆之时尚杂志封面妆.flv 17.61MB
17 韩国Jungsaemmool彩妆之李孝利复古妆.flv 14.22MB
18 韩国Jungsaemmool彩妆之清纯校花妆.flv 15.26MB
19 韩国Jungsaemmool彩妆之灰姑娘妆.flv 15.49MB
20 韩国Jungsaemmool彩妆之灰色烟熏妆.flv 14.02MB
21 韩国Jungsaemmool彩妆之现代气质 -女主播妆.flv 15.77MB
22 韩国Jungsaemmool彩妆之白雪公主妆.flv 10.12MB
23 韩国Jungsaemmool彩妆之粉红色烟熏妆 (专业).flv 15.22MB
24 韩国Jungsaemmool彩妆之红毯猫眼妆 (专业).flv 19.00MB
25 韩国Jungsaemmool彩妆之自然妆.flv 10.01MB
26 韩国Jungsaemmool彩妆之豆花女变大明星.flv 13.01MB
27 韩国专业化妆 眼睛 一字眉毛的化妆技巧.flv 5.23MB
28 韩国妆的化妆技巧.flv 73.97MB
29 韩国彩妆 爱丽小屋 新品广告 青美韩妆.flv 4.09MB
30 韩国新娘彩妆.flv 17.38MB
31 韩国李孝利 中的造型.flv 14.13MB
32 韩国达人 教你如何化妆 清新妆视频.flv 14.30MB
33 韩系公主妆.flv 17.61MB
1 01如何涂好粉底.mp4 26.83MB
2 02如何画眼影.mp4 8.10MB
3 03如何化妆之三步贴紧双眼皮.mp4 11.75MB
4 04如何卸眼妆.mp4 17.90MB
5 05如何修饰毛孔.mp4 11.10MB
6 06如何遮眼袋.mp4 9.30MB
7 07如何画眼线.mp4 7.05MB
8 08如何使用睫毛膏小技巧.mp4 4.79MB
9 09如何画烟熏妆.mp4 18.20MB
10 10如何戴假睫毛.mp4 14.31MB
11 11如何打好粉底.mp4 14.38MB
12 12如何画眉毛.mp4 7.68MB
13 13如何画腮红和唇彩.mp4 6.13MB
14 14如何刷睫毛.mp4 5.91MB
15 15细致画眼影.mp4 18.08MB
16 16细致画眼线.mp4 23.62MB
17 17如何快速补救底妆.mp4 14.39MB
18 18如何刷知性职场腮红.mp4 16.40MB
19 19打造立体感美鼻.mp4 20.25MB
20 20细刷睫毛膏.mp4 11.83MB
21 21如何描眉.mp4 12.84MB
22 22如何画腮红.mp4 10.48MB
23 23打造最自然的眉型.mp4 12.81MB
24 24如何搭配脸颊和嘴唇的颜色.mp4 21.50MB
25 25如何使用遮瑕膏.mp4 8.51MB
26 26如何盖斑.mp4 8.70MB
27 27如何遮痘印.mp4 5.94MB
28 28如何打造温柔娇俏芳唇.mp4 9.07MB
29 29化浓郁清唇.mp4 14.36MB
30 30如何化妆之时尚唇妆.mp4 9.46MB
31 31如何打造果冻般的嘴唇.mp4 13.33MB
32 32如何化妆之Fish Eye.mp4 20.55MB
33 33打造高雅眼妆.mp4 32.78MB
34 34打造Boy风灰度眼妆.mp4 21.79MB
35 35打造立体眼妆.mp4 32.00MB
36 36打造魅惑异域眼妆.mp4 24.95MB
37 37打造暖棕色电眼妆.mp4 23.78MB
38 38打造上钩眼妆之大小上勾.mp4 22.26MB
39 39打造上钩眼妆之小上勾.mp4 17.81MB
40 40打造双翼猫眼妆.mp4 21.25MB
41 41打造无辜苹果眼.mp4 32.26MB
42 42打造约会眼妆.mp4 24.49MB
43 43化大眼妆.mp4 63.83MB
44 44金色妆容之华美眼妆.mp4 24.34MB
45 45内双眼变成闪亮大眼睛.mp4 54.10MB
46 46如何搭配双色眼影.mp4 47.20MB
1 5分钟简单上学妆.flv 5.54MB
2 bubzbeauty彩妆教程-纹眼线教程.flv 11.88MB
3 Fiona OL裸妆.flv 9.70MB
4 Fiona小烟熏妆.flv 8.52MB
5 Fiona欧式小混血眼妆.flv 24.34MB
6 Fiona清新自然妆.flv 14.24MB
7 Fiona甜美新娘妆.flv 29.82MB
8 Michelle Phan 化妆教程之生日妆.flv 9.71MB
9 Michelle Phan化妆教程之情人节妆.flv 12.16MB
10 Michelle Phan化身动画娜娜漫画妆彩妆教程.flv.flv 12.73MB
11 Michelle Phan哥特式洛丽塔娃娃蔷薇少女动画大眼睛彩妆.flv 11.00MB
12 Michelle Phan夏季清凉彩妆.flv 13.97MB
13 Michelle Phan学生彩妆教程.flv 11.01MB
14 Michelle Phan彩妆教程之动漫眼妆造型.flv 12.57MB
15 Michelle Phan彩妆教程之基本烟熏妆教程.flv 8.77MB
16 Michelle Phan彩妆教程之夏末落日余辉妆.flv 11.46MB
17 Michelle Phan彩妆教程之美少女战士(月野兔)华丽变身.flv 13.89MB
18 Michelle Phan彩妆教程之魅力四射生日妆.flv 9.71MB
19 Michelle Phan彩妆教程妆教程之眼影Ⅱ湿压湿技巧.flv 7.97MB
20 Michelle Phan教你打造成夜店的焦点,漂漂的彩妆.flv 14.49MB
21 Michelle Phan新年夜 彩妆教程.flv 21.67MB
22 Michelle Phan樱花妆.flv 5.59MB
23 Michelle Phan玲珑樱花妆捐款1000美元祝福日本地震灾民.flv 5.56MB
24 Michelle phan的眩丽化妆技巧视频教程.flv 11.88MB
25 michelle phan黑天鹅芭蕾舞演员娜塔莉波特曼化妆教程.flv 10.29MB
26 MichellePhan 化妆教程之从职业妆到晚妆的转换教程.flv 11.88MB
27 MichellePhan 化妆教程之动画眼妆.flv 13.11MB
28 MichellePhan 化妆教程之学生妆.flv 9.30MB
29 MichellePhan 化妆教程之每日淡妆.flv 9.54MB
30 MichellePhan 化妆教程之烟熏妆(淡).flv 9.40MB
31 MichellePhan 化妆教程之现代妆.flv 10.76MB
32 MichellePhan 化妆教程之眼线如何画.flv 13.16MB
33 MichellePhan 化妆教程之自然妆.flv 10.92MB
34 MichellePhan 化妆教程之遮瑕术.flv 11.51MB
35 MichellePhan 化妆教程之除夕妆.flv 12.08MB
36 MichellePhan 化妆教程之雪公主.flv 9.90MB
37 MichellePhan 化妆教程之飞机上的简单妆容.flv 7.76MB
38 MichellePhan化妆教程之眉毛修饰.flv 6.25MB
39 MichellePhan化妆教程之眼线如何画.flv 13.16MB
40 mv_邓紫棋-Mascara(烟熏妆).flv 7.81MB
41 SISSEL韩国彩妆使用方法视频.flv 2.89MB
42 分手妆 一边哭一边化妆 这女的怎么那么美.flv 6.93MB
43 分手妆美女陈佩佩美丽肌肤化妆教程.flv 10.14MB
44 单眼皮女孩的大眼妆.flv 6.16MB
45 咬唇妆似有若无的小性感.flv 8.35MB
46 彩妆初学.flv 98.22MB
47 超清新!韩国新娘妆.flv 11.45MB
48 超细致眼妆教程.flv 13.81MB
49 超萌Jeniffer洋娃娃电眼妆.mp4.flv 21.64MB
50 韩国专业化妆 高贵妩媚 金泰熙在2009年KBS演技大赏的妆容和发型 适合长脸 16.12MB
【化妆教程6】50款日常化妆教程 3.19 GB
1 01基础化妆步骤.mp4 46.26MB
2 02轻松Hold住画眉技巧.mp4 70.46MB
3 03新手如何画出好看眉形.mp4 47.27MB
4 04快速修剪眉毛的方法.mp4 64.27MB
5 05眼影颜色的搭配技巧.mp4 57.37MB
6 06实用眼线画法.mp4 51.18MB
7 07化妆时最重要的眼线画法.mp4 50.81MB
8 08让眼线膏完美你的双眼.mp4 37.91MB
9 09刷出根根分明的睫毛.mp4 40.96MB
10 10如何完美粘贴假睫毛.mp4 57.89MB
11 11腮红膏的用法.mp4 45.92MB
12 12减龄腮红的画法技巧.mp4 32.88MB
13 13创意双色唇妆.mp4 54.53MB
14 14办公OL超自然的氧气妆.mp4 73.93MB
15 15打造芭比娃娃大眼妆.mp4 82.75MB
16 16大地色系眼影的简单画法.mp4 73.41MB
17 17单眼皮也能画出大眼妆.mp4 61.18MB
18 18低调性感的烟熏妆容.mp4 86.48MB
19 19电力十足的眼妆画法.mp4 66.32MB
20 20电眼妆眼线膏的画法.mp4 57.24MB
21 21粉色烟熏妆.mp4 74.50MB
22 22好莱坞女星魅惑猫眼妆.mp4 78.05MB
23 23教你高鼻梁的画法.mp4 53.79MB
24 24精致甜美开运妆容.mp4 60.49MB
25 25绿色眼妆帮你摆脱浮肿眯眯眼.mp4 64.65MB
26 26内双女孩如何画出漂亮眼线.mp4 71.34MB
27 27内双眼也能画出漂亮眼线.mp4 67.47MB
28 28内双眼妆的描画技巧.mp4 77.59MB
29 29俏皮清纯妆.mp4 98.69MB
30 30轻松掌握眼线液的画法.mp4 43.50MB
31 31清纯可爱的学生妆.mp4 77.47MB
32 32清透无暇的裸妆画法.mp4 85.92MB
33 33清透自然的淡妆画法.mp4 66.02MB
34 34清新淡雅的日常妆容.mp4 82.79MB
35 35清新甜美妆.mp4 43.14MB
36 36如何快速画职场裸妆.mp4 59.53MB
37 37闪亮派对小烟熏妆.mp4 85.55MB
38 38少女时代惊艳眼妆.mp4 108.08MB
39 39时尚魅力的大烟熏妆容.mp4 56.37MB
40 40双眼皮贴变出大双眼.mp4 49.74MB
41 41无痕裸妆的画法.mp4 93.03MB
42 42五分钟打造清透裸妆.mp4 70.53MB
43 43夏日摇滚烟熏妆容.mp4 68.00MB
44 44学画迷人的小脸妆容.mp4 83.23MB
45 45怎样贴出自然假睫毛.mp4 50.80MB
46 46遮瑕膏的做法-痘痘“藏”起来.mp4 46.52MB
47 47遮瑕让黑眼圈全隐形.mp4 54.81MB
48 48最不易拿捏尺度的晚妆画法.mp4 73.76MB
49 49最具中国风特色的单眼皮眼妆.mp4 77.88MB
50 50最美丽的夏季新娘妆容.mp4 93.90MB
【化妆教程7】韩国化妆造型大师视频教程 3.93 GB
韩国化妆造型大师教程演示 上 1.96 GB
1 韩国化妆造型大师演示教程01.flv 34.54MB
2 韩国化妆造型大师演示教程02.flv 37.22MB
3 韩国化妆造型大师演示教程03 .flv 37.38MB
4 韩国化妆造型大师演示教程04.flv 33.77MB
5 韩国化妆造型大师演示教程05.flv 36.31MB
6 韩国化妆造型大师演示教程06.flv 33.29MB
7 韩国化妆造型大师演示教程07.flv 35.22MB
8 韩国化妆造型大师演示教程08.flv 37.26MB
9 韩国化妆造型大师演示教程09.flv 33.89MB
10 韩国化妆造型大师演示教程10.flv 35.58MB
11 韩国化妆造型大师演示教程11.flv 31.50MB
12 韩国化妆造型大师演示教程12.flv 34.25MB
13 韩国化妆造型大师演示教程13.flv 31.19MB
14 韩国化妆造型大师演示教程14.flv 35.44MB
15 韩国化妆造型大师演示教程15.flv 18.73MB
16 韩国化妆造型大师演示教程16.flv 21.16MB
17 韩国化妆造型大师演示教程17.flv 35.37MB
18 韩国化妆造型大师演示教程18.flv 42.41MB
19 韩国化妆造型大师演示教程19.flv 22.49MB
20 韩国化妆造型大师演示教程20.flv 39.60MB
21 韩国化妆造型大师演示教程21.flv 25.46MB
22 韩国化妆造型大师演示教程22.flv 25.22MB
23 韩国化妆造型大师演示教程23.flv 13.57MB
24 韩国化妆造型大师演示教程24.flv 27.41MB
25 韩国化妆造型大师演示教程25.flv 32.63MB
26 韩国化妆造型大师演示教程26.flv 33.55MB
27 韩国化妆造型大师演示教程27.flv 37.81MB
28 韩国化妆造型大师演示教程28.flv 32.49MB
29 韩国化妆造型大师演示教程29.flv 38.85MB
30 韩国化妆造型大师演示教程30.flv 36.26MB
31 韩国化妆造型大师演示教程31.flv 19.41MB
32 韩国化妆造型大师演示教程32.flv 21.23MB
33 韩国化妆造型大师演示教程33.flv 14.35MB
34 韩国化妆造型大师演示教程34.flv 29.18MB
35 韩国化妆造型大师演示教程35.flv 29.00MB
36 韩国化妆造型大师演示教程36.flv 20.70MB
37 韩国化妆造型大师演示教程37.flv 30.84MB
38 韩国化妆造型大师演示教程38.flv 31.40MB
39 韩国化妆造型大师演示教程39.flv 33.65MB
40 韩国化妆造型大师演示教程40.flv 15.33MB
41 韩国化妆造型大师演示教程41.flv 17.64MB
42 韩国化妆造型大师演示教程42.flv 6.26MB
43 韩国化妆造型大师演示教程43.flv 34.81MB
44 韩国化妆造型大师演示教程44.flv 39.81MB
45 韩国化妆造型大师演示教程45.flv 38.55MB
46 韩国化妆造型大师演示教程46.flv 18.27MB
47 韩国化妆造型大师演示教程47.flv 17.22MB
48 韩国化妆造型大师演示教程48.flv 35.25MB
49 韩国化妆造型大师演示教程49.flv 39.04MB
50 韩国化妆造型大师演示教程50.flv 36.14MB
51 好莱坞盘发.flv 11.83MB
52 李东田打造璀璨发饰风景.WMV 416.41MB
53 灰色烟熏妆.flv 16.55MB
54 简单甜美公主编发.flv 16.15MB
55 金泰熙Hera广告惊艳妆容.mp4 23.63MB
56 金素恩超美裸妆.flv 17.43MB
57 金素恩超美裸妆_01.flv 12.44MB
58 金素恩超美裸妆_02.flv 4.99MB
韩国化妆造型大师教程演示 下 1.96 GB
1 Lady GAGA经典米妮头.flv 11.40MB
2 SD娃娃妆.flv 17.65MB
3 【韩国 Jungsaemmool】灰姑娘妆.flv 17.54MB
4 【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic(1).flv 15.32MB
5 【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic(1)_01.flv 10.96MB
6 【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic(1)_02.flv 4.36MB
7 【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic.flv 18.24MB
8 【韩国Jungsaemmool】少女时代閃亮妆_1.flv 12.90MB
9 【韩国Jungsaemmool】惊艳Party Queen(1).flv 10.05MB
10 【韩国Jungsaemmool】浪漫公主编发.flv 14.22MB
11 【韩国Jungsaemmool】浪漫公主编发_01.flv 12.18MB
12 【韩国Jungsaemmool】浪漫公主编发_02.flv 2.03MB
13 【韩国Jungsaemmool】现代气质 -女主播妆.flv 18.06MB
14 【韩国Jungsaemmool】粉红色烟熏妆 (专业).flv 17.40MB
15 【韩国Jungsaemmool】绯闻女孩妆.flv 17.86MB
16 【韩国Jungsaemmool】自然妆.flv 11.00MB
17 【韩国Jungsaemmool】韩版流星花园具俊表造型.flv 6.92MB
18 以假乱真!手把手教你戴假发.flv 9.69MB
19 具惠善超纯净水晶妆.flv 13.94MB
20 具惠善超纯净水晶妆_01.flv 11.89MB
21 具惠善超纯净水晶妆_02.flv 2.05MB
22 刘亦菲妆.flv 12.57MB
23 剩女“妆”嫩模.flv 16.12MB
24 剩女“妆”嫩模_01.flv 12.82MB
25 剩女“妆”嫩模_02.flv 3.30MB
26 劲爆!丑女“妆”玉女.flv 12.93MB
27 劲爆!丑女“妆”玉女_01.flv 10.66MB
28 劲爆!丑女“妆”玉女_02.flv 2.27MB
29 单眼皮MM的招桃花大眼妆.flv 17.57MB
30 单眼皮MM的招桃花大眼妆_01.flv 12.48MB
31 单眼皮MM的招桃花大眼妆_02.flv 5.09MB
32 可爱甜心妆.flv 15.90MB
33 命中注定我爱你!进阶版便利贴女孩妆!.flv 6.92MB
34 大S妆.flv 17.46MB
35 大妈变少女!修片级裸妆!.flv 12.55MB
36 大妈变少女!修片级裸妆!_01.flv 10.61MB
37 大妈变少女!修片级裸妆!_02.flv 1.94MB
38 大脸MM妆成全智贤!超亮眼!.flv 16.10MB
39 奥黛丽·赫本妆!绝世仿妆!.flv 17.52MB
40 好莱坞明星烟熏妆.flv 13.45MB
41 好莱坞明星烟熏妆_01.flv 11.60MB
42 好莱坞明星烟熏妆_02.flv 1.85MB
43 如何令面容看起来精神焕发.flv 9.18MB
44 安以轩超美艳红毯妆.flv 14.22MB
45 安以轩超美艳红毯妆_01.flv 12.40MB
46 安以轩超美艳红毯妆_02.flv 1.83MB
47 尹恩惠妆.flv 16.53MB
48 尹恩惠妆_01.flv 12.53MB
49 尹恩惠妆_02.flv 4.00MB
50 平价化妆品打造大牌范儿.flv 16.27MB
51 平价化妆品打造大牌范儿_01.flv 12.43MB
52 平价化妆品打造大牌范儿_02.flv 3.85MB
53 平凡女“妆”成宋慧乔.flv 17.42MB
54 性感女神妆.flv 17.08MB
55 性感小烟熏妆.mp4 30.67MB
56 性感小烟熏妆_01.mp4 25.92MB
57 性感小烟熏妆_02.mp4 4.75MB
58 新春开运妆.flv 14.94MB
59 新春开运妆_01.flv 12.45MB
60 新春开运妆_02.flv 2.49MB
61 日系化妆篇 教你如何擦唇膏.flv 5.64MB
62 日系化妆篇 教你如何画大眼妆.flv 12.09MB
63 日系化妆篇 教你如何自我化妆 2.flv 9.57MB
64 日系化妆篇 教你如何自我化妆.flv 11.32MB
65 日系化妆篇 教你画 Party妆.flv 14.37MB
66 日系化妆篇 教你画 宴会妆.flv 15.54MB
67 日系化妆篇 教你画自然眼妆.flv 12.91MB
68 日系化妆篇 谷口沙耶香的自我化妆.flv 14.63MB
69 时尚小公主妆.flv 23.54MB
70 时尚杂志封面妆.flv 17.60MB
71 李冰冰超惊艳巨星风采妆.flv 16.12MB
72 李冰冰超惊艳巨星风采妆_01.flv 12.45MB
73 李冰冰超惊艳巨星风采妆_02.flv 3.67MB
74 李孝利超性感眼妆.flv 16.81MB
75 李孝利超性感眼妆_01.flv 13.04MB
76 李孝利超性感眼妆_02.flv 3.77MB
77 林志玲超完美编发.flv 9.69MB
78 梦幻娃娃妆.flv 14.30MB
79 梦幻少女妆.flv 13.81MB
80 梦幻少女妆_01.flv 11.62MB
81 梦幻少女妆_02.flv 2.19MB
82 气质名媛妆.flv 15.56MB
83 清新少女编发.flv 9.99MB
84 清纯学生妹裸妆.flv 10.41MB
85 清纯校花妆.flv 17.31MB
86 清纯萌女妆.flv 17.40MB
87 清纯萌女妆_01.flv 12.50MB
88 清纯萌女妆_02.flv 4.90MB
89 滨崎步超级电力猫眼妆.flv 15.48MB
90 滨崎步超级电力猫眼妆_01.flv 12.43MB
91 滨崎步超级电力猫眼妆_02.flv 3.06MB
92 爆美!网络正妹妆.flv 15.56MB
93 爆美!网络正妹妆_01.flv 13.00MB
94 爆美!网络正妹妆_02.flv 2.56MB
95 甜美庞克妆.flv 16.62MB
96 甜美庞克妆_01.flv 12.53MB
97 甜美庞克妆_02.flv 4.10MB
98 白雪公主妆.flv 11.53MB
99 知性OL妆.flv 6.82MB
100 粉嫩名媛妆.flv 13.89MB
101 粉嫩名媛妆_01.flv 11.59MB
102 粉嫩名媛妆_02.flv 2.30MB
103 精灵公主妆.flv 12.36MB
104 素人“妆”成章子怡!超强大气场巨星范儿.flv 15.64MB
105 绝美!精灵公主编发.flv 17.33MB
106 绝色裸妆.flv 14.18MB
107 豆花女变大明星.flv 14.80MB
108 豆花女变大明星_01.flv 12.30MB
109 豆花女变大明星_02.flv 2.50MB
110 败犬女王妆.flv 15.64MB
111 败犬女王妆_01.flv 12.43MB
112 败犬女王妆_02.flv 3.22MB
113 超卡哇伊!日系Bobo头(1).flv 9.52MB
114 超惊艳!明星气质裸妆!.flv 17.35MB
115 超惊艳!明星气质裸妆!_01.flv 12.47MB
116 超惊艳!明星气质裸妆!_02.flv 4.88MB
117 超浪漫少女春妆.flv 13.51MB
118 超浪漫少女春妆_01.flv 11.50MB
119 超浪漫少女春妆_02.flv 2.02MB
120 超清新少女约会妆.flv 12.96MB
121 超清新少女约会妆_01.flv 10.64MB
122 超清新少女约会妆_02.flv 2.32MB
123 超清新!韩国新娘妆.mp4 22.71MB
124 超省钱明星妆.flv 15.61MB
125 超省钱明星妆_01.flv 12.50MB
126 超省钱明星妆_02.flv 3.12MB
127 超简单瘦脸公主头.flv 10.49MB
128 超简单眉眼心机化妆术.flv 8.48MB
129 超简易明星大眼妆.flv 8.99MB
130 超简易身份证裸妆.flv 7.34MB
131 轻松变美女啦【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic.flv 13.26MB
132 轻松变美女啦【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic_01.flv 9.45MB
133 轻松变美女啦【韩国Jungsaemmool】 走秀台妆 – 现代Modern Chic_02.flv 3.82MB
134 迷惑男友的超心机伪素颜妆.flv 14.46MB
135 迷惑男友的超心机伪素颜妆_01.flv 12.41MB
136 迷惑男友的超心机伪素颜妆_02.flv 2.06MB
137 金泰熙最爱的优雅小发髻!.flv 15.69MB
138 金泰熙最爱的优雅小发髻!_01.flv 12.55MB
139 金泰熙最爱的优雅小发髻!_02.flv 3.14MB
140 金泰熙米妮头(1).flv 7.69MB
141 钻石大眼妆.flv 17.43MB
142 钻石大眼妆_01.flv 12.38MB
143 钻石大眼妆_02.flv 5.05MB
144 阳光美女妆.mp4 63.61MB
145 阳光美女妆_01.mp4 25.30MB
146 阳光美女妆_02.mp4 6.51MB
147 韩剧温柔电眼妆.mp4 31.24MB
148 韩剧温柔电眼妆_01.mp4 26.17MB
149 韩剧温柔电眼妆_02.mp4 5.07MB
150 韩国 专业化妆 眼线使眼睛变大  适合 各种场合.flv 10.20MB
151 韩国Jungsaemmool彩妆之李孝利复古妆.flv 16.01MB
152 韩国Jungsaemmool彩妆之李孝利复古妆_01.flv 12.71MB
153 韩国Jungsaemmool彩妆之李孝利复古妆_02.flv 3.30MB
154 韩国Jungsaemmool彩妆之灰姑娘妆.flv 17.44MB
155 韩国Jungsaemmool彩妆之灰姑娘妆_01.flv 12.81MB
156 韩国Jungsaemmool彩妆之灰姑娘妆_02.flv 4.63MB
157 韩国Jungsaemmool彩妆之现代气质 -女主播妆.flv 17.93MB
158 韩国Jungsaemmool彩妆之现代气质 -女主播妆_01.flv 12.77MB
159 韩国Jungsaemmool彩妆之现代气质 -女主播妆_02.flv 5.16MB
160 韩国Jungsaemmool彩妆之粉红色烟熏妆 (专业).flv 17.33MB
161 韩国Jungsaemmool彩妆之粉红色烟熏妆 (专业)_01.flv 12.98MB
162 韩国Jungsaemmool彩妆之粉红色烟熏妆 (专业)_02.flv 4.35MB
163 韩国Jungsaemmool彩妆之走秀台妆 – 现代Modern Chic.flv 18.19MB
164 韩国Jungsaemmool彩妆之走秀台妆 – 现代Modern Chic_01.flv 13.03MB
165 韩国Jungsaemmool彩妆之走秀台妆 – 现代Modern Chic_02.flv 5.16MB
166 韩系公主妆.flv 17.61MB
167 韩系公主妆_01.flv 12.42MB
168 韩系公主妆_02.flv 5.19MB
【化妆教程8】韩国专业化妆80集 3.05 GB
1 【01】韩国专业化妆–教你画完美底妆.mp4 24.02MB
2 【02】韩国专业化妆–修饰面部轮廓(适合小圆脸).mp4 42.80MB
3 【03】韩国专业化妆–眉毛的化妆技巧(适合方脸).mp4 20.62MB
4 【04】韩国专业化妆–修饰眉形与头发颜色相协调.mp4 18.46MB
5 【05】韩国专业化妆–调整大小眼之少女可爱眼妆.mp4 31.68MB
6 【06】韩国专业化妆–眼线和睫毛膏的化妆技巧.mp4 23.94MB
7 【07】韩国专业化妆–腮红组合化妆技巧(适合方脸).mp4 14.86MB
8 【08】韩国专业化妆–画唇的层次技巧.mp4 18.98MB
9 【09】韩国专业化妆–教你画饱满性感嘴唇.mp4 19.15MB
10 【10】韩国专业化妆–清新浪漫新娘妆容(适合长脸).mp4 34.86MB
11 【11】韩国专业化妆–金光闪闪新娘妆容(适合胖脸圆脸).mp4 49.46MB
12 【12】韩国专业化妆–高贵淡雅新娘妆容(所有脸型).mp4 41.68MB
13 【13】韩国专业化妆–日常白领妆容.mp4 50.39MB
14 【14】韩国专业化妆–波希米亚妩媚妆容(适合小脸圆脸).mp4 51.78MB
15 【15】韩国专业化妆–清新自然高贵妆容(适合倒三角脸菱形脸) .mp4 45.26MB
16 【16】韩国专业化妆–大眼睛妆容(适合单眼皮).mp4 48.22MB
17 【17】韩国专业化妆–混合彩色眼影妆容(适合长脸).mp4 38.72MB
18 【18】韩国专业化妆–少女可爱橙色妆容(适合圆脸).mp4 45.91MB
19 【19】韩国专业化妆–时尚冷酷妩媚妆容(适合小脸长脸).mp4 34.67MB
20 【20】韩国专业化妆–时尚烟熏妆(适合派对妆容).mp4 55.52MB
21 【21】韩国专业化妆–单眼皮妆回补眼眼睛距离拉长.mp4 19.30MB
22 【22】韩国专业化妆–80年代复古迪斯科妆容.mp4 43.28MB
23 【23】韩国专业化妆–淡雅高贵妆容(适合圆脸).mp4 45.70MB
24 【24】韩国专业化妆–淡雅可爱妆容(适合方脸大脸).mp4 52.07MB
25 【25】韩国专业化妆–淡雅优雅妆容(适合大脸胖脸日常约会).mp4 34.57MB
26 【26】韩国专业化妆–KARA+lupin+MV中的妆容及造型(适合圆脸长脸).mp4 48.56MB
27 【27】韩国专业化妆–NarSha在Sign中的妆容.mp4 41.17MB
28 【28】韩国专业化妆–别致的黑色冷酷妆容(适合长脸大脸派对).mp4 40.51MB
29 【29】韩国专业化妆–白眼线笔化下白眼线.mp4 16.59MB
30 【30】韩国专业化妆–彩色镜片双色调妩媚猫眼(适合圆脸胖脸).mp4 45.40MB
31 【31】韩国专业化妆–明亮的粉红色腮红妆容….mp4 35.79MB
32 【32】韩国专业化妆–淑女邻家女孩妆容(适….mp4 49.03MB
33 【33】韩国专业化妆–清新明亮大眼睛之婴儿….mp4 43.57MB
34 【34】韩国专业化妆–徐仁英专辑《Lov-Elly….mp4 47.15MB
35 【35】韩国专业化妆–滨崎步动感冷酷妆容(…..mp4 53.36MB
36 【36】韩国专业化妆–诱惑妩媚水灵灵的大眼….mp4 46.77MB
37 【37】韩国专业化妆–红金色妆容.mp4 37.34MB
38 【38】韩国专业化妆–妩媚妆容(适合派对).mp4 43.49MB
39 【39】韩国专业化妆–配韩服的优雅妆容(适合长脸).mp4 44.74MB
40 【40】韩国专业化妆–韩剧成均馆绯闻朴敏英妆容.mp4 44.50MB
41 【41】韩国专业化妆–金泰熙干净清新典雅有光泽的妆容(适合圆脸).mp4 35.98MB
42 【42】韩国专业化妆–金妍儿在花样滑冰表演中妆容.mp4 56.10MB
43 【43】韩国专业化妆–可爱妆容(适合圆脸胖脸情人节).mp4 44.54MB
44 【44】韩国专业化妆–可爱妆容浅黄褐色桔色.mp4 42.55MB
45 【45】韩国专业化妆–冷酷邦德女郎妆容(适合圆脸派对) .mp4 34.80MB
46 【46】韩国专业化妆–冷酷妆容之jewelry组合徐仁英Vari2ty中的妆.mp4 38.87MB
47 【47】韩国专业化妆–李孝利玫瑰金高贵性感妆容(适合长脸派对).mp4 46.17MB
48 【48】韩国专业化妆–冬日里的白雪公主妆容(适合圆脸方脸大脸).mp4 37.51MB
49 【49】韩国专业化妆–高贵酷妆容金紫(长脸胖脸适合晚会派对).mp4 32.19MB
50 【50】韩国专业化妆–高贵妩媚下眼线闪闪发光点(适合派对).mp4 22.56MB
51 【51】韩国专业化妆–古典优雅妆容(适合圆脸).mp4 40.35MB
52 【52】韩国专业化妆–韩国MAMA红毯李孝利炭….mp4 35.88MB
53 【53】韩国专业化妆–韩国MAMA红毯朴奎利高….mp4 41.72MB
54 【54】韩国专业化妆–黑颜色变化妩媚高贵妆….mp4 48.81MB
55 【55】韩国专业化妆–温柔之一字眉毛的化妆….mp4 13.55MB
56 【56】韩国专业化妆–韩国MAMA红毯李孝利炭黑眼妆妆容(适合派对).mp4 56.58MB
57 【57】韩国专业化妆–酷妆容(适合圆脸大脸胖脸).mp4 39.37MB
58 【58】韩国专业化妆–冷酷妆容(适合长脸).mp4 48.79MB
59 【59】韩国专业化妆–面部遮瑕时尚妆容(适合小脸圆脸派对).mp4 45.24MB
60 【60】韩国专业化妆–画出时尚纹身.mp4 20.15MB
61 【61】韩国专业化妆–半哑光肌肤化妆技巧(适合倒三角脸菱形脸).mp4 29.96MB
62 【62】韩国专业化妆–眼线使眼睛变大.mp4 23.38MB
63 【63】韩国专业化妆–淡雅妆容(适合圆脸).mp4 42.26MB
64 【64】韩国专业化妆–高贵典雅妩媚妆容(适合长脸).mp4 48.46MB
65 【65】韩国专业化妆–高贵妩媚妆容(适合圆脸长脸).mp4 42.02MB
66 【66】韩国专业化妆–高贵金泰熙妆容发型(适合长脸).mp4 41.67MB
67 【67】韩国专业化妆–化出带有光泽感的皮肤(适合任何场合).mp4 23.48MB
68 【68】韩国专业化妆–防紫外线清新淡雅妆容(适合长脸).mp4 25.85MB
69 【69】韩国专业化妆–浪漫可爱粉嫩妆容(适合方脸圆脸大脸)..mp4 35.92MB
70 【70】韩国专业化妆–黄金亚光光泽高贵典雅妆容(适合小脸).mp4 52.82MB
71 【71】韩国专业化妆–金色妩媚可爱妆容(适合圆脸小脸单眼皮)..mp4 55.00MB
72 【72】韩国专业化妆–冷酷高贵妆容(适合胖脸圆脸方脸).mp4 54.38MB
73 【73】韩国专业化妆–脸部画出挺世界杯纹身.mp4 26.71MB
74 【74】韩国专业化妆–清新淡雅纯天然妆容(适合长脸).mp4 45.96MB
75 【75】韩国专业化妆–李孝利MV中的造型.mp4 41.93MB
76 【76】韩国专业化妆–清新自然妆容(适合倒三角脸菱形脸).mp4 40.31MB
77 【77】韩国专业化妆–帅气魅力妆容.mp4 56.76MB
78 【78】韩国专业化妆–透亮清新妆容(适合圆脸大脸).mp4 64.09MB
79 【79】韩国专业化妆–娃娃类妆容淡雅(适合长脸).mp4 27.74MB
80 【80】韩国专业化妆–健康烫金皮肤(适合长脸菱形脸).mp4 20.09MB
【化妆教程9】流行美新郎新娘化妆与发型教程 1.95 GB
1 新郎新娘化妆与发型教程-时尚新娘妆.mp4 1054.63MB
2 简雅1.MPG 347.43MB
3 简雅2.mpg 350.97MB
4 简雅3.MPG 251.39MB
【化妆教程10】毛戈平化妆视频教程全集 4.26 GB
毛戈平化妆 上 1.57 GB
1 毛戈平—教你化妆.rmvb 77.54MB
2 毛戈平–不要盲目追求潮流.rmvb 8.44MB
3 毛戈平–中年妆+基本的化妆.rmvb 187.21MB
4 毛戈平–伊人课堂之魅力大讲堂.rmvb 65.30MB
5 毛戈平–化妆工具的选择.rmvb 64.09MB
6 毛戈平–古妆(武则天).rmvb 65.92MB
7 毛戈平–古妆&老年妆.rmvb 93.31MB
8 毛戈平–彩妆视频.rmvb 53.99MB
9 毛戈平–打造中年女士.rmvb 71.44MB
10 毛戈平–打造古代宫廷妆.rmvb 76.23MB
11 毛戈平–打造时尚妆容.rmvb 72.92MB
12 毛戈平–打造裸妆.rmvb 77.46MB
13 毛戈平–教你早上如何快速化妆.rmvb 5.38MB
14 毛戈平–日妆.rmvb 27.32MB
15 毛戈平–日妆、晚妆、新娘妆.rmvb 201.34MB
16 毛戈平–烟熏妆.rmvb 61.34MB
17 毛戈平–给酒店服务工作人员打造职业妆.rmvb 37.13MB
18 毛戈平–职场女性如何化妆.rmvb 291.31MB
19 毛戈平–陈娟红女扮男装.rmvb 77.49MB
毛戈平化妆 中 1.02 GB
1 毛戈平–给普通人化妆1.rmvb 79.81MB
2 毛戈平–给普通人化妆2.rmvb 132.61MB
3 毛戈平–给普通人化妆3.rmvb 128.58MB
4 毛戈平–给普通人化妆4.rmvb 72.06MB
5 毛戈平–给普通人化妆5.rmvb 71.39MB
6 毛戈平–给普通人化妆6.rmvb 71.46MB
7 毛戈平–给普通人化妆7.rmvb 134.33MB
8 毛戈平–给普通人化妆8.rmvb 80.02MB
9 毛戈平–给普通人化妆9.rmvb 84.57MB
10 毛戈平–给普通人化妆10.rmvb 127.28MB
11 毛戈平–给普通人化妆11.rmvb 69.70MB
毛戈平化妆 下 1.66 GB
1 毛戈平–创意妆1.rmvb 60.98MB
2 毛戈平–创意妆2.rmvb 30.40MB
3 毛戈平–化妆技法1.rmvb 204.17MB
4 毛戈平–化妆技法2.rmvb 91.32MB
5 毛戈平–化妆技法3.rmvb 123.39MB
6 毛戈平–化妆技法4.rmvb 11.76MB
7 毛戈平–化妆教学课程1.rmvb 74.94MB
8 毛戈平–化妆教学课程2.rmvb 78.99MB
9 毛戈平–化妆教学课程3.rmvb 76.37MB
10 毛戈平–化妆教学课程4.rmvb 73.83MB
11 毛戈平–化妆教学课程5.rmvb 80.02MB
12 毛戈平–化妆教学课程6.rmvb 30.55MB
13 毛戈平–化妆教学课程7.rmvb 27.28MB
14 毛戈平–打造妆容.rmvb 89.48MB
15 毛戈平–欧式妆.rmvb 67.73MB
16 毛戈平–现代美容化妆技法1.rmvb 187.31MB
17 毛戈平–现代美容化妆技法2.rmvb 70.01MB
18 毛戈平–现代美容化妆技法3.rmvb 38.42MB
19 毛戈平–百变生活妆+新娘妆.rmvb 208.74MB
20 毛戈平–给普通人打造欧式晚妆.rmvb 76.64MB
【化妆教程11】美容白领日常聚会晚宴妆容OL化妆术 中文讲解 706 MB
1 【107-1】[彩妆]时尚韩式彩妆.MP4 360.17MB
2 【107-2】[彩妆]OL化妆术.MP4 346.39MB
【化妆教程12】小P老师化妆教程 831 MB
1 01 冰激凌眼妆.mp4 41.08MB
2 02  玩转唇妆色彩.mp4 23.73MB
3 03 遮掉黑眼圈 卸妆大不同.mp4 49.27MB
4 04 毛孔隐身术 对大毛孔说NO.mp4 37.84MB
5 05 裸素无暇 T台大热光感裸妆.mp4 52.07MB
6 06 用眉笔和眉粉画粗眉.mp4 38.51MB
7 07 双色眼线潮起来.mp4 55.09MB
8 08 想做自拍达人?妆得这么化.mp4 55.15MB
9 09 轻松玩转假睫毛.mp4 43.19MB
10 10 腮红修颜术 赶走“大饼“脸.mp4 39.61MB
11 11 蜜糖“咬唇”妆.mp4 38.20MB
12 12 完美卸妆 告别敏感肌.mp4 50.48MB
13 13 五分钟搞定上班妆.mp4 46.14MB
14 14 得体面试妆.mp4 54.54MB
15 15 避免夏日尴尬脱妆.mp4 48.58MB
16 16 双眼皮“贴”出美丽.mp4 42.67MB
17 17 自然美睫“刷”出来.mp4 34.50MB
18 18 拥有立体面孔 鼻梁是关键.mp4 35.48MB
19 19 打造超萌卧蚕妆.mp4 45.69MB
【化妆教程13】新娘化妆造型视频教程 903 MB
1 1化妆视频教程 甜美新娘化妆.flv 57.21MB
2 2化妆视频教程 中式礼服妆.flv 9.01MB
3 3化妆视频教程 户外新娘妆.flv 71.54MB
4 4化妆视频教程 舞台妆造型.flv 13.15MB
5 5化妆视频教程 时尚旗袍造型.flv 69.75MB
6 6化妆视频教程 艺术写真造型.flv 88.78MB
7 7化妆视频教程 创意新娘妆.flv 83.91MB
8 8化妆视频教程 圣诞主题造型.flv 64.68MB
9 9化妆视频教程 创意古装造型.flv 82.27MB
10 10化妆视频教程 高清喷绘新娘妆.flv 63.40MB
11 11化妆视频教程 梦幻紫玫瑰造型.flv 71.22MB
12 高级美容师职称考试新娘妆教学视频.mp4 200.26MB
13 新娘化妆技巧.pdf 28.48MB
【化妆教程14】新手MM必看化妆视频 125 MB
1 化妆教程+化妆方法一学就会+MM必备+脸部修饰技巧1 [SplitIt].mp4 26.95MB
2 化妆教程+化妆方法一学就会+MM必备+脸部修饰技巧2 [SplitIt].mp4 24.38MB
3 新手化妆MM必看哦.doc 0.11MB
4 韩版妆的化妆技巧.flv 73.97MB
【化妆教程15】自我美容之彩妆技巧基础教程 329 MB
1 自我美容之彩妆技巧.avi 329.48MB
【化妆教程16】化妆电子书 214 MB
1 70款最新新娘盘发教程教材PDF.pdf 35.43MB
2 PONY四季美妆物语.pdf 34.27MB
3 《美颜觉醒》 32.8M
4 你不可不知的100种完美化妆技巧.pdf 27.73MB
5 大S美容大王1.pdf 25.51MB
6 大S美容大王2-揭发女明星.pdf 6.61MB
7 彩妆天王Kevin-裸妆圣经.pdf 45.29MB
8 我最想要的化妆书.pdf 6.70MB



资源特色:

  • 本站所有资源都经过站长的精心搜集、辛苦整理,真正做到人无我有,人有我精,所有目录全部分类整齐,每套课程具体内容都详细介绍,让您一目了然,方便查询下载。不会像很多网站只有零星的几张截图都不知具体内容有多少。
  • 为防止百度网盘吞链接,所有教程都已打包成压缩包并设置解压密码,解压密码写在压缩包右侧说明,也是方便亲们转存下载,下载后解压即可。
  • 学习要靠自己哦,教程只提供思路方法,需要亲有意志力和按部就班的执行力,勤学勤练学以致用才能有好效果,祝每位亲亲都能学有所成。努力就有收获,人人都能成功。
  • 希望每个亲亲都是认真学习来的,真心希望亲能少花钱,学到真技术。

免责申明:

  • 本站所有素材资源均是通过网络合法渠道获取和搜集到的,仅供学习交流使用,版权归原作者所有。
  • 如需商业使用,请向版权所有者购买授权,并遵循国家相关法律规定,若因非法使用引起纠纷,一切后果由使用者承担
  • 如版权所有者认为有侵权、不妥之处,请联系站长并出示版权证明以便删除。

下载地址:

[zilla_toggle title="如果文章对您有帮助,欢迎打赏作者"] weixin zhifubao [/zilla_toggle]