紫猫插件手机版帮助

欢迎报名加入紫猫学院,享受专业的指导教学。
学院官网: https://zimaoxy.com/
微信公众号: zimaoxycom
更多信息请咨询报名QQ: 345911220 或微信: zimaoxy
3000人学习QQ群: 7333555 按键精灵后花园★紫猫
命令名称: zm.About 介绍与下载 >>点击查看最新帮助<<
功能说明: 输出最新版插件更新内容,当传入命令字符串参数时,输出该命令的在线文档地址。

:::tip 下载插件

- 紫猫手机插件最新版下载地址:打开网页
- 也可以加入QQ群7333555后,打开群文件下载插件。

:::

:::note 使用方法

- 请解压所有文件到按键精灵手机助手安装目录的`Plugin`文件夹中。
- 在脚本第一行写上`Import "zm.luae"`
- 在脚本第二行写上`zm.Init()`命令初始化运行环境后,即可调用本插件所有命令。
- 发布小精灵时,无需添加插件到附件,直接正常发布即可。
- 在按键精灵手机端执行出现插件命令方法找不到时,请在手机端搜索zm.luae文件后,将最新版zm.luae插件文件覆盖放进去即可。

:::
语法格式: 结果 = zm.About([命令])
命令参数: 命令: 字符串, 可选参数,紫猫插件里的命令名,例如`RndStr`、`ColorToHSV`等。
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Call zm.About()
zm.About "RndStr" //显示zm.RndStr命令文档地址
备注: 只是一个插件介绍功能,除了想知道文档地址外,一般不需要使用。
V1.1720: 加入命令
V1.1722: 增加一个参数,实现输出显示在线文档地址。
更新记录已转移到zm.CheckForUpdates 检查插件更新中
命令名称: zm.Init 初始化插件环境 >>点击查看最新帮助<<
功能说明: 初始化插件环境,只需要执行一次

:::tip

如果遇到初始化出错的情况,一般是因为用了新机或改机软件,导致zmplugin文件夹被清理了,请在设备上搜索zmplugin文件夹,并添加保护,避免被删除。

:::
语法格式: 结果 = zm.Init()
命令参数:
返回值:
脚本例子:
复制代码
$lizi
备注: 用于初始化插件的运行环境,加载常用数据,加强插件的稳定性,加快插件命令执行效率,一般放脚本开头运行一次即可。
V1.1723b: 初次加入
V1.1730: 修复报错问题
V1.1750: 提高执行效率
V1.1802: 加入快速初始化命令
V1.1818: 仅在每天首次启动检查更新, 大幅度提高速度
V1.1820: 优化执行效率
命令名称: zm.FindStrBaiDu 百度云找字 >>点击查看最新帮助<<
功能说明: 使用百度云识别来实现找字功能, 不需要字库, 字体颜色之类的参数, 必须先使用zm.OcrBaiDuInit 设置百度云文字识别进行初始化后使用, 默认参数使用zm.SetFindStr 设置FindStr默认参数修改
语法格式: 结果 = zm.FindStrBaiDu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, "id":id, "x":x, "y":y, "name":name, "miss":miss, "baidu":原生返回值}`, 没找到或出错返回`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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的API接口文档
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, "baidu":原生返回值}, ...}`, 没找到或失败返回`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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的API接口文档
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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.FindStrTapBaiDu 百度云找字点击 >>点击查看最新帮助<<
功能说明: 与zm.FindStrBaiDu 百度云找字类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindStrTapBaiDu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持`["显示","隐藏","show","hide"]`这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-1`和`-2`, 省略默认为`-2000`
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, "id":id, "x":x, "y":y, "name":name, "miss":miss, "baidu":原生返回值}`, 没找到或出错返回`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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的API接口文档
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1902: 优化百度云找字功能, 内部先使用`zm.OcrBaiDu()`函数查找是否存在文字, 若存在则调用含位置信息版的识别, 以节省次数
命令名称: zm.FindStrTapYouTu 优图找字点击 >>点击查看最新帮助<<
功能说明: 与zm.FindStrYouTu 优图找字类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindStrTapYouTu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持`["显示","隐藏","show","hide"]`这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.FindStrYouTu 优图找字 >>点击查看最新帮助<<
功能说明: 使用优图AI识别来实现找字功能, 对横屏识别效果不佳, 不需要字库, 字体颜色之类的参数, 必须先使用zm.OcrYouTuInit 初始化优图OCR进行初始化后使用, 默认参数使用zm.SetFindStr 设置FindStr默认参数修改
语法格式: 结果 = zm.FindStrYouTu([对象][x1, y1, x2, y2, ]文字[, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDu 百度云通用文字识别 >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用百度云实现在线云识别文字, 支持范围识别、本地图片或URL链接图片识别, 请先调用 zm.OcrBaiDuInit 设置百度云文字识别 设置后才使用本命令
语法格式: 结果 = zm.OcrBaiDu([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 暂不支持https链接, 与范围参数二选一
返回值: 字符串: 返回识别结果, 多个字符串以`\n`分割, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的参数posturl, 实现支持通用文字识别(包括含位置信息版, 含生僻字版, 高精度版, 高精度含位置版, 网络图片文字识别)
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuAll 百度云文字识别 >>点击查看最新帮助<<
功能说明: 百度云识别高级函数, 实现百度云文字识别的所有接口命令, 请求URL和请求参数请通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuAll([x1, y1, x2, y2][, 图片路径])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回识别结果, 格式与百度云文档中返回值相同, 详见百度云文字识别API文档的返回说明内容
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuBankCard 百度云银行卡识别 >>点击查看最新帮助<<
功能说明: 识别银行卡并返回卡号和发卡行, 内置固定的请求URL, 除图片外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置
语法格式: 结果 = zm.OcrBaiDuBankCard([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回优化后的识别结果, 格式为 `{"bank_card_number":"622500000000000","bank_name":"招商银行","bank_card_type":1}` , 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuBusiness 百度云营业执照识别 >>点击查看最新帮助<<
功能说明: 识别营业执照, 并返回关键字段的值, 包括单位名称/法人/地址/有效期/证件编号/社会信用代码等, 内置固定的请求URL
语法格式: 结果 = zm.OcrBaiDuBusiness([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回优化后的识别结果, 格式类似于 `{"单位名称":"紫猫编程学园","法人":"紫猫", ...}` , 详细请自行遍历查看, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuDriving 百度云驾驶证识别 >>点击查看最新帮助<<
功能说明: 对机动车驾驶证所有关键字段进行识别, 内置固定的请求URL, 除图片外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuDriving([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回优化后的识别结果, 格式类似于 `{"证号":"345911220","姓名":"紫猫", ...}` , 详细请自行遍历查看, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuForm 百度云表格文字识别 >>点击查看最新帮助<<
功能说明: 已整合为同步请求, 自动识别表格线及表格内容, 结构化输出表头, 表尾及每个单元格的文字内容, 内置固定的请求URL, 除图片外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuForm([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 字符串: 返回表格下载地址或json文本, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuHandWriting 百度云手写识别 >>点击查看最新帮助<<
功能说明: 识别屏幕上的手写文字, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuHandWriting([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 字符串: 返回屏幕上的文字内容, 失败返回`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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V3.1839: 加入命令
V3.1849: 支持超级缩放
V3.1929: 修复错误函数名
命令名称: zm.OcrBaiDuIDCard 百度云身份证识别 >>点击查看最新帮助<<
功能说明: 识别身份证正背面, 内置固定的请求URL, 除图片和正背面`id_card_side`参数外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuIDCard(正背面, [x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: 正背面: 字符串, 必选, 身份证照片的正背面, 正面照片填写`"正面"`或`"front"`, 背面照片填写`"背面"`或`"back"`
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
返回json: 表, 可选, 数组变量, 一般不建议填写, 以表的形式返回原生结果, 详见百度云文字识别API文档的返回说明内容
返回值: 表: 返回优化后的识别结果, 格式类似于 `{"公民身份号码":"345911220","姓名":"紫猫", ...}` , 详细请自行遍历查看, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuInit 设置百度云文字识别 >>点击查看最新帮助<<
功能说明: 初始化设置百度云文字识别key和请求参数, 一般只要调用一次, 除非需要用不同的识别模式与参数, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrBaiDuInit([高级属性, ][apikey, seckey][, 图片朝向][, posturl])
命令参数: 高级属性: 表, 可选, 高级参数, 一般不需要填写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见 http://ai.baidu.com/docs#/OCR-API/top 中的请求参数, 其中请求URL的键名为posturl
seckey: 字符串, 可选, 百度云文字识别控制台创建的Secret Key, 详见最下面的备注
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
百度云识别的API接口文档
本命令通过修改请求URL参数posturl与相关请求参数, 实现支持文字识别的所有功能
V1.1747: 加入命令
V2.1829: 加入图像朝向检测参数
V3.1832: 为统一命令格式, `zm.SetOcrBaidu()`改为`zm.OcrBaiduInit()`
V3.1839: 检测图像朝向功能默认为启用状态
命令名称: zm.OcrBaiDuNumbers 百度云数字识别 >>点击查看最新帮助<<
功能说明: 识别屏幕上的数字, 返回字符串数据类型, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuNumbers([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 字符串: 返回屏幕上的数字内容, 注意数据类型是字符串格式, 做大小比较请用`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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V3.1839: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuPlate 百度云车牌识别 >>点击查看最新帮助<<
功能说明: 识别机动车车牌, 并返回签发地和号牌, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuPlate([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 数组: 返回优化后的识别结果, 格式类似于 `{"鄂A345911220", ...}` , 详细请自行遍历查看, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuQRCode 百度云二维码识别 >>点击查看最新帮助<<
功能说明: 对图片中的二维码, 条形码进行检测和识别, 请先调用 zm.OcrBaiDuInit 设置百度云文字识别 设置后才使用本命令
语法格式: 结果 = zm.OcrBaiDuQRCode([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别二维码的图片本地路径, 与范围参数二选一
返回值: 字符串` 或 `表: 单个二维码返回字符串, 多个二维码返回数组.
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

//识别单个二维码
ret = zm.OcrBaiDuQRCode("/sdcard/二维码.png")
If ret then
    TracePrint "二维码内容为: ", ret
Else
    TracePrint "识别失败"
End If
备注: 本命令调用百度云的通用文字识别功能, 此命令的任何充值消费行为均与紫猫编程学园无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往百度云AI官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V4.2016: 加入命令
命令名称: zm.OcrBaiDuReceipt 百度云通用票据识别 >>点击查看最新帮助<<
功能说明: 识别医疗票据/发票/的士票/保险保单等票据类图片中的所有文字, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuReceipt([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 数组: 返回优化后的识别结果, 格式类似于 `{"345911220","紫猫", ...}` , 详细请自行遍历查看, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrBaiDuVehicle 百度云行驶证识别 >>点击查看最新帮助<<
功能说明: 对机动车行驶证正本所有关键字段进行识别, 内置固定的请求URL, 除图片参数外的请求参数通过 zm.OcrBaiDuInit 设置百度云文字识别 设置, 具体内容见百度云文字识别API文档
语法格式: 结果 = zm.OcrBaiDuVehicle(正背面, [x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径, 与范围参数二选一
返回值: 表: 返回优化后的识别结果, 格式类似于 `{"品牌型号":"保时捷GT37182RUCRE","所有人":"紫猫", ...}` , 详细请自行遍历查看, 失败返回`null`
脚本例子:
复制代码
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官网注册并登录
打开文字识别控制台
点击创建应用, 并输入应用名称与应用描述
查看刚刚创建的应用, 就可以查到API Key和Secret Key
本命令通过修改 zm.OcrBaiDuInit 设置百度云文字识别 的请求参数, 实现更多功能, 详见详见百度云文字识别API文档的请求说明内容
V1.1747: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrNumbers 免字库识别数字 >>点击查看最新帮助<<
功能说明: 免字库识别指定范围内符合颜色的数值, 支持小数, 基于 SmartOcr 免字库识别数字 开发.

该命令目前还在优化中, 识别效果以实际执行效果为准.
语法格式: 结果 = zm.OcrNumbers(x1, y1, x2, y2, 颜色, 识别模式, 旋转方向)
命令参数: 左上角x: 数值型, 识别区域范围的左上角x坐标,区域范围全为`0`时表示全屏范围。请尽量缩小识别范围, 提高准确率.
右下角x: 数值型, 识别区域范围的右下角x坐标,区域范围全为`0`时表示全屏范围。请尽量缩小识别范围, 提高准确率.
颜色值: 字符串, 识别数字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如"FFFFFF-101010|123456"。
旋转方向: 数值型, 可选, `0`为没有旋转, `1`为逆时针旋转90度, `2`为逆时针旋转180度, `3`为逆时针旋转270度, 省略默认`null`, 为自动识别, 3.7.9按键存在BUG, 不推荐省略本参数.
返回值: 数值型` 或 `字符串` 或 `表: 识别模式参数为`0`时, 返回字符串; 识别模式参数为`1`时, 返回数值型; 识别模式为`2`时, 返回坐标数组table, 格式为 `{x, y, "x":x, "y":y}`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//识别小数
Dim 数值 = zm.OcrNumbers(100,100,120,110,"000000", 1, 1)
TracePrint 数值

//识别坐标
Dim 坐标 = zm.OcrNumbers(100,100,120,110,"000000", 2, 2)
TracePrint 坐标["x"], 坐标["y"]
备注: 本命令目前还在优化中, 识别效果以实际测试为准.
V4.2016: 初次加入
V4.2017: 优化准确率并加入识别坐标功能
V4.2402: 加入`旋转方向`参数, 建议测试并填写正确方向, 不要自动识别, 因为按键自带BUG, 多次自动识别会出现异常
命令名称: zm.OcrYouDao 有道智云OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用有道智云实现在线云识别文字, 支持范围识别或指定图片识别, 必须先使用 zm.OcrYouDaoInit 设置有道智云OCR 进行初始化
语法格式: 结果 = zm.OcrYouDao([x1, y1, x2, y2][, 图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 不可与图片路径参数同时存在
x2: 数值型, 可选, 识别范围的右下角x坐标, 不可与图片路径参数同时存在
图片路径: 字符串, 可选, 要识别内容的图片路径, 不可与范围参数同时存在
返回值: 字符串: 返回识别结果, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

Dim ret = zm.OcrYouDao(100,100,400,400)
TracePrint "识别结果为:", ret
备注: 本命令调用网易公司的有道智云OCR功能, 此命令的任何充值消费行为均与紫猫编程学园无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往有道智云官网注册并登录
创建一个我的应用
再创建一个文字识别OCR实例, 并绑定应用
打开应用就可以看到应用ID和应用密钥
识别范围与图片路径参数只能二选一, 不可同时填写
V1.1745: 加入命令
V1.1746: 解决语法报错问题
V3.1849: 支持超级缩放
命令名称: zm.OcrYouDaoInit 设置有道智云OCR >>点击查看最新帮助<<
功能说明: 初始化设置有道智云OCR的账户数据, 只要调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrYouDaoInit([列表, ][应用ID, 应用密钥])
命令参数: 列表: 表, 可选, 高级参数, 建议不写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见下方属性表
应用密钥: 字符串, 可选, 有道智云后台创建的应用密钥, 详见最下面的备注
可选, 有道智云后台创建的应用密钥, 详见最下面的备注
属性 | 默认值 | 数据类型 | 解释
---|-----|------|---
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功能, 此命令的任何充值消费行为均与紫猫编程学园无关
请自己注册帐号, 试用后再决定是否充值使用
后台创建步骤:
前往有道智云官网注册并登录
创建一个我的应用
再创建一个文字识别OCR实例, 并绑定应用
打开应用就可以看到应用ID和应用密钥
V1.1745: 加入命令
V3.1832: 为统一命令格式, `zm.SetOcrYouDao()`改为`zm.OcrYouDaoInit()`
命令名称: zm.OcrYouTu 优图通用OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别文字, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTu([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回值: 字符串: 成功返回识别结果, 多行内容以`"\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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBankCard 优图银行卡OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别银行卡, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBankCard([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBC 优图名片OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别名片, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBC([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuBusiness 优图营业执照OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别营业执照, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuBusiness([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuDriverLicense 优图行驶证驾驶证OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别行驶证与驾驶证, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuDriverLicense(类型, [x1, y1, x2, y2][图片路径][, 返回json])
命令参数: 类型: 数值型`或`字符串, 必选, 行驶证照片填写"行驶证"或0, 驾驶证照片填写"驾驶证"或1
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见优图行驶证驾驶证OCR文档的响应参数部分
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuHandWriting 优图手写OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别手写文字, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuHandWriting([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回值: 字符串: 成功返回识别结果, 多行内容以`"\n"`分割, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化优图账户数据, 只需执行一次, 请自行修改
zm.OcrYouTuInit("请修改成你的AppID", "请修改成你的AppKey")
Dim ret = zm.OcrYouTuHandWriting("/sdcard/名片.png")
TracePrint "手写数据: ", ret
备注: 本命令调用腾讯优图OCR的识别功能, 与百度云识别相比, 目前优图OCR完全免费使用
获取优图AppID和AppKey的步骤:
前往腾讯AI官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuIDCard 优图身份证OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别身份证, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuIDCard(正反面, [x1, y1, x2, y2][图片路径][, 返回json])
命令参数: 正反面: 数值型`或`字符串, 必选, 身份证照片的正反面, 正面照片填写"正面"或0, 反面照片填写"反面"或1
y1: 数值型, 可选, 识别范围的左上角y坐标, 与图片路径参数二选一
y2: 数值型, 可选, 识别范围的右下角y坐标, 与图片路径参数二选一
返回json: table, 可选, 数组变量, 一般不需要填写, 以表的形式返回原生结果, 包括文字坐标等, 详见优图行驶证驾驶证OCR文档的响应参数部分
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
V3.1849: 支持超级缩放
命令名称: zm.OcrYouTuInit 初始化优图OCR >>点击查看最新帮助<<
功能说明: 初始化设置腾讯优图OCR识别的账户AppID和AppKey, 一般只需调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.OcrYouTuInit(AppID, AppKey)
命令参数: AppID: 字符串, 可选, 腾讯AI控制台创建的优图OCR AppID, 详见最下面的备注
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部OCR接口
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.OcrYouTuPlate 优图车牌OCR >>点击查看最新帮助<<
功能说明: 无需制作字库, 使用腾讯的免费优图OCR实现在线云识别车牌, 支持范围识别、本地图片或URL链接图片识别, 图片大小上限1MB, 请先调用 zm.OcrYouTuInit 初始化优图OCR 设置后才使用本命令
语法格式: 结果 = zm.OcrYouTuPlate([x1, y1, x2, y2][图片路径][, 返回json])
命令参数: x1: 数值型, 可选, 识别范围的左上角x坐标, 与图片路径参数二选一
x2: 数值型, 可选, 识别范围的右下角x坐标, 与图片路径参数二选一
图片路径: 字符串, 可选, 要识别内容的图片本地路径或者URL图片链接, 支持https链接, 与范围参数二选一
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 记得勾选全部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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 勾选`语音合成`
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.SpeechSsYouTuInit 初始化优图语音合成 >>点击查看最新帮助<<
功能说明: 初始化设置腾讯AI语音合成的账户AppID和AppKey, 一般只需调用一次, 账户注册详见最下方的备注
语法格式: 结果 = zm.SpeechSsYouTuInit([高级属性][AppID, AppKey])
命令参数: 高级属性: table, 可选, 一般不需要填写, 以table类型详细设置每个参数, 若填写本参数, 则将忽略其他参数, 详见下面表格
AppKey: 字符串, 可选, 腾讯AI控制台创建的语音合成 AppKey, 详见最下面的备注
返回值: 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官网注册并登录
打开控制台
点击创建应用, 并输入相关资料, 勾选`语音合成`
查看刚刚创建的应用, 就可以查到AppID和AppKey
V3.1832: 加入命令
命令名称: zm.ElementFind 超级查找元素 >>点击查看最新帮助<<
功能说明: 根据条件查找元素节点, 返回元素节点表信息与中心坐标等数据. 比 Element.Find 查找指定元素 更加强大, 具体特色如下

- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 支持抓抓上的五大元素特征串, 分别是 `text`, `resource-id`, `class`, `package`, `content-desc`, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为 `And` 关系
- 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
- 大量可选参数, 减少不必要的代码量
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表, 方便优化代码结构
语法格式: 结果 = zm.ElementFind([对象, ...][x1,y1,x2,y2,][元素特征, ...][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
命令参数: 对象: 表, 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 `OR` 关系, 找到任何一个对象立即返回结果
y1: 数值型, 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
y2: 数值型, 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
指定坐标x: 数值型, 可选, 直接获取指定坐标上的元素特征串, 省略默认为`0`, 指定坐标`0,0`表示不使用本参数
是否最终元素: 布尔型, 可选, 是否只获取没有子节点的最终元素节点, 省略默认为`true`, 表示只获取没有子节点的最终元素元素
超时时间: 数值型, 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断
返回值: 表: 找到返回元素特征表, 没找到返回 `null`, 元素特征表格式为 `{"x":0,"y":0,"id":0,"xy":[0,0]"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}` , 其中 `"x"`, `"y"` 代表找到元素节点的中心位置坐标, 可用于tap点击, `"id"` 代表多个对象情况下找到的那个序号
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------简易用法--------------------//
//下面这个例子实现了限时5秒钟内获取并点击桌面显示的微信App坐标
//这里找到的坐标为元素中心的坐标
Dim 微信 = zm.ElementFind("微信", 5000)
If 微信 Then 
    TracePrint "找到微信的坐标为: ", 微信["x"], 微信["y"]
    zm.Tap 微信["x"], 微信["y"]
    //小技巧: 返回值中另一个xy成员是数组表, 可以直接被zm.tap调用
    //zm.Tap 微信["xy"] //这句代码也实现了点击坐标功能
Else 
    TracePrint "没找到微信"
End If


//--------------------获取元素文本--------------------//
//获取右上角的时间文本
//这里3个参数是And关系, 也就是要在抓抓上的5个特征中同时找到符合这3个参数值
Dim 时钟 = zm.ElementFind("com.android.systemui:id/clock", "android.widget.TextView","com.android.systemui")
If 时钟 Then 
    TracePrint "当前时间为: ", 时钟["text"]
Else 
    TracePrint "没找到时钟"
End If

//--------------------指定坐标--------------------//
//获取指定坐标的元素文本内容
//一般指定坐标情况下必定有元素的存在, 但该元素不一定有text文本内容
//所以建议是再加上一些元素特征串, 避免获取到的内容不是自己想要的数据
//另外默认仅获取最后一个子元素节点, 如果该坐标只有父节点的话, 请修改布尔值参数
Dim 指定坐标文本 = zm.ElementFind("android.view.View", 650, 1222, 2000)
If 指定坐标文本 Then 
    TracePrint "指定坐标的元素文本为:", 指定坐标文本["text"]
Else 
    TracePrint "没找到元素"
End If

//--------------------指定范围--------------------//
//在固定范围内查找符合条件的元素
//当你发现有大量元素特征重复的情况下, 除了可以用指定坐标解决外, 也可以用指定范围
//指定范围必须要完全包括元素, 例如元素边框是100,100,200,200, 那么范围必须比它大
//如果担心元素不对, 可以加上一些特征串, 这里省略不加
Dim 范围元素 = zm.ElementFind(90, 90, 210, 210)
If 范围元素 Then 
    TracePrint "范围元素的元素坐标与文本为:", 范围元素["x"], 范围元素["y"], 范围元素["text"]
Else 
    TracePrint "没找到元素"
End If

//--------------------对象用法--------------------//
//对象嘛, 肯定是要你自己去找到, 找不到咋办?自己创建一个呗, 咳咳
//所谓的对象其实就是把所有用到普通参数放到一个table数组中
//有了对象后, 将忽略除了超时时间外的所有普通参数, 多个超时时间仅取最大值
//允许填写多个对象, 内部将会循环查找, 找到任何一个对象立即返回结果
//对象参数必须从第1个参数位置开始填写
//下面定义对象的特征串与超时时间, 其他参数也可以写进来
Dim 京东对象 = {"京东","android.widget.TextView","com.android.launcher3", 1000}
Dim 淘宝对象 = {"淘宝","android.widget.TextView","com.android.launcher3", 2000}
//传入多个对象与另一个超时时间, 由于5000大于1000, 所以超时最终为5000毫秒
//假如外面不写超时的话, 那最终超时时间由两个对象决定出最大值为2000毫秒
Dim 对象结果 = zm.ElementFind(京东对象, 淘宝对象, 5000)
If 对象结果 Then 
    TracePrint "找到了一个对象, 坐标为:", 对象结果["x"], 对象结果["y"], "序号为:", 对象结果["id"]
Else
    TracePrint "没有找到任何一个对象喜欢你, 呜呜呜...."
End If


//--------------------正则匹配--------------------//
//元素特征默认是完整匹配, 即大小写与长度都要符合才能找到
//但填入参数-2后将切换至正则匹配模式, 需注意这里使用的是Lua的正则规则
//一般不推荐新手使用该方法, 但这里提供几种简易的规则供大家模仿
// ^紫猫.* 这个规则表示匹配由紫猫做开头的元素特征
// .*紫猫$ 这个规则表示匹配由紫猫做结尾的元素特征
// .*紫猫.* 这个规则表示匹配包含紫猫的元素特征
//更多的匹配规则请浏览 https://zimaoxy.com/m/post/pattern-matching/

Dim 正则结果 = zm.ElementFind("^充值.*", -2)
If 正则结果 Then 
    TracePrint "找到元素为:", 正则结果["text"]
Else 
    TracePrint "未找到元素"
End If
备注: 关于参数填写顺序说明
本插件所有参数都是可选的, 绝大多数参数对顺序没有要求, 但以下3个参数有顺序要求
( `查找范围`, `指定坐标`, `超时时间` )
这3个参数均为可选参数, 中间也可以填写其他参数, 但是前后关系不能打乱, 下面举几个例子
正确例子: ( `查找范围`, `超时时间`), (`指定坐标`, `元素特征`, `超时时间`), (`查找范围`, `元素特征`)
错误例子: (`超时时间`, `查找范围`), (`查找范围`, `超时时间`, `指定坐标`), (`指定坐标`, `元素特征`, `查找范围`)
如果无法理解的话, 建议按照语法说明的参数顺序填写
关于对象参数
对象参数必须从第1个位置开始填写, 并且填写后除了超时时间外的其他普通参数全都忽略
多个对象为 `OR` 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
关于元素特征串
支持抓抓上的`text`, `resource-id`, `class`, `package`, `content-desc`
填写数量自定义, 你可以只写1个, 也可以写3个, 甚至都不写或者全都写.
查找时忽略特征名, 只找特征值, 例如你填写了 `"微信"`, 那么有可能找到 `text` 是 `微信` 的元素, 或者 `content-desc` 是 `微信` 的元素.
查找时要求填写的特征全都要找到才算符合条件, 包括填写空字符串 `""`, 也会要求找到对应空字符串
两个特征值一样的也会查找, 例如你填写了 `"微信", "微信"`, 那么查找的时候就会去找元素特征里存在两个 `微信` 的元素
关于最终元素
最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 `+` 或 `-` 的元素
关于旋转横屏坐标处理
如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
需按键精灵V3.5.8以上版本支持本命令
V4.2111: 初次加入
v4.2514: 提高查找效率
命令名称: zm.ElementFindEx 超级查找元素返回全部 >>点击查看最新帮助<<
功能说明: - 与zm.ElementFind 超级查找元素的唯一区别是返回了所有找到的坐标, 注意如果多个对象的话, 仅返回找到的首个对象所有坐标.
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 支持抓抓上的五大元素特征串, 分别是 `text`, `resource-id`, `class`, `package`, `content-desc`, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为 `And` 关系
- 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
- 大量可选参数, 减少不必要的代码量
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表, 方便优化代码结构
语法格式: 结果 = zm.ElementFindEx([对象, ...][x1,y1,x2,y2,][元素特征, ...][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
命令参数: 对象: 表, 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 `OR` 关系, 找到任何一个对象立即返回结果
y1: 数值型, 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
y2: 数值型, 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
指定坐标x: 数值型, 可选, 直接获取指定坐标上的元素特征串, 省略默认为`0`, 指定坐标`0,0`表示不使用本参数
是否最终元素: 布尔型, 可选, 是否只获取没有子节点的最终元素节点, 省略默认为`true`, 表示只获取没有子节点的最终元素元素
超时时间: 数值型, 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断
返回值: 表: 返回找到首个对象的所有元素特征二维表, 没找到返回 `null`, 元素特征表格式为 `{"id":0, "counts":0, {"x":0,"y":0,"xy":[0,0],"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}, ...}` , 其中 `"x"`, `"y"` 代表找到元素节点的中心位置坐标, 可用于tap点击, `"id"` 代表多个对象情况下找到的那个序号, `"counts"` 代表找到的数量
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//参数语法与zm.ElementFind()一样, 只是返回值不同
//所以这里仅写几个例子, 更多例子详见zm.ElementFind()命令

//--------------获取所有符合条件的元素--------------//
Dim nodes = zm.ElementFindEx("android.widget.TextView", "com.android.launcher3")
If nodes Then 
    TracePrint "一共找到了", nodes["counts"], "个元素"
    For i = 1 To nodes["counts"]
    	TracePrint "第", i, "个元素标题是", nodes[i]["text"], ", 坐标是", nodes[i]["x"], ",", nodes[i]["y"]
    Next
Else 
    TracePrint "没有找到元素"
End If

//--------------多个对象情况--------------//
//如果存在多个对象时, 仅返回找到首个对象的所有元素
//例如对象1, 对象2, 对象3循环限时查找, 当找到对象2存在时, 将对象2所有元素都返回后, 立即停止查找
Dim 京东对象 = {"京东","android.widget.TextView","com.android.launcher3", 1000}
Dim 淘宝对象 = {"淘宝","android.widget.TextView","com.android.launcher3", 2000}
Dim 对象结果 = zm.ElementFindEx(京东对象, 淘宝对象, 5000)
If 对象结果 Then 
    TracePrint "找到了第", 对象结果["id"], "个对象, 一共有", 对象结果["counts"], "个元素"
    For i = 1 To 对象结果["counts"]
    	TracePrint "第", i, "个元素标题是", 对象结果[i]["text"], ", 坐标是", 对象结果[i]["x"], ",", 对象结果[i]["y"]
    Next
Else
    TracePrint "没有找到任何一个对象喜欢你, 呜呜呜...."
End If
备注: 关于多个对象查找返回注意事项
多个对象依旧会循环查找, 但是当找到一个对象时, 将返回该对象的所有元素节点后, 停止查找
如果你需要所有对象都返回所有节点, 请多写几行不同参数的代码
关于参数填写顺序说明
本插件所有参数都是可选的, 绝大多数参数对顺序没有要求, 但以下3个参数有顺序要求
( `查找范围`, `指定坐标`, `超时时间` )
这3个参数均为可选参数, 中间也可以填写其他参数, 但是前后关系不能打乱, 下面举几个例子
正确例子: ( `查找范围`, `超时时间`), (`指定坐标`, `元素特征`, `超时时间`), (`查找范围`, `元素特征`)
错误例子: (`超时时间`, `查找范围`), (`查找范围`, `超时时间`, `指定坐标`), (`指定坐标`, `元素特征`, `查找范围`)
如果无法理解的话, 建议按照语法说明的参数顺序填写
关于对象参数
对象参数必须从第1个位置开始填写, 并且填写后除了超时时间外的其他普通参数全都忽略
多个对象为 `OR` 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
关于元素特征串
支持抓抓上的`text`, `resource-id`, `class`, `package`, `content-desc`
填写数量自定义, 你可以只写1个, 也可以写3个, 甚至都不写或者全都写.
查找时忽略特征名, 只找特征值, 例如你填写了 `"微信"`, 那么有可能找到 `text` 是 `微信` 的元素, 或者 `content-desc` 是 `微信` 的元素.
查找时要求填写的特征全都要找到才算符合条件, 包括填写空字符串 `""`, 也会要求找到对应空字符串
两个特征值一样的也会查找, 例如你填写了 `"微信", "微信"`, 那么查找的时候就会去找元素特征里存在两个 `微信` 的元素
关于最终元素
最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 `+` 或 `-` 的元素
关于旋转横屏坐标处理
如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
需按键精灵V3.5.8以上版本支持本命令
V4.2113: 初次加入
v4.2514: 提高查找效率
命令名称: zm.ElementFindExTap 超级查找元素返回全部并点击 >>点击查看最新帮助<<
功能说明: 与zm.ElementFindEx 超级查找元素返回全部相比, 仅多了一个找到后立即点击所有元素的功能, 其它都相同, 点击会受zm.SetTap 设置超级点击设置影响, 内置每次点击间隔250毫秒.

- 找到后内部会调用zm.SetTap 设置超级点击点击找到的坐标
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 支持抓抓上的五大元素特征串, 分别是 `text`, `resource-id`, `class`, `package`, `content-desc`, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为 `And` 关系
- 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
- 大量可选参数, 减少不必要的代码量
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表, 方便优化代码结构
语法格式: 结果 = zm.ElementFindExTap([对象, ...][x1,y1,x2,y2,][元素特征, ...][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
命令参数: 对象: 表, 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 `OR` 关系, 找到任何一个对象立即返回结果
y1: 数值型, 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
y2: 数值型, 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
指定坐标x: 数值型, 可选, 直接获取指定坐标上的元素特征串, 省略默认为`0`, 指定坐标`0,0`表示不使用本参数
是否最终元素: 布尔型, 可选, 是否只获取没有子节点的最终元素节点, 省略默认为`true`, 表示只获取没有子节点的最终元素元素
超时时间: 数值型, 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断
返回值: 表: 返回找到首个对象的所有元素特征二维表, 没找到返回 `null`, 元素特征表格式为 `{"id":0, "counts":0, {"x":0,"y":0,"xy":[0,0],"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}, ...}` , 其中 `"x"`, `"y"` 代表找到元素节点的中心位置坐标, 可用于tap点击, `"id"` 代表多个对象情况下找到的那个序号, `"counts"` 代表找到的数量
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令与zm.ElementFindEx()类似, 仅多了一个找到后立即点击所有点功能, 故详细例子请去查看zm.ElementFindEx()命令
//下面演示打开京东的发现, 并依次点击关注
RunApp "com.jingdong.app.mall"

If zm.ElementFindTap("发现", "com.jingdong.app.mall", "android.view.View", 5000) Then 
    TracePrint "找到发现, 并已点击"
    Delay 3000
Else 
    TracePrint "没找到发现"
End If

Dim 关注 = zm.ElementFindExTap("com.jd.lib.DiscoverAttention:id/a5_", "android.widget.ImageView", "com.jingdong.app.mall", "", "", 5000)
If 关注 Then 
    TracePrint "找到", 关注["counts"], "个关注并全部已点击"
Else 
    TracePrint "没找到关注"
End If
备注: 关于多个对象查找返回注意事项
多个对象依旧会循环查找, 但是当找到一个对象时, 将返回该对象的所有元素节点后, 停止查找
如果你需要所有对象都返回所有节点, 请多写几行不同参数的代码
关于参数填写顺序说明
本插件所有参数都是可选的, 绝大多数参数对顺序没有要求, 但以下3个参数有顺序要求
( `查找范围`, `指定坐标`, `超时时间` )
这3个参数均为可选参数, 中间也可以填写其他参数, 但是前后关系不能打乱, 下面举几个例子
正确例子: ( `查找范围`, `超时时间`), (`指定坐标`, `元素特征`, `超时时间`), (`查找范围`, `元素特征`)
错误例子: (`超时时间`, `查找范围`), (`查找范围`, `超时时间`, `指定坐标`), (`指定坐标`, `元素特征`, `查找范围`)
如果无法理解的话, 建议按照语法说明的参数顺序填写
关于对象参数
对象参数必须从第1个位置开始填写, 并且填写后除了超时时间外的其他普通参数全都忽略
多个对象为 `OR` 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
关于元素特征串
支持抓抓上的`text`, `resource-id`, `class`, `package`, `content-desc`
填写数量自定义, 你可以只写1个, 也可以写3个, 甚至都不写或者全都写.
查找时忽略特征名, 只找特征值, 例如你填写了 `"微信"`, 那么有可能找到 `text` 是 `微信` 的元素, 或者 `content-desc` 是 `微信` 的元素.
查找时要求填写的特征全都要找到才算符合条件, 包括填写空字符串 `""`, 也会要求找到对应空字符串
两个特征值一样的也会查找, 例如你填写了 `"微信", "微信"`, 那么查找的时候就会去找元素特征里存在两个 `微信` 的元素
关于最终元素
最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 `+` 或 `-` 的元素
关于旋转横屏坐标处理
如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
需按键精灵V3.5.8以上版本支持本命令
V4.2113: 初次加入
v4.2514: 提高查找效率
命令名称: zm.ElementFindS 超级查找元素(专业版) >>点击查看最新帮助<<
功能说明: - 与zm.ElementFind 超级查找元素的区别是支持抓抓上所有特征串, 但仅支持键值对形式的对象参数, 并且对每个键名与键值做了详细规定, 详见代码例子
- 支持index范围查找, 一些特征不明显的直接用index元素秒杀
- 支持抓抓上的所有特征串, 详细写法见参数说明与代码例子
- 同一个键名允许填写多个键值, 多个之间为或关系, 详见代码例子
- 大量键名支持简写方式, 详见代码例子
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
语法格式: 结果 = zm.ElementFindS(元素对象[, ...][, 超时时间])
命令参数: 元素对象: 表, 要查找的元素特征表, 支持多个元素对象参数, 每个对象之间为或关系, 格式为`{"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":{0,0,0,0},"xy":{0,0},"size":{0,0},"ischild":true,"matchmode":0,"timeout":0}`, 每个成员均是可选的, 具体定义详见代码例子
返回值: 表: 找到返回元素特征表, 没找到返回 `null`, 元素特征表格式为 `{"x":0,"y":0,"id":0,"xy":[0,0]"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}` , 其中 `"x"`, `"y"` 代表找到元素节点的中心位置坐标, 可用于tap点击, `"id"` 代表多个对象情况下找到的那个序号
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令与zm.ElementFind()相似, 但是区别在于更加专业严谨
//元素特征表除了抓抓上的键值对外, 还增加了一些缩写与新键值对参数
//填写相关元素特征则查找, 若不填写则忽略

//----------index与id----------//
//"index":10, 表示抓抓上的index值为10
//"index":{10,20}, 表示抓抓上index值为10或者20, 支持任意数量个
//"index":{ {20, 30} }, 表示抓抓上index的范围在20到30之间, 包括20和30
//"index":{ {20, 30}, {40, 80} }, 表示抓抓上index的范围在20到30或者40到80之间, 支持任意数量个
//index的缩写是id, 即 "id":10 与 "index":10 是相同的意思.

//----------text与txt, resource-id与res, class与cls, package与pkg, content-desc与des----------//
//"text":"紫猫学园", 表示抓抓上的text值为紫猫学园
//"text":{"紫猫学园", "zimaoxy.com"}, 表示抓抓上的text值为 紫猫学园 或者 zimaoxy.com, 支持任意数量个
//text的缩写是txt, 即 txt:"紫猫" 与 text:"紫猫" 是相同意思
//resource-id, class, package, content-desc均与text类似, 都分别代表抓抓上的键值对
//res, cls, pkg, des分别对应以上键名的缩写

//----------布尔型元素----------//
//所有抓抓上的布尔型元素均暂无缩写, 保持与抓抓一致即可

//----------坐标特征----------//
//所有范围默认5个像素坐标的误差
//"bounds":{100,200,300,400}, 表示查找范围左上角100,200,右下角300,400以内的元素, 受范围误差影响
//"bounds":{ {10,20,30,40}, {50,60,70,80} }, 表示查找 范围10,20,30,40 或者 范围50,60,70,80 内的元素, 受范围误差影响
//"size":{100,200}, 表示查找长度100, 宽度200形状的元素, 受范围误差影响
//"size":{ {10,20}, {40,60} }, 表示查找 长度10,宽度20 或 长度40,宽度60 形状的元素, 受范围误差影响
//"xy":{10, 20}, 表示查找坐标点10, 20位置的元素, 受范围误差影响
//"xy":{ {10, 20}, {33, 55} }, 表示查找坐标点 10,20 或者 33,55 位置的元素, 受范围误差影响

//----------自定义参数----------//
//"ischild":true, 默认true, 表示只查最终元素, 改为false将查所有元素
//"timeout":0, 默认0, 表示查找超时时间
//"matchmode":-1, 默认-1, 表示查找模式, -1为完整匹配, -2为正常匹配
//"offsetlen":5, 默认5, 表示范围相关参数默认误差5个像素坐标


//下面是表示限时5秒内查找index范围在10到40之间, text值为按键精灵或按键精灵高级版的元素
//适当使用index可以提高查找效率与准确率, 但请注意, 不同设备或者不同界面内容的情况下, index值可能会变化
Dim 按键对象 = {"id":{ {10,40} }, "text":{"按键精灵", "按键精灵高级版"} }
Dim 按键元素 = zm.ElementFindS(按键对象, 5000)
If 按键元素 Then 
    TracePrint "找到按键的坐标为:", 按键元素["x"], ",", 按键元素["y"], ", text值是", 按键元素["text"]
Else 
    TracePrint "没找到按键"
End If
备注: 关于对象参数
多个对象为 `OR` 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
关于元素特征串
对象中元素特征串必须与元素名一一对应, 若不填写则忽略该元素
关于最终元素
最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 `+` 或 `-` 的元素
关于Index
不同画面或不同设备的Index均可能会出现变化, 故使用前请务必详细测试
关于旋转横屏坐标处理
如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
需按键精灵V3.5.8以上版本支持本命令
V4.2113: 初次加入
v4.2514: 提高查找效率
命令名称: zm.ElementFindSTap 超级查找元素并点击(专业版) >>点击查看最新帮助<<
功能说明: - 与zm.ElementFindS 超级查找元素(专业版)的唯一区别是找到后立即点击该坐标
- 与zm.ElementFindTap 超级查找元素点击的区别是支持抓抓上所有特征串, 但仅支持键值对形式的对象参数, 并且对每个键名与键值做了详细规定, 详见代码例子
- 支持index范围查找, 一些特征不明显的直接用index元素秒杀
- 支持抓抓上的所有特征串, 详细写法见参数说明与代码例子
- 同一个键名允许填写多个键值, 多个之间为或关系, 详见代码例子
- 大量键名支持简写方式, 详见代码例子
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
语法格式: 结果 = zm.ElementFindSTap(元素对象[, ...][, 超时时间])
命令参数: 元素对象: 表, 要查找的元素特征表, 支持多个元素对象参数, 每个对象之间为或关系, 格式为`{"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":{0,0,0,0},"xy":{0,0},"size":{0,0},"ischild":true,"matchmode":0,"timeout":0}`, 每个成员均是可选的, 具体定义详见代码例子
返回值: 表: 找到返回元素特征表, 没找到返回 `null`, 元素特征表格式为 `{"x":0,"y":0,"id":0,"xy":[0,0]"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}` , 其中 `"x"`, `"y"` 代表找到元素节点的中心位置坐标, 可用于tap点击, `"id"` 代表多个对象情况下找到的那个序号
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令与zm.ElementFind()相似, 但是区别在于更加专业严谨
//元素特征表除了抓抓上的键值对外, 还增加了一些缩写与新键值对参数
//填写相关元素特征则查找, 若不填写则忽略

//----------index与id----------//
//"index":10, 表示抓抓上的index值为10
//"index":{10,20}, 表示抓抓上index值为10或者20, 支持任意数量个
//"index":{ {20, 30} }, 表示抓抓上index的范围在20到30之间, 包括20和30
//"index":{ {20, 30}, {40, 80} }, 表示抓抓上index的范围在20到30或者40到80之间, 支持任意数量个
//index的缩写是id, 即 "id":10 与 "index":10 是相同的意思.

//----------text与txt, resource-id与res, class与cls, package与pkg, content-desc与des----------//
//"text":"紫猫学园", 表示抓抓上的text值为紫猫学园
//"text":{"紫猫学园", "zimaoxy.com"}, 表示抓抓上的text值为 紫猫学园 或者 zimaoxy.com, 支持任意数量个
//text的缩写是txt, 即 txt:"紫猫" 与 text:"紫猫" 是相同意思
//resource-id, class, package, content-desc均与text类似, 都分别代表抓抓上的键值对
//res, cls, pkg, des分别对应以上键名的缩写

//----------布尔型元素----------//
//所有抓抓上的布尔型元素均暂无缩写, 保持与抓抓一致即可

//----------坐标特征----------//
//所有范围默认5个像素坐标的误差
//"bounds":{100,200,300,400}, 表示查找范围左上角100,200,右下角300,400以内的元素, 受范围误差影响
//"bounds":{ {10,20,30,40}, {50,60,70,80} }, 表示查找 范围10,20,30,40 或者 范围50,60,70,80 内的元素, 受范围误差影响
//"size":{100,200}, 表示查找长度100, 宽度200形状的元素, 受范围误差影响
//"size":{ {10,20}, {40,60} }, 表示查找 长度10,宽度20 或 长度40,宽度60 形状的元素, 受范围误差影响
//"xy":{10, 20}, 表示查找坐标点10, 20位置的元素, 受范围误差影响
//"xy":{ {10, 20}, {33, 55} }, 表示查找坐标点 10,20 或者 33,55 位置的元素, 受范围误差影响

//----------自定义参数----------//
//"ischild":true, 默认true, 表示只查最终元素, 改为false将查所有元素
//"timeout":0, 默认0, 表示查找超时时间
//"matchmode":-1, 默认-1, 表示查找模式, -1为完整匹配, -2为正常匹配
//"offsetlen":5, 默认5, 表示范围相关参数默认误差5个像素坐标


//下面是表示限时5秒内查找index范围在10到40之间, text值为按键精灵或按键精灵高级版的元素
//适当使用index可以提高查找效率与准确率, 但请注意, 不同设备或者不同界面内容的情况下, index值可能会变化
Dim 按键对象 = {"id":{ {10,40} }, "text":{"按键精灵", "按键精灵高级版"} }
Dim 按键元素 = zm.ElementFindSTap(按键对象, 5000)
If 按键元素 Then 
    TracePrint "找到并点击按键的坐标为:", 按键元素["x"], ",", 按键元素["y"], ", text值是", 按键元素["text"]
Else 
    TracePrint "没找到按键"
End If
备注: 关于对象参数
多个对象为 `OR` 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
关于元素特征串
对象中元素特征串必须与元素名一一对应, 若不填写则忽略该元素
关于最终元素
最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 `+` 或 `-` 的元素
关于Index
不同画面或不同设备的Index均可能会出现变化, 故使用前请务必详细测试
关于旋转横屏坐标处理
如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
需按键精灵V3.5.8以上版本支持本命令
V4.2113: 初次加入
v4.2514: 提高查找效率
命令名称: zm.ElementFindTap 超级查找元素点击 >>点击查看最新帮助<<
功能说明: 与zm.ElementFind 超级查找元素相比, 仅多了一个找到后立即点击的功能, 其它都相同, 点击会受zm.SetTap 设置超级点击设置影响.

根据条件查找元素节点并点击, 返回元素节点表信息与中心坐标等数据. 比 `Element.Find()` 更加强大, 具体特色如下

- 找到后内部会调用zm.SetTap 设置超级点击点击找到的坐标
- 除了返回抓抓上显示的元素特征信息外, 还有中心坐标, index等数据
- 支持指定范围查找, 再也不用担心找到范围外的元素节点了, 甚至直接获取指定范围内的节点
- 支持指定坐标查找, 直接获取该坐标点的元素节点, 不用再考虑特征串之类的了
- 支持抓抓上的五大元素特征串, 分别是 `text`, `resource-id`, `class`, `package`, `content-desc`, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为 `And` 关系
- 除了支持普通的完整匹配外, 还支持正则匹配模式, 让元素特征串更加灵活
- 默认仅获取最终子节点, 避免干扰, 但你也可以改为获取任意一个符合条件的节点
- 担心查找的时候节点还没出现? 限时循环查找完美解决这个问题
- 大量可选参数, 减少不必要的代码量
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表, 方便优化代码结构
语法格式: 结果 = zm.ElementFindTap([对象, ...][x1,y1,x2,y2,][元素特征, ...][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
命令参数: 对象: 表, 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 `OR` 关系, 找到任何一个对象立即返回结果
y1: 数值型, 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
y2: 数值型, 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为`0`, 范围`0,0,0,0`表示全屏
指定坐标x: 数值型, 可选, 直接获取指定坐标上的元素特征串, 省略默认为`0`, 指定坐标`0,0`表示不使用本参数
是否最终元素: 布尔型, 可选, 是否只获取没有子节点的最终元素节点, 省略默认为`true`, 表示只获取没有子节点的最终元素元素
超时时间: 数值型, 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断
返回值: 表: 找到返回元素特征表, 没找到返回 `null`, 元素特征表格式为 `{"x":0,"y":0,"id":0,"xy":[0,0]"index":0,"text":"","resource-id":"","class":"","package":"","content-desc":"","checkable":true,"checked":true,"clickable":true,"enabled":true,"focusable":true,"focused":true,"scrollable":true,"long-clickable":true,"password":true,"selected":true,"bounds":[0,0,0,0],"left":0,"top":0,"right":0,"bottom":0,"pos":[0,0]}` , 其中 `"x"`, `"y"` 代表找到元素节点的中心位置坐标, 可用于tap点击, `"id"` 代表多个对象情况下找到的那个序号
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令与zm.ElementFind()类似, 仅多了一个找到后立即点击功能, 故详细例子请去查看zm.ElementFind()命令

//下面演示打开京东搜索电脑, 获取第一件商品价格的例子
RunApp "com.jingdong.app.mall"

If zm.ElementFindTap("^搜索框.*", "com.jingdong.app.mall", "android.widget.TextView", -2, 5000) Then 
    TracePrint "找到搜索框, 并已点击"
Else 
    TracePrint "没找到搜索框"
End If

Delay 1000
InputText "电脑"
Delay 1000
If zm.ElementFindTap("搜索", "android.widget.TextView", "com.jingdong.app.mall") Then 
    TracePrint "找到搜索按钮, 并已点击"
Else 
    TracePrint "没找到搜索按钮"
End If

Dim 价格对象 = {"%d+", "%d+元", "android.widget.TextView","com.jingdong.app.mall", -2, 10000}
Dim 价格元素 = zm.ElementFind(价格对象)
If 价格元素 Then 
    TracePrint "找到第一件商品的价格为:", 价格元素["text"]
Else 
    TracePrint "没找到商品"
End If
备注: 关于参数填写顺序说明
本插件所有参数都是可选的, 绝大多数参数对顺序没有要求, 但以下3个参数有顺序要求
( `查找范围`, `指定坐标`, `超时时间` )
这3个参数均为可选参数, 中间也可以填写其他参数, 但是前后关系不能打乱, 下面举几个例子
正确例子: ( `查找范围`, `超时时间`), (`指定坐标`, `元素特征`, `超时时间`), (`查找范围`, `元素特征`)
错误例子: (`超时时间`, `查找范围`), (`查找范围`, `超时时间`, `指定坐标`), (`指定坐标`, `元素特征`, `查找范围`)
如果无法理解的话, 建议按照语法说明的参数顺序填写
关于对象参数
对象参数必须从第1个位置开始填写, 并且填写后除了超时时间外的其他普通参数全都忽略
多个对象为 `OR` 关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回
当存在多个超时时间时, 仅最大的时间会生效, 限时内会不断查找每一个对象
关于元素特征串
支持抓抓上的`text`, `resource-id`, `class`, `package`, `content-desc`
填写数量自定义, 你可以只写1个, 也可以写3个, 甚至都不写或者全都写.
查找时忽略特征名, 只找特征值, 例如你填写了 `"微信"`, 那么有可能找到 `text` 是 `微信` 的元素, 或者 `content-desc` 是 `微信` 的元素.
查找时要求填写的特征全都要找到才算符合条件, 包括填写空字符串 `""`, 也会要求找到对应空字符串
两个特征值一样的也会查找, 例如你填写了 `"微信", "微信"`, 那么查找的时候就会去找元素特征里存在两个 `微信` 的元素
关于最终元素
最终元素是指没有子节点的元素, 也就是抓抓里看到前面没有 `+` 或 `-` 的元素
关于旋转横屏坐标处理
如果遇到打开某个应用后, 屏幕方向被旋转了, 导致获取元素中心坐标异常时, 请使用 zm.ElementRotation 设置元素旋转方向 解决
需按键精灵V3.5.8以上版本支持本命令
V4.2111: 初次加入
v4.2514: 提高查找效率
命令名称: zm.ElementRotation 设置元素旋转方向 >>点击查看最新帮助<<
功能说明: 设备旋转后元素的坐标系与触摸的坐标系也许会不一样, 本命令将对最后一步得到元素中心坐标做旋转处理, 其他坐标例如范围之类不做处理.

当存在传入x,y坐标参数时, 仅对本次传入坐标转换, 不会处理元素命令坐标转换.
语法格式: 结果 = zm.ElementRotation(方向[, x, y][, ...])
命令参数: 方向: 数值型, 设备的逆时针旋转方向, 默认为0, 表示未旋转, 支持 `-1, 0, 1, 2, 3, 90, 180, 270` 这几个数值, `-1`表示自动判断旋转方向, `0`表示未旋转, `1`或`90`表示逆时针旋转90°, `2`或`180`表示逆时针旋转180°, `3`或`270`表示逆时针旋转270°, 推荐填`-1`
yx: 数值型, 可选, 要转换的y坐标, 必须与x坐标一起填写, 支持任意数量坐标
返回值: 表`, 当有转换坐标参数时, 返回转换后的坐标数组
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//自动识别设备的旋转方向, 使接下来超级元素命令得到的元素中心坐标为可以Tap点击的坐标
zm.ElementRotation(-1)

//接下来的紫猫插件超级元素节点命令请自行编写
```

```mqscript showLineNumbers
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//自动识别设备的旋转方向, 返回传入坐标的转换结果, 对后面超级节点元素命令没有任何影响
Dim xy = zm.ElementRotation(-1, 100, 200, 300, 400)
TracePrint xy[1], xy[2], xy[3], xy[4]
备注: V4.2114:
初次加入
需在执行超级元素命令之前设置, 一般建议参数填-1, 让设备自动识别处理, 但请勿频繁自动识别
V4.2118: 加入转换指定坐标参数
命令名称: zm.CatchTouchPoint 获取点击坐标 >>点击查看最新帮助<<
功能说明: 获取屏幕上手指点击的坐标(命令为阻塞状态), 解决自带命令获取结果不准确的问题
语法格式: 结果 = zm.CatchTouchPoint([次数])
命令参数: 次数: 数值型, 可选, 省略默认为1, 表示需要获取用户点击的次数。
返回值: 数值表:返回点击的坐标表,格式为`[点击数][坐标]:详见示例。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 坐标表 = zm.CatchTouchPoint(2)
TracePrint "第1个点x坐标:", 坐标表[1][1]
TracePrint "第1个点y坐标:", 坐标表[1][2]
TracePrint "第2个点x坐标:", 坐标表[2][1]
TracePrint "第2个点y坐标:", 坐标表[2][2]
备注: 如果你发现 CatchTouchPoint 获取点击坐标 获取的坐标不准确, 请尝试使用本命令 `zm.CatchTouchPoint()`

V4.2039: 初次加入
命令名称: zm.Delay 超级延时 >>点击查看最新帮助<<
功能说明: 脚本暂停延时一段时间,支持防检测的随机延迟时长。
语法格式: 结果 = zm.Delay(时长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: 修复报错问题
v3.1929: 延时小于0的报错改为直接延时0毫秒
命令名称: zm.GetScreenScale 获取超级缩放状态 >>点击查看最新帮助<<
功能说明: 获取通过zm.SetScreenScale 超级缩放和zm.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之间, 更多属性见下面表格
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: 初次加入命令
V4.2025: 仅对`zm.Delay()`有效, 对其他命令均无效
命令名称: 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毫秒, 日志输出默认为显示, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如 `{"t":2000, "showlog":"显示"}` 表示修改点击后默认延时时间为3000毫秒, 日志输出默认为显示, 更多属性见下面表格
属性 | 默认值 | 数据类型 | 解释
---|-----|------|---
minx | 0 | 数值型 | 点击x坐标的浮动随机数
maxx | 0 | 数值型 | 点击x坐标的浮动随机数
miny | 0 | 数值型 | 点击y坐标的浮动随机数
maxy | 0 | 数值型 | 点击y坐标的浮动随机数
bt | 0 | 数值型 | 点击前默认延时时间, 单位毫秒
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
备注: V4.2402: 加入点击前延时属性
V1.1802: 加入命令
命令名称: zm.ShowMessage 超级浮窗 >>点击查看最新帮助<<
功能说明: 与自带的命令相比, 加入了依次显示信息和倒计时功能
语法格式: 结果 = zm.ShowMessage(信息[, 显示时长][, x, y][, 倒计间隔])
命令参数: 信息: table`或`string, 浮窗显示的内容, 如果是字符串, 当包含`"#时间"`时将启用倒计时功能; 如果是表, 则在显示时间内依次遍历显示
x: number, 可选, 设置显示框在屏幕上的左上角X坐标, 省略默认为屏幕中间
倒计间隔: 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坐标
横坐标x2: 数值型, 划动的终点x坐标
划动耗时: 数值型, 可选,划动花费的时间,单位毫秒,省略默认为`100`毫秒
按住时间: 数值型, 可选, 第一点按住不放一段时间后再移动, 格式为小于-50的负数, 例如-500表示按住500毫秒, 省略默认为`-50`
禁用轨迹: 布尔型, 可选,是否模拟真实带轨迹移动, 对翻页模式无效, 省略默认为`fals`e表示禁用, 启用后耗时参数将会失效
返回值:
脚本例子:
复制代码
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}` 或 `x,y|x,y|...`, 字符串时可使用任意分隔符, 详见例子
划动耗时: 数值型, 可选, 每个划动花费的时间, 单位毫秒, 省略默认为`100`毫秒
按住时间: 数值型, 可选, 第一点按住不放一段时间后再移动, 格式为`小于-50`的负数, 例如`-500`表示按住500毫秒, 省略默认为`-50`
禁用轨迹: 布尔型, 可选, 是否模拟真实带轨迹移动, 省略默认为`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

//以真实轨迹从20,630划动到20,730到220,530到320,830
zm.SwipeEx "10,600|10,700|200,500|300,800", "+10,+30", True

//以真实轨迹从10,600划动到10,700到200,500到300,800
zm.SwipeEx "10,600", "10,700", "200,500", "300,800", True
备注: V3.1835: 初次加入
V4.2118: 加入字符串坐标格式与偏移量参数
命令名称: zm.Tap 超级点击 >>点击查看最新帮助<<
功能说明: 比 Tap 短暂点击屏幕 更加强大的命令, 具体特色如下

- 担心被行为检测导致封号? 多种随机模式搭配防检测
- 每次点击后加延时命令麻烦? 直接把延时写到点击中
- 分割坐标字符串麻烦? 可以直接传入格式为"x,y"的坐标字符串参数
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
- 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
- 省略参数的默认值不理想? 可使用 zm.SetTap 设置超级点击 来自定义修改
语法格式: 结果 = zm.Tap([对象,][坐标字符串][,x, y][, rx, ry][, 延时毫秒][, 禁用随机][, 显示日志][, 输出行号][, 备注])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
x: 数值型, 可选, 要点击的x坐标, 填写对象参数后可省略
rx: 数值型, 可选, 从x到rx范围中随机获取一个数作为横坐标x
延时毫秒: 数值型, 可选, 点击后延时时间, 单位毫秒
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持`["显示","隐藏","show","hide"]`这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
返回值: 表: 返回实际点击的坐标与延时表, 格式为 `{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
```

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

//设置固定坐标x浮动范围[-10,15], 固定坐标y浮动范围[-5,20], 点击后默认延时2000毫秒
//此设置会都接下来所有zm.Tap()均有影响
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.Tap()均有影响
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: 点击坐标无效时, 延时不生效
V4.2402: 日志仅在 `"Show"` 或 `"显示"` 下会输出点击日志, 其他均不输出
命令名称: 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: 数值型` 或 `字符串, 蓝色分量,数值型时表示十进制,字符串时表示十六进制。
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}`
返回值: 数值型: 返回两个颜色的相似度小数, 失败返回`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:返回分解后的结果,可以通过键名`"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:返回分解后的结果,可以通过键名`"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.GetPixelHSV 得到指定点HSV颜色 >>点击查看最新帮助<<
功能说明: 得到指定点HSV颜色
语法格式: 结果 = zm.(横坐标x, 纵坐标y[, hsv数组])
命令参数: 横坐标x: 整数型, 待取色的x点坐标
hsv数组: 表, 可选, 返回table格式的hsv三分量结果, 格式为 `{h, s, v, "h":h, "s":s, "v":v}`
返回值: 字符串: 返回指定点的HSV颜色, 格式为"H.S.V"
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim hsv, t()
hsv = zm.GetPixelHSV(100, 200, t)
TracePrint "字符串结果hsv=", hsv
TracePrint "三分量表结果, h=", t["h"], "s=", t["s"], "v=", t["v"]
备注: 方便快捷获取屏幕上hsv格式的颜色, 适用于一些渐变色判断处理.
V4.2025: 初次加入
命令名称: zm.HSVToRGB HSV转RGB >>点击查看最新帮助<<
功能说明: 将HSV颜色转换成RGB颜色。
语法格式: 结果 = zm.HSVToRGB(HSV[, 是否BGR])
命令参数: HSV: 字符串, HSV颜色,格式为`"H.S.V"`。
返回值: 字符串:返回十六进制的颜色,格式由参数2决定。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.HSVToRGB("100.10.20")
备注: V1.1720: 加入命令
命令名称: zm.IsDisplayDead 是否卡屏 >>点击查看最新帮助<<
功能说明: 获取指定范围时间内是否出现卡屏, 画面不变化的情况, 如果画面有变化则立即返回
语法格式: 结果 = zm.IsDisplayDead(x1, y1, x2, y2, 时长[, 相似度][, 判断间隔][, 判断模式])
命令参数: x1: 数值型, 卡屏判断范围左上角x坐标
x2: 数值型, 卡屏判断范围右下角x坐标
时长: 数值型, 限时判断时长, 单位毫秒
判断间隔: 数值型, 可选, 每次对比判断的间隔毫秒, 必须大于1, 省略默认为`10`
返回值: 布尔型: 画面有变化则立即返回`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: 数值型` 或 `字符串, 红色分量,数值型时表示十进制,字符串时表示十六进制。
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颜色,字符串时是十六进制,数值时是十进制。
返回值: 字符串:返回“H.S.V”格式的颜色。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RGBToHSV("102030")
备注: V1.1720: 加入命令
命令名称: zm.SnapShot 无限截图 >>点击查看最新帮助<<
功能说明: 通过每次截图自动生成不同文件名实现不覆盖文件的无限截图功能, 支持自定义图片名规则.
语法格式: 结果 = zm.SnapShot(截图目录[, 文件名规则][, x1, y1, x2, y2][, 压缩比率])
命令参数: 截图目录: 字符串, 要存放文件的目录路径, 例如 `"/sdcard/Pictures/"`
x1: 数值型, 可选, 截取范围的左上角x坐标, 省略默认为`0`, 范围`0,0,0,0`表示全屏截图
x2: 数值型, 可选, 截取范围的右下角x坐标, 省略默认为`0`, 范围`0,0,0,0`表示全屏截图
压缩比率: 数值型, 可选, `0`到`100`, 数值越大, 文件越小, 省略默认为`0`, 通过降低画质实现减少文件体积, 本参数仅支持按键IOS或按键安卓3.3.8以上版本
返回值: 字符串`, 返回保存图片文件的完整路径
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 图片文件夹 = "/sdcard/Pictures/"
Dim 图片路径, 图片名规则

//使用默认规则$d$t-$n.png截图, 产生图片文件名类似于 210311014843-1.png
//如果你无法理解文件名规则参数, 建议省略该参数
For 3
    图片路径 = zm.SnapShot(图片文件夹)
    TracePrint "默认规则", 图片路径
Next

//$n: 会根据文件夹与文件名自动把$n替换成序号, 需注意, 每次启动脚本都是从1开始计数的
图片名规则 = "QQ345911220-$n.png"
For 2
    图片路径 = zm.SnapShot(图片文件夹, 图片名规则)
    TracePrint "$n规则", 图片路径
Next

//$n: 根据文件夹与文件名自动生成序号, 需注意, 每次启动脚本都是从1开始计数的
//$d: 根据当前日期自动提取年月日, 需注意, 年份为缩写两位数, 例如210311表示2021年03月11日
//$t: 根据当前时间自动提取时分秒, 例如205515表示20点55分15秒
//建议根据自己实际情况设置规则, 如果你是1秒内要截图好几次的, 强烈建议带上$n规则
图片名规则 = "紫猫学园-$d-$t-$n.jpg"
For 3
    图片路径 = zm.SnapShot(图片文件夹, 图片名规则, 50) //压缩比50
    TracePrint "复合规则", 图片路径
Next
备注: 序号会根据图片的完整路径自动安排编号, 例如例子中两个图片名规则不同, 序号各自从1开始.
V4.2111: 初次加入
命令名称: zm.Calculator 计算器 >>点击查看最新帮助<<
功能说明: 得到数学算式的计算结果.
语法格式: 结果 = zm.Calculator(算式)
命令参数: 算式: 字符串, 等待计算的数学算式, 支持加减乘除括号等运算
返回值: 数值型: 计算结果, 算式参数的计算结果, 出错返回null
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim a = zm.Calculator("1+2") //得到结果3

Dim b = zm.Calculator("1 + 2 * (3 - 4) / 2^3 + 8^(1/3)") //得到结果2.75
备注: 可配合百度云识别等功能识别算式内容后, 传入计算得到结果.
V4.2022: 初次加入命令
命令名称: zm.CheckForUpdates 检查插件更新 >>点击查看最新帮助<<
功能说明: 检查紫猫插件是否有新版,并输出显示.

每次启动仅首次调用有效.
语法格式: 结果 = zm.CheckForUpdates()
命令参数:
返回值:

布尔型:未发现新版返回false,发现新版或检查失败返回true。
脚本例子:
复制代码
$lizi
备注:
命令名称: zm.CollectGarbage 清理脚本内存 >>点击查看最新帮助<<
功能说明: Lua的垃圾回收机制接口, 原型是`collectgarbage()`函数, 可通过第一个参数实现不同的操作, 默认为释放脚本内存功能
语法格式: 结果 = zm.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.PCall 保护执行函数 >>点击查看最新帮助<<
功能说明: 以保护模式调用执行函数, 避免由于异常错误导致整个脚本停止结束.

支持一个错误处理函数与一个必定执行函数, 支持传入任意数量参数.

可以实现调用按键函数免写可选参数功能. 并且翻译按键错误信息中`'idxxxx'`的准确内容
语法格式: 结果 = zm.PCall(执行函数名[, 任意数量参数][, 错误处理函数名[, 任意数量参数][, 必定执行函数名[, 任意数量参数] ] ])
命令参数: 执行函数名: 函数型, 需要保护执行的函数名, 注意这里填写的是函数名, 不要在后面加括号变成调用函数!
错误处理函数名: 函数型, 可选, 如果前面执行函数内部出现异常错误时, 将会执行本处理函数, 如果没有前面执行函数没有出错, 那么就不会执行本处理函数
必定执行函数名: 函数型, 可选, 不管前面函数执行是否出错, 本函数都将必定会执行一次. 填写本参数前面必须要有错误处理函数.
返回值: 任意类型: 根据调用的函数自身返回值决定结果.
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次
Dim 结果

TracePrint "正确的内容可以正常执行并返回正确结果"
结果 = zm.PCall(乘法, 2, 4)
TracePrint "正确结果 = ", 结果

TracePrint "对乘法函数传入汉字参数会提示异常错误信息, 但是不会停止整个脚本运行"
结果 = zm.PCall(乘法, "紫", "猫")
TracePrint "错误结果 = ", 结果

TracePrint "可加入错误处理函数, 当出错后执行错误处理"
结果 = zm.PCall(乘法, "紫", "猫", 乘法异常处理, "学", "院")
TracePrint "处理结果 = ", 结果

TracePrint "未出现错误, 则不执行错误处理函数"
结果 = zm.PCall(乘法, 2, 4, 乘法异常处理, "学", "院")
TracePrint "处理结果 = ", 结果

TracePrint "可加入必定执行函数, 不管是否出错, 函数必定会被执行"
结果 = zm.PCall(乘法, "紫", "猫", 乘法异常处理, "学", "院", 乘法最终处理)
TracePrint "处理结果 = ", 结果

TracePrint "乘法函数中参数b是可选的, 有默认值, 所以可以不写"
结果 = zm.PCall(乘法, 2)
TracePrint "免写结果 = ", 结果

Function 乘法(a, b)
    b = b or 10
    乘法 = a * b
End Function

Function 乘法异常处理(c, d)
    乘法异常处理 = c & d
End Function

Function 乘法最终处理(x)
    TracePrint "我是最终处理函数, 必定会被执行一次", x
End Function
备注: 非常强大的异常处理函数, 参考其他语言的`try...catch...finally`设计.
可以用本函数保护执行可能出错的函数, 并且调用相应的错误处理解决函数.
可以用本函数实现免写可选参数功能.
V4.2025: 初次加入
命令名称: zm.SetPCall 设置PCall >>点击查看最新帮助<<
功能说明: 设置zm.PCall 保护执行函数抛出异常时保存的日志路径
语法格式: 结果 = zm.SetPCall(日志路径)
命令参数: 日志路径: 字符串型, 保存的日志路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次
Dim 结果

zm.SetPCall "/sdcard/xjlerror.log"

TracePrint "异常错误信息会被记录到/sdcard/xjlerror.log文件中"
结果 = zm.PCall(乘法, "紫", "猫")
TracePrint "错误结果 = ", 结果

Function 乘法(a, b)
    b = b or 10
    乘法 = a * b
End Function
备注: V4.2402: 初次加入
命令名称: zm.TranslateError 翻译错误 >>点击查看最新帮助<<
功能说明: 可以将运行时错误内容中的id部分翻译成对应变量名或函数名, 例如 `attempt to index global 'ide7b4abe78cabe5ada6e999a2' (a null value)`, 将翻译并输出 `attempt to index global '紫猫学园' (a number value)`
语法格式: 结果 = zm.TranslateError(错误文本)
命令参数: 错误文本: 字符串, 含'idxxxxxx'的错误文本内容, 详见例子
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim 紫猫学园, a=1, b=2

zm.TranslateError "当前脚本第9行:发生运行时错误!错误代码:2,错误行号:6,错误信息: attempt to index global 'ide7b4abe78cabe5ada6e999a2' (a null value)"
//下面这行代码执行会报错, 可以把错误内容复制粘贴到上面的zm.TranslateErrorID命令中, 记得加双引号
//命令会把错误内容中的'idxxxxxxx'这部分内容翻译成正确错误信息, 本次错误是变量 紫猫学园 不是数组, 无法带下标赋值
紫猫学园(0) = a + b
备注: V4.2111: 初次加入, 仅支持'idxxxxxxx'这部分错误翻译
命令名称: 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()`函数能正常输出显示信息
V4.2111: 优化返回字符串长度, 最长65536, 以保证`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, 启动线程后的返回值。
返回值:
脚本例子:
复制代码
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", "name"}`, 表示创建id和name两个字段, 未指定类型的字段默认`TEXT`, 唯独当字段名为id时, 会被自动设置为整数型主键, 即`INTEGER PRIMARY KEY`

标准数组格式:`{ {字段名, 类型或约束, ...},...}`
例如`{ {"age", "INTEGER"}, {"name", "TEXT", "NOT NULL"} }`, 表示创建INTEGER型的age字段和TEXT型的name字段, 且name字段为NOT NULL.

对象格式: `{ {“name”:对象名, "type":数据类型, "constraints":约束, "primary":是否主键, "unique":是否唯一, "notnull":是否非空, "default":默认值}, ...}`
例如`{{"name":"id", "type":"INTEGER", "primary":true, "unique":true}, {"name":"姓名", "type":"TEXT","notnull":true}}`, 表示创建唯一主键id字段, 数据类型整数型, 创建数据类型是TEXT的姓名字段, 要求不能为空值

混合格式: `{字段名, {字段名, 类型或约束, ...}, {“name”:对象名, ...}, ...}`
例如`{"id", {"name", "TEXT", "NOT NULL"}, {"name":"age", "type":"INTEGER"}}`, 表示创建默认INTEGER主键id, TEXT非空字段name, INTEGER字段age
返回值: 布尔值:成功返回`true:失败返回`false`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim DBpath = "/sdcard/Pictures/zimao.db"

//极简模式, 执行SQL:CREATE TABLE IF NOT EXISTS test1 ([id] INTEGER PRIMARY KEY NOT NULL, [name] TEXT, [age] TEXT);
TracePrint zm.SQLiteCreateTbl(DBpath, "test1", {"id","name","age"})

//标准数组格式, 执行SQL:DROP TABLE IF EXISTS test2; CREATE TABLE IF NOT EXISTS test2 ([id] INTEGER PRIMARY KEY NOT NULL, [age] INTEGER DEFAULT 18);
Dim fields1 = {{"id", "INTEGER", "PRIMARY KEY"}, {"age","INTEGER", "DEFAULT 18"}}
TracePrint zm.SQLiteCreateTbl(DBpath, "test2", fields1, {"overwrite":true})

//对象格式: 执行SQL:CREATE TABLE IF NOT EXISTS test3 ([od_id] TEXT PRIMARY KEY NOT NULL UNIQUE, [纬度] REAL NOT NULL);
Dim fields2 = {{"name":"od_id", "type":"TEXT", "primary":true, "unique":true}, {"name":"纬度", "type":"REAL","notnull":true}}
TracePrint zm.SQLiteCreateTbl(DBpath, "test3", fields2)

//对象格式: 执行SQL:CREATE TABLE IF NOT EXISTS test4 ([id] INTEGER PRIMARY KEY NOT NULL, [age] INTEGER DEFAULT 18, [纬度] REAL NOT NULL);
Dim Fields3 = {"id", {"age","INTEGER", "DEFAULT 18"}, {"name":"纬度", "type":"REAL","notnull":true}}
TracePrint zm.SQLiteCreateTbl(DBpath, "test4", Fields3)
备注: V1.1738: 加入命令
V4.2514: 移除`{"字段名 数据类型", ...}`格式, 加入更多字段的语法, 支持覆盖创建
命令名称: zm.SQLiteDelete 删除SQLite3数据 >>点击查看最新帮助<<
功能说明: 删除SQLite3数据, 支持自定义删除数量
语法格式: 结果 = zm.SQLiteDelete(数据库路径, 数据表名, 条件[, 数量])
命令参数: 数据库路径: 字符串, 数据库文件所在路径
条件: 字符串` 或 `表, 要删除的数据条件, 支持字符串和表, 字符串可以写`"id=1"`或者`"WHERE id=1"`, 多字段并且条件`{"id":1, ...}`, 多条件或关系`{{"id":1, "name":"a"}, ...}`, 多条件IN关系`{"id":{1,10}, "age":{10,20}}`
返回值: 数值型:返回数据库变化行数, 出错失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



Dim DBpath = "/sdcard/Pictures/zimao.db"

dim tbl = "student"

Dim ret



//执行SQL: DELETE FROM student WHERE id=2;

TracePrint zm.SQLiteDelete(DBpath, tbl, "id=2") //id=2等同于WHERE id=2



//执行SQL: DELETE FROM student WHERE rowid IN (SELECT rowid FROM student WHERE id>2 LIMIT 1);

TracePrint zm.SQLiteDelete(DBpath, tbl, "id>2", 1)



//执行SQL: DELETE FROM student WHERE id>2 AND name='c';

TracePrint zm.SQLiteDelete(DBpath, tbl, "WHERE id>2 AND name='c'")



//执行SQL: DELETE FROM student WHERE id=3;

TracePrint zm.SQLiteDelete(DBpath, tbl, {"id":3})



//执行SQL: DELETE FROM student WHERE id=4 AND age=40;

TracePrint zm.SQLiteDelete(DBpath, tbl, {"id":4, "age":40})



//执行SQL: DELETE FROM student WHERE id=4 AND age=40;

TracePrint zm.SQLiteDelete(DBpath, tbl, {"id":4, "age":40})



//执行SQL: DELETE FROM student WHERE (id=5 AND age=50) OR (id=6 AND age=60);

TracePrint zm.SQLiteDelete(DBpath, tbl, {{"id":5, "age":50}, {"id":6, "age":60}})



//执行SQL: DELETE FROM student WHERE id IN (1,2) AND age IN (11,22);

TracePrint zm.SQLiteDelete(DBpath, tbl, {"id":{1,2}, "age":{22,11}})
备注: V4.2514: 加入命令
命令名称: zm.SQLiteDropTbl 删除SQLite3数据表 >>点击查看最新帮助<<
功能说明: 删除SQLite3数据库的数据表, 支持批量删除
语法格式: 结果 = zm.SQLiteDropTbl(数据库路径, 表名[, 扩展])
命令参数: 数据库路径: 字符串, 数据库文件所在路径
扩展: 表, 可选, 扩展功能, 默认格式为`{"ifExists":true, "batchSize":50}`, batchSize为每批删除数量
返回值: 表:返回删除结果, 格式为`{"success":是否成功, "droppedTables":{已删除表名}, "remainingTables":{未删除表名}, "error":"错误信息"}`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret = zm.SQLiteDropTbl(GetSdcardDir() & "/zimao.db", "student")
If ret["success"] Then
    TracePrint "删除成功"
Else
    TracePrint "删除失败"
End If

Dim rets = zm.SQLiteDropTbl(GetSdcardDir() & "/zimao.db", {"test1", "test2", "test3"})
If rets["success"] Then
    TracePrint "全部删除成功"
Else
    TracePrint "有部分表未删除", zm.VarInfo(rets["remainingTables"])
End If
备注: V1.1738: 加入命令
V4.2514: 修改返回结果, 加入多表批量删除功能
命令名称: zm.SQLiteExecute 执行SQL语句 >>点击查看最新帮助<<
功能说明: 执行SQL语句, 支持返回查询结果与变化行数
语法格式: 结果 = zm.SQLiteExecute(数据库路径, SQL语句)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
返回值: 表:返回执行结果, 格式为`{"success":是否成功, "data":{查询结果}, "affectedRows":影响行数}`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



Dim DBpath = "/sdcard/Pictures/zimao.db"

dim tbl = "student"

Dim ret



//执行SQL: SELECT * FROM student;

ret = zm.SQLiteExecute(DBpath, "SELECT * FROM student")

If ret["success"] then

    For Each k, v In ret[data]

        TracePrint "第" & i & "个数据: ", v["name"]

    Next

end



//执行SQL: SELECT * FROM student;

ret = zm.SQLiteExecute(DBpath, "DELETE FROM student WHERE id=2")

If ret["success"] then

    TracePrint "影响行数", ret["affectedRows"]

end
备注: V4.2514: 加入命令
命令名称: zm.SQLiteInsert 插入SQLite3数据 >>点击查看最新帮助<<
功能说明: 插入SQLite3数据, 支持批量插入
语法格式: 结果 = zm.SQLiteInsert(数据库路径, 数据表名, 数据[, 值])
命令参数: 数据库路径: 字符串, 数据库文件所在路径
数据: 表, 要插入的字段名, 支持追加值, 字段名格式`{"字段名", ...}`, 字段名值格式`{"字段名":"字段值", ...}`, 多条数据格式`{ {"字段名":"字段值", ...}, ...}`, 也可以写成`{"字段名":{"字段值1","字段值2", ...}, ...}`
返回值: 数值型:返回数据库变化行数, 出错失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



Dim DBpath = "/sdcard/Pictures/zimao.db"

dim tbl = "student"

Dim ret



//执行SQL:INSERT INTO [student] (id,name,age) VALUES (1,'a',10);

ret = zm.SQLiteInsert(DBpath, tbl, {"id":1, "name":"a","age":10})

TracePrint ret



//执行SQL:INSERT INTO [student] (id,name,age) VALUES (4,'d',40);

ret = zm.SQLiteInsert(DBpath, tbl, {"id", "name","age"}, {4,"d",40})

TracePrint ret



//执行SQL:INSERT INTO [student] (id,name,age) VALUES (2,'b',20),(3,'c',30);

ret = zm.SQLiteInsert(DBpath, tbl, {"id":{2,3}, "name":{"b","c"}, "age":{20,30} })

TracePrint ret



//执行SQL:INSERT INTO [student] (id,name,age) VALUES (5,'e',50),(6,'f',60);

ret = zm.SQLiteInsert(DBpath, tbl, {{"id":5, "name":"e","age":50}, {"id":6, "name":"f","age":60}})

TracePrint ret



//执行SQL:INSERT INTO [student] (id,name,age) VALUES (7,'g',70),(8,'h',80);

ret = zm.SQLiteInsert(DBpath, tbl, {"id", "name","age"}, {{7,"g",70}, {8,"h",80}})

TracePrint ret
备注: V4.2514: 加入命令
命令名称: zm.SQLiteSelect 查询SQLite3数据 >>点击查看最新帮助<<
功能说明: 查询SQLite3数据, 支持多种参数格式
语法格式: 结果 = zm.SQLiteSelect(数据库路径, 数据表名, 字段[, 条件][, 数量[, 序号]])
命令参数: 数据库路径: 字符串, 数据库文件所在路径
字段: 字符串` 或 `表, 可以写单个字段, 例如`"*"`或`"id"`, 也可以写多个字段`{字段名, ...}`, 例如`{"id", "name"}`
数量: 数值型, 可选, 返回多少条数据, 省略为-1表示全部数据
返回值: 表:成功返回键值对表, 格式为`{{"字段名":字段值}, ...}`, 没有数据或失败返回`nil`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



Dim DBpath = "/sdcard/Pictures/zimao.db"

dim tbl = "student"

Dim ret



//执行SQL: SELECT * FROM student;

ret = zm.SQLiteSelect(DBpath, tbl, "*")

If ret Then

    For i = 1 to Ubound(ret)+1

        TracePrint ret[i]["id"], ret[i]["name"]

    Next

End If



//执行SQL: SELECT * FROM student ORDER BY rowid LIMIT 1;

ret = zm.SQLiteSelect(DBpath, tbl, "*", 1)

If ret Then

    TracePrint ret[1]["id"], ret[1]["name"]

End If



//执行SQL: SELECT * FROM student ORDER BY rowid LIMIT 1 OFFSET 2;

ret = zm.SQLiteSelect(DBpath, tbl, "*", 1, 2)

If ret Then

    TracePrint ret[1]["id"], ret[1]["name"]

End If



//执行SQL: SELECT name FROM student;

ret = zm.SQLiteSelect(DBpath, tbl, "name")

If ret Then

    For Each v In ret

        TracePrint v["name"]

    Next

End If



//执行SQL: SELECT id,name FROM student;

ret = zm.SQLiteSelect(DBpath, tbl, {"id", "name"})

If ret Then

    For Each k, v In ret

        TracePrint "第" & i & "个数据: ", v["id"], v["name"]

    Next

End If



//执行SQL: SELECT name FROM student WHERE id=1;

ret = zm.SQLiteSelect(DBpath, tbl, "name", "id=1") //id=1等同于"WHERE id=1"

If ret Then

    TracePrint ret[1]["name"]

End If



//执行SQL: SELECT name FROM student WHERE id=1 AND age=10;

ret = zm.SQLiteSelect(DBpath, tbl, "name", {"id":1, "age":10})

If ret Then

    TracePrint ret[1]["name"]

End If



//执行SQL: SELECT name FROM student WHERE (id=2 AND age=20) OR (id=3 AND age=30);

ret = zm.SQLiteSelect(DBpath, tbl, "name", {{"id":2, "age":20}, {"id":3, "age":30}})

If ret Then

    For Each k, v In ret

        TracePrint "第" & i & "个数据: ", v["name"]

    Next

End If



//执行SQL: SELECT name FROM student WHERE id IN (3,4) AND age IN (30,40);

ret = zm.SQLiteSelect(DBpath, tbl, "name", {"id":{3,4}, "age":{30,40}})

If ret Then

    For Each k, v In ret

        TracePrint "第" & i & "个数据: ", v["name"]

    Next

End If
备注: V4.2514: 加入命令
命令名称: zm.SQLiteUpdate 更新SQLite3数据 >>点击查看最新帮助<<
功能说明: 更新SQLite3数据, 支持多种参数格式
语法格式: 结果 = zm.SQLiteUpdate(数据库路径, 数据表名, 数据, 条件)
命令参数: 数据库路径: 字符串, 数据库文件所在路径
数据: 字符串` 或 `表, 新的数据, 单个字段可以用`"字段名=值"`, 例如`"name='b'"`, 多个字段可以用`{"字段名":字段值, ...}`, 例如`{"name":"张三", "age":18}`
返回值: 数值型:返回数据库变化行数, 出错失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



Dim DBpath = "/sdcard/Pictures/zimao.db"

dim tbl = "student"

Dim ret



//执行SQL: UPDATE student SET name='a' WHERE id=2;

TracePrint zm.SQLiteUpdate(DBpath, tbl, "name='a'", "id=2") //id=2等同于WHERE id=2



//执行SQL: UPDATE student SET name='a' WHERE id=2 AND age=20;

TracePrint zm.SQLiteUpdate(DBpath, tbl, "name='a'", {"id":2, "age":20})



//执行SQL: UPDATE student SET name='a' WHERE (id=2 AND age=20) OR (id=3 AND age=30);

TracePrint zm.SQLiteUpdate(DBpath, tbl, "name='a'", {{"id":2, "age":20}, {"id":3, "age":30}})



//执行SQL: UPDATE student SET name='a' WHERE id IN (3,4) AND age IN (30,40);

TracePrint zm.SQLiteUpdate(DBpath, tbl, "name='a'", {"id":{3,4}, "age":{30,40}})



//执行SQL: UPDATE student SET name='a', age=22 WHERE id>2;

TracePrint zm.SQLiteUpdate(DBpath, tbl, {"name='a'", age=22}, "id>2")


备注: V4.2514: 加入命令
命令名称: zm.SQLiteVersion 获取SQLite版本 >>点击查看最新帮助<<
功能说明: 获取SQLite版本
语法格式: 结果 = zm.SQLiteVersion()
命令参数:
返回值: 字符串:返回版本号, 例如"3.15.1"
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



TracePrint zm.SQLiteVersion() //返回3.15.1
备注: V4.2514: 加入命令
命令名称: zm.ArrayInsert 插入数组元素 >>点击查看最新帮助<<
功能说明: 在一维数组的指定位置插入元素。
语法格式: 数组 = zm.ArrayInsert(一维数组, 待插入值[, 下标位置[, 是否传值调用]])
命令参数: 一维数组: 数组型, 原一维数组。
下标位置: 数值型, 可选参数,表示插入的下标位置,省略默认为追加到数组末尾。
返回值: 数组型:返回插入元素后的一维数组,也可使用参数做返回值。
脚本例子:
复制代码
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`。
返回值: 数组型:返回删除重复成员后的数组,也可使用参数做返回值。
脚本例子:
复制代码
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`。
返回值: 数组型:返回替换后的数组。
脚本例子:
复制代码
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`。
返回个数: 数值型, 可选参数,`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`。
返回值: 数组型:返回排序后的数组,也可使用参数做返回值。
脚本例子:
复制代码
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},...}`, 兼容超级图色里的返回找到所有坐标格式
y1: 数值型, 表示左上角y坐标或圆心y坐标
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},...}`, 兼容超级图色里的返回找到所有坐标格式
y1: 数值型, 表示左上角y坐标或圆心y坐标
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},...}`, 传址调用, 兼容超级图色里的返回找到所有坐标格式
y: 数值型, 可选, 表示用于比较远近的y坐标, 省略默认为`0`
返回值: 坐标数组, 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.TableIsEmpty Table是否为空 >>点击查看最新帮助<<
功能说明: 判断一个table表数据是否为空表{}
语法格式: 结果 = zm.TableIsEmpty(任意表)
命令参数: 任意表: 表, 要判断是否为空, 不存在任何成员的表
返回值: 布尔值: 为空表返回 `true` , 不为空返回 `false`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t1, t2

t1 = Array() //空表, 也是空数组
t2 = {"紫猫学园":"zimao.vip"} //非空表

TracePrint zm.TableIsEmpty(t1)    //true
TracePrint zm.TableIsEmpty(t2)    //false
TracePrint UBound(t1)    //-1
TracePrint UBound(t2)    //-1
TracePrint t1=Array()    //false
TracePrint t2=Array()    //false
备注: 因为table的键值对数据无法用Ubound获取长度, 也不能直接与空表{}比较, 而用for each循环判断一遍也太麻烦, 所以才写了本函数
V4.2111: 初次加入
命令名称: zm.TableIsSame 表成员是否相同 >>点击查看最新帮助<<
功能说明: 判断两个表的成员与顺序是否相同, 不考虑地址
语法格式: 结果 = zm.TableIsSame(表1, 表2)
命令参数: 表1: 表, 第一个表
返回值: 布尔型`, 返回比较结果, 相同返回`true`, 不同返回`false`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t1, t2
t1 = {1, 2, "QQ":345911220}
t2 = {1, 2, "QQ":345911220}

If t1 = t2 Then 
    TracePrint "直接比较结果为相同"
Else 
    TracePrint "直接比较结果为不同"
End If

If zm.TableIsSame(t1, t2) Then 
    TracePrint "插件比较结果为相同"
Else 
    TracePrint "插件比较结果为不同"
End If
备注: V4.2113:
初次加入
对比表的成员值, 只要内部成员与顺序相同, 那么结果就是相同的, 特别注意顺序也要相同才可以
命令名称: zm.TableUnpack 数组解包 >>点击查看最新帮助<<
功能说明: 返回传入参数数组的所有元素, 原型是Lua中的`table.unpack()`, 目前手机版变量赋值只能接收一个元素, 但可选参数的函数命令可以接收多个元素, 详见示例
语法格式: 结果 = zm.TableUnpack([数组, ...][, 起始[, 终止]])
命令参数: 数组: table, 待处理的数组, 支持传入多个数组
终止: 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.DirCopy 复制文件或目录 >>点击查看最新帮助<<
功能说明: 复制文件或目录, 支持多文件复制, 特别注意本命令与 Dir.Copy 复制文件或文件夹 的参数是有区别的!
语法格式: zm.DirCopy(源路径, 目标路径[, 模式])
命令参数: 源路径: 字符串` 或 `表, 等待复制的源文件或文件夹路径, 支持通配符`*`和`?`, 如果是table类型, 则表示多个文件
模式: 字符串, 可选, `"-a"`表示普通复制, `"-af"`表示覆盖复制, 更多模式请自行搜索cp命令行, 省略默认为`"-af"`
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//当目标路径不存在时, 表示复制为目标路径
zm.DirCopy "/sdcard/紫猫学园.txt", "/sdcard/zimaoxy.com.txt"

//当目标路径是已存在的目录时, 表示复制文件到该目录下
//下面代码执行后复制文件所在路径为 /sdcard/紫猫学园/zimaoxy.com.txt
zm.DirCopy "/sdcard/zimaoxy.com.txt", "/sdcard/紫猫学园/"

//源文件可以用通配符*和?, 这种情况目标路径必须是已存在的目录
zm.DirCopy "/sdcard/*.txt", "/sdcard/紫猫学园/"

//源文件可以table数据表示多个文件, 这种情况目标路径必须是已存在的目录
zm.DirCopy {"/sdcard/zimaoxy.com.txt", "/sdcard/紫猫学园.txt"}, "/sdcard/紫猫学园/"
备注: 基于Linux的`cp`命令行开发
V4.2015
初次加入命令
命令名称: zm.DirCreate 创建目录 >>点击查看最新帮助<<
功能说明: 创建指定路径的目录, 父目录不存在时, 可强制创建
语法格式: zm.DirCreate(目录路径[, 强制创建])
命令参数: 目标路径: 字符串, 要创建的目录路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

zm.DirCreate "/sdcard/1/2/紫猫学园/教程目录/"
备注: 基于Linux的`mkdir`命令行开发
V4.2015
初次加入命令
命令名称: zm.DirDelete 删除文件或目录 >>点击查看最新帮助<<
功能说明: 删除文件或目录, 支持删除多文件, 特别注意本命令与 Dir.Delete 删除文件 的参数是有区别的!
语法格式: zm.DirDelete(路径[, 模式])
命令参数: 路径: 字符串` 或 `表, 要删除的源文件或文件夹路径, 支持通配符`*`和`?`, 如果是table类型, 则表示多个文件
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除单个文件
zm.DirDelete "/sdcard/紫猫学园.txt"

//删除单个目录
zm.DirDelete "/sdcard/教程目录/"

//可以用通配符*和?
zm.DirDelete "/sdcard/*.txt"

//table数据表示多个文件
zm.DirDelete {"/sdcard/zimaoxy.com.txt", "/sdcard/紫猫学园.txt"}
备注: 基于Linux的`rm`命令行开发
V4.2015
初次加入命令
命令名称: zm.DirMove 移动文件或目录 >>点击查看最新帮助<<
功能说明: 移动文件或目录, 支持多文件移动, 特别注意本命令与 Dir.Move 移动文件 的参数是有区别的!
语法格式: zm.DirMove(源路径, 目标路径[, 模式])
命令参数: 源路径: 字符串` 或 `表, 等待移动的源文件或文件夹路径, 支持通配符`*`和`?`, 如果是table类型, 则表示多个文件
模式: 字符串, 可选, `""`表示普通移动不覆盖, `"-f"`表示覆盖移动, 更多模式请自行搜索mv命令行, 省略默认为`"-f"`
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//当目标路径不存在时, 表示移动为目标路径, 同级目录相当于是重命名
zm.DirMove "/sdcard/紫猫学园.txt", "/sdcard/zimaoxy.com.txt"

//当目标路径是已存在的目录时, 表示移动文件到该目录下
//下面代码执行后移动文件所在路径为 /sdcard/紫猫学园/zimaoxy.com.txt
zm.DirMove "/sdcard/zimaoxy.com.txt", "/sdcard/紫猫学园/"

//源文件可以用通配符*和?, 这种情况目标路径必须是已存在的目录
zm.DirMove "/sdcard/*.txt", "/sdcard/紫猫学园/"

//源文件可以table数据表示多个文件, 这种情况目标路径必须是已存在的目录
zm.DirMove {"/sdcard/zimaoxy.com.txt", "/sdcard/紫猫学园.txt"}, "/sdcard/紫猫学园/"
备注: 基于Linux的`mv`命令行开发
V4.2015
初次加入命令
命令名称: zm.DirScan 遍历文件或目录 >>点击查看最新帮助<<
功能说明: 在指定目录路径及子目录中遍历文件或目录, 支持通配符`*`和`?`, 支持安卓7.1版
语法格式: 结果 = zm.DirScan(目录路径[, 文件名或目录名[, 遍历类型[, 遍历深度[, 是否区分大小写]]]])
命令参数: 目录路径: 字符串, 在该目录下遍历文件或目录
遍历类型: 整数型, 可选, `1`代表只遍历文件, `2`代表只遍历目录, `3`代表文件与目录都要遍历, 省略默认为`3`
是否区分大小写: 布尔型, 可选, 省略默认为`false`, 表示不区分大小写
返回值: 表: 成功返回文件目录列表数组, 未找到或失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t
//获取/sdcard/目录下所有文件与目录, 包括子目录
t = zm.DirScan("/sdcard/", "*")
If t Then 
    For Each v In t
    	TracePrint v
    Next	
End If

//获取/sdcard/目录下所有文件, 包括子目录
t = zm.DirScan("/sdcard/", "*", 1)
If t Then 
    For Each v In t
    	TracePrint v
    Next	
End If

//获取/sdcard/目录下所有目录, 包括子目录
t = zm.DirScan("/sdcard/", "*", 2)
If t Then 
    For Each v In t
    	TracePrint v
    Next	
End If

//获取/sdcard/目录下所有文件和目录, 仅遍历1层
t = zm.DirScan("/sdcard/", "*", 3, 1)
If t Then 
    For Each v In t
    	TracePrint v
    Next	
End If

//遍历/sdcard/目录下以.txt结尾的文件, 仅遍历2层
t = zm.DirScan("/sdcard/", "*.txt", 1, 2)
If t Then 
    For Each v In t
    	TracePrint v
    Next	
End If
备注: V4.2015
初次加入命令
命令名称: 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.FileCreate 创建文件 >>点击查看最新帮助<<
功能说明: 在指定路径下创建一个空白文件, 该目录路径必须存在
语法格式: zm.FileCreate(文件路径)
命令参数: 文件路径: 字符串, 要创建的空白文件路径
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//请自行打开sdcard根目录查看是否创建成功
zm.FileCreate "/sdcard/紫猫学园.txt"
备注: 基于Linux的`touch`命令行开发
父目录必须是已存在, 否则无法创建文件
V4.2015
初次加入命令
命令名称: 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 初始化设置File参数等命令, 目前仅支持`UTF-8`和`中文编码`(兼容gb2312等)
语法格式: 结果 = zm.FileEncode(文件路径[, 是否设置编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
检测行数: 数值型, 可选, 检测多少行内容, 省略默认为所有行内容, 行数越小, 检测耗时越小
返回值: 字符串: 成功返回`"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

//下面是指定检测行数的功能, 可以缩短识别需要的时间, 但是超出行部分的内容就不做编码判断, 可能会出现误判

Dim qcode = zm.FileEncode("/sdcard/测试编码文件.txt", True, 10)
If qcode Then
  TracePrint "得到并设置文件编码为: ", qcode
Else
  TracePrint "获取编码失败"
End If
备注: 本命令目前仅支持`中文`和`utf-8`两种编码, 脚本只关心读取结果不出现乱码, 不在乎正确编码
V3.1832: 加入命令
V3.1837: 由`zm.FileGetEncode()`改名为`zm.FileEncode()`, 且加入是否设置编码可选参数
命令名称: zm.FileInit 初始化设置File参数 >>点击查看最新帮助<<
功能说明: 初始化设置File系列命令的默认参数内容, 对绝大多数File系列命令有效
语法格式: 结果 = zm.FileInit(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如填写`{"encode":"电脑"}`可解决电脑文件乱码问题, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如填写`{"encode":"电脑"}`可解决电脑文件乱码问题, 更多属性见下面表格
属性 | 默认值 | 数据类型 | 解释
---|-----|------|---
encode | "utf-8" | 字符串 | 文件编码, 填写`{"encode":"电脑"}`可解决电脑文件乱码问题
replacepath | null | 表 | 解决路径无权限问题, 替换指定路径
返回值: 表: 返回设置成功后的默认参数表
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

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

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

Dim txt = zm.FileRead(path)

TracePrint "不会乱码的内容如下:", txt

//部分系统读写文件失败的情况可以考虑加入以下代码解决
zm.FileInit {"replacepath":{"^/storage/emulated/0/":"/sdcard/"}}
备注: 命令原理是内部对字符进行了转码, 电脑对应的是gb18030, 如果你的文件是其他编码格式的, 可以自行填写对应编码
V1.1818: 加入命令
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
V3.1852: 加入 `"replacepath":{"^/storage/emulated/0/":"/sdcard/"}` 属性, 解决部分路径无权限问题
V3.1929: 取消默认替换路径, 需自己写替换内容
命令名称: 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.FileLoadINI 加载并解析INI >>点击查看最新帮助<<
功能说明: 对INI文件进行加载并解析成table数据, 支持zm.FileInit 初始化设置File参数设置默认参数
语法格式: 结果 = zm.FileLoadINI(INI路径[, 文件编码][, 自动转换类型])
命令参数: INI路径: 字符串, 待加载的INI文件路径
自动转换类型: 布尔型, 可选, 将小节名, 键名, 键值进行智能转换成数值型或布尔型, 省略默认`false`, 表示不转换
返回值: 表: 成功返回解析后的INI数据表, 格式类似于`{小节名1:{键名1:键值1, 键名2:键值2}, 小节名A:{键名A:键值A}, ...}`, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim data()
data["紫猫学园"] = {"官网":"zimaoxy.com", "报名QQ":345911220}
data["小节名"] = {"键名":"键值"}
Dim path="/sdcard/zimao.ini"

zm.FileSaveINI path, data

Dim iniData = zm.FileLoadINI(path)
TracePrint iniData["紫猫学园"]["官网"]
TracePrint iniData["紫猫学园"]["报名QQ"]
TracePrint iniData["小节名"]["键名"]
备注: 加载键值读取到`\r`或`\n`时会自动解析为换行符或回车符.

V4.2039: 初次加入
命令名称: zm.FileRead 读取文本文件 >>点击查看最新帮助<<
功能说明: 读取文件所有内容, 支持设置文件编码
语法格式: 结果 = zm.FileRead(文件路径[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
返回值: 字符串: 返回该文件的所有文本内容
脚本例子:
复制代码
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 初始化设置File参数中的`"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 初始化Base64模式影响, 失败返回`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 初始化设置File参数进行设置
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, 0)
TracePrint "读取到的内容为:", txt
备注: 读取超出最大行或最小行将会返回`null`
若需设置文件编码, 请使用zm.FileInit 初始化设置File参数进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
V4.2118: 加入随机读取一行功能
V4.2402: 解决随机读取为`null`问题
命令名称: zm.FileReadLines 读取文本数组 >>点击查看最新帮助<<
功能说明: 读取文件所有内容保存到一维数组中, 支持设置文件编码
语法格式: 结果 = zm.FileReadLines(文件路径[, 文件编码])
命令参数: 文件路径: 字符串, 要操作的文件路径
返回值: 一维数组: 返回文件每一行内容保存到一维数组中
脚本例子:
复制代码
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 初始化设置File参数进行设置
V1.1818: 加入命令
V2.1826: 解决读取文件开头出现问号的问题
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileReplaceLine 替换指定行文本 >>点击查看最新帮助<<
功能说明: 替换指定行文本, 支持zm.FileInit 初始化设置File参数默认参数
语法格式: 结果 = 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 初始化设置File参数进行设置
V1.1818: 加入命令
V3.1832: 新增`auto`自动识别编码, 但是会降低读写速度, 不推荐使用.
命令名称: zm.FileSaveINI 保存INI文件 >>点击查看最新帮助<<
功能说明: 将INI结构的数据保存到文件中, 支持zm.FileInit 初始化设置File参数设置默认参数
语法格式: 结果 = zm.FileSaveINI(INI路径, INI数据[, 文件编码])
命令参数: INI路径: 字符串, 待保存的INI文件路径
文件编码: 字符串, 可选, 设置文件编码解决乱码问题, 省略默认为初始化编码
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim data()
data["紫猫学园"] = {"官网":"zimaoxy.com", "报名QQ":345911220}
data["小节名"] = {"键名":"键值"}
Dim path="/sdcard/zimao.ini"

zm.FileSaveINI path, data

Dim iniData = zm.FileLoadINI(path)
TracePrint iniData["紫猫学园"]["官网"]
TracePrint iniData["紫猫学园"]["报名QQ"]
TracePrint iniData["小节名"]["键名"]
备注: 当键值里出现换行符或回车符时会自动转为`\r`或`\n`字符串进行保存.

V4.2402: 修复错误命令名问题
V4.2039: 初次加入
命令名称: 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.FileWrite 覆盖写入文本 >>点击查看最新帮助<<
功能说明: 覆盖写入文本内容到文件中, 支持zm.FileInit 初始化设置File参数默认参数
语法格式: 结果 = 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 初始化设置File参数进行设置
注意本命令是覆盖写入, 即会清空文件所有内容, 重新写入新的内容
V1.1818: 加入命令
命令名称: zm.FileWriteAppend 追加写入文本 >>点击查看最新帮助<<
功能说明: 追加写入文本内容到文件中, 写完自动换行, 支持zm.FileInit 初始化设置File参数默认参数
语法格式: 结果 = 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 初始化设置File参数进行设置
注意本命令是追加写入, 即保留原内容, 在末尾追加新内容, 写完会自动换行
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 初始化Base64模式影响, 失败返回`null`
语法格式: 结果 = zm.FileWriteBinaryBase64(路径, Base64文本)
命令参数: 路径: 字符串, 要写入的文件路径
返回值: 布尔型: 返回是否成功, 出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

zm.FileWriteBinaryBase64("/sdcard/新紫猫.png", b64)
备注: V1.1821: 加入命令
命令名称: zm.FileWriteForm 写入文本表格 >>点击查看最新帮助<<
功能说明: 将二维数组内容以表格形式写入到文本文件中, 支持设置文件编码
语法格式: 结果 = zm.FileWriteForm(文件路径, 表格内容, 分隔符)
命令参数: 文件路径: 字符串, 要操作的文件路径
分隔符: 字符串, 字符串表示每行文本中的分隔符
返回值: 字符串: 返回表格文本内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim path = "/sdcard/紫猫学园.txt"
zm.FileWriteForm(path, {{"帐号1", "密码1"}, {"帐号2", "密码2"}, {"帐号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.FileInit 初始化设置File参数进行设置
V4.2434: 加入命令
命令名称: zm.FileWriteLine 插入指定行文本 >>点击查看最新帮助<<
功能说明: 追加写入到指定行, 支持zm.FileInit 初始化设置File参数默认参数
语法格式: 结果 = zm.FileWriteLine(文件路径, 指定行, 文本内容, ...)
命令参数: 文件路径: 字符串, 要操作的文件路径
文本内容: 字符串`或`表, 支持一个数组参数或者多个字符串参数, 如果内容是一个数组参数, 则表示换行写入每个元素, 如果内容是多个字符串参数, 则表示不换行依次写入每个字符串
返回值: 表: 返回插入后的所有内容一维数组
脚本例子:
复制代码
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 初始化设置File参数进行设置
注意本命令是追加写入, 即保留原内容, 在指定行加入新内容, 原有内容向下移动
V1.1818: 加入命令
V3.1902: 修复插入第一行出错问题
命令名称: zm.ClearBOM 清除BOM字符串 >>点击查看最新帮助<<
功能说明: 清除读取记事本内容时产生的问号BOM字符串。
语法格式: 结果 = zm.ClearBOM(文本)
命令参数: 文本: 字符串, 待清除BOM问号字符的文本内容
返回值: 字符串: 返回清除后的文本内容.
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim text = File.Read("/sdcard/utf8文本")
TracePrint text   //假设读取的text开头有问号内容, 这个问号就是BOM字符串
Dim newText = zm.ClearBOM(text)
TracePrint newText   //清理后就不会有问号内容了

//另外如果直接用紫猫插件的文件读写命令, 内置默认清除BOM字符串.
备注: V3.1929: 初次加入命令
命令名称: zm.LTrim 删除前导字符 >>点击查看最新帮助<<
功能说明: 从左边开始删除指定的字符,直到出现非指定字符为止。
语法格式: 结果 = zm.LTrim(原字符串[, 前导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
返回值: 字符串:返回删除前导后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//删除左边的空格和a
Dim s = zm.LTrim("  abc abc", " a")
zm.TracePrint s
备注: V1.1730: 初次加入。
命令名称: zm.RegExMatch 正则匹配 >>点击查看最新帮助<<
功能说明: Lua的正则匹配(也叫模式匹配),获取匹配成功的结果并保存到数组中。
语法格式: 结果 = zm.RegExMatch(源字符串, 正则表达式[, 返回表])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
返回表: 表, 可选参数, 只能填写数据类型为数组的变量, 匹配失败返回最大下标为-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`, 加入返回参数
V3.1929: 修复正则匹配部分规则失效问题
V4.2514: 锚点`^`与`$`支持多行匹配
命令名称: zm.RegExMatchEx 正则子匹配 >>点击查看最新帮助<<
功能说明: 捕获子匹配结果,并保存到二维数组中。
语法格式: 结果 = zm.RegExMatchEx(源字符串, 正则表达式[, 返回表])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
返回表: 表, 可选参数, 只能填写数据类型为数组的变量, 匹配失败返回最大下标为-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`, 加入返回参数
V3.1929: 修复正则匹配部分规则失效问题
V4.2514: 锚点`^`与`$`支持多行匹配
命令名称: zm.RegExMatchExSingle 单个正则子匹配 >>点击查看最新帮助<<
功能说明: 根据序号捕获子匹配单个结果,若要所有结果请使用zm.RegExMatchEx 正则子匹配
语法格式: 结果 = zm.RegExMatchExSingle(源字符串, 正则表达式[, 序号])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
序号: 数值型, 可选参数, 返回首个指定序号的子匹配结果, 省略默认为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: 加入命令
V4.2514: 锚点`^`与`$`支持多行匹配
命令名称: zm.RegExMatchSingle 单个正则匹配 >>点击查看最新帮助<<
功能说明: Lua的正则匹配(也叫模式匹配),获取匹配成功的指定结果,若要返回所有结果请使用zm.RegExMatch 正则匹配
语法格式: 结果 = zm.RegExMatchSingle(源字符串, 正则表达式[, 序号])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
序号: 数值型, 可选参数, 返回首个指定序号的匹配结果, 省略默认为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: 加入命令
V4.2514: 锚点`^`与`$`支持多行匹配
命令名称: zm.RegExReplace 正则替换 >>点击查看最新帮助<<
功能说明: 对源字符串进行模式匹配并替换内容。
语法格式: 结果 = zm.RegExReplace(源字符串, 正则表达式, 替换内容[, 替换次数])
命令参数: 源字符串: 字符串, 待匹配查找的字符串内容
替换内容: 字符串` 或 `表, 字符串表示替换后的内容; table表示以匹配结果为键名, 从表中查找对应的键值替换
返回值: 字符串:返回模式匹配替换后的内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

```mqscript showLineNumbers title="例子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(原字符串[, 后导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
返回值: 字符串:返回删除后导字符后的内容。
脚本例子:
复制代码
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

//开启智能转换数据类型, 分割后, 1,3成员是数值型, a,b成员是字符串型, true是布尔型
Dim d = zm.Split("1,true,a,3,b", ",", false, true)
For i = 0 To UBOUND(d)
    TracePrint "值:", d(i), ", 类型:", zm.Type(d(i))
Next
备注: 匹配模式,与Javascript或Perl等正则不同,详见Lua匹配模式
V1.1816: 加入命令
V4.2039: 新增智能转换数据类型可选参数
命令名称: zm.Trim 删除前后导字符 >>点击查看最新帮助<<
功能说明: 分别从左右两边开始删除指定的字符,每边直到出现非指定字符为止。
语法格式: 结果 = zm.Trim(原字符串[, 前后导字符])
命令参数: 原字符串: 字符串, 原来的字符串内容
返回值: 字符串:返回删除前后导字符后的内容。
脚本例子:
复制代码
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`表示返回"年月日时分秒", 当字符串时表示自定义格式化, 与`DateTime.Format()`的第一个参数格式相同, 省略默认为`0`
返回值: 数值型` 或 `字符串: 成功返回时间戳或格式化时间字符串, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim t = zm.GetNetworkTime()
TracePrint "网络时间戳:", t

Dim t2 = zm.GetNetworkTime(1)
TracePrint "字符串时间:", t2

Dim t3 = zm.GetNetworkTime(0, -1)
TracePrint "遍历接口时间:", t3
备注: 比GetNetworkTime 获取网络时间更加精准稳定快速
V3.1832: 加入命令
V4.2015: 更新部分接口
V4.2025: 取消内置失败时循环获取功能, 加入`接口`参数
V4.2111:
新增腾讯接口
新增-1接口, 表示遍历所有接口, 成功立即返回
v4.2514: 更新淘宝网络时间接口
命令名称: 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, "月")
备注: 月份加减时要注意, 比如3月31日加1个月将会得到5月1日, 并非4月30日.
V3.1832: 加入命令
V4.2015: 采用归一化计算日期, 时间更加准确
命令名称: zm.TimeDiff 计算时间差 >>点击查看最新帮助<<
功能说明: 计算时间1减去时间2的时间差, 返回单位以第3个参数为准
语法格式: 结果 = zm.TimeDiff(时间1[, 时间2][, 单位][, 是否取整])
命令参数: 时间1: 数值型`或`字符串, 第1个时间, 字符串时支持`"2017年7月23日 23:29:31"`, `"2017-07-23 23:29:38"`等格式, 数值时表示时间戳
单位: 字符串, 可选, 表示计算返回的时间单位, 可填写`"年"`, `"月"`, `"日"`, `"天"`, `"时"`, `"分"`, `"秒"`或`"Y"`, `"m"`, `"d"`, `"H"`, `"M"`, `"S"`, 省略默认为`"秒"`
返回值: 数值型: 成功返回两者时间差, 单位由参数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`, `20241120130122`等格式。
语法格式: 结果 = 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: 参数`时间`改为可选参数, 省略默认为当前时间
v4.2514: 支持支持`"20241120130122"`这种格式
命令名称: zm.ConvBase 任意进制转换 >>点击查看最新帮助<<
功能说明: 2到62进制任意转换。
语法格式: 结果 = zm.ConvBase(原数值, 原进制, 目标进制)
命令参数: 原数值: 数值型` 或 `字符串, 待转换的原数值。
目标进制: 数值型, 转换的目标进制,取值`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`等
返回值: 字符串: 转换成功后的字符串内容
脚本例子:
复制代码
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: 加入命令
V3.1929: 现在支持 `\uXXXX` 格式的连续字符串内容转码
命令名称: 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 AES加密加密的结果进行解密还原。
语法格式: 结果 = zm.DecodeAES(密文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待解密的密文内容。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为 `{"属性名":"属性值",...}` ,详见下方表。
返回值: 字符串:返回解密后的结果,失败为`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 初始化Base64模式设置模式, 支持URL安全Base64加解密
语法格式: 结果 = 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.DecodeBase64File 快速Base64文件解密
V1.1821: 加入命令
命令名称: zm.DecodeBase64File 快速Base64文件解密 >>点击查看最新帮助<<
功能说明: 对一个文件进行快速Base64解密, 可通过zm.InitBase64 初始化Base64模式设置模式
语法格式: 结果 = 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.DecodeBase64 快速Base64文本解密
V1.1821: 加入命令
命令名称: zm.DecodeDES DES解密 >>点击查看最新帮助<<
功能说明: 对数据进行标准DES解密, 支持DES和DES3, 可以对zm.EncodeDES DES加密结果解密。
语法格式: 结果 = zm.DecodeDES(密文, 密钥[, 高级属性])
命令参数: 密文: 字符串, 待解密的密文内容。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为 `{"属性名":"属性值",...}` ,详见下方表。
返回值: 字符串:返回解密后的结果,失败为`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 TEA加密结果解密。
语法格式: 结果 = zm.DecodeTEA(密文, 密钥[, 高级属性])
命令参数: 密文: 字符串, 待解密的密文内容。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为 `{"属性名":"属性值",...}` ,详见下方表。
返回值: 字符串:返回解密后的结果,失败为`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 URL编码产生的密文进行解密还原。
语法格式: 结果 = 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 AES解密进行解密还原, 支持AES128,AES196和AES256。
语法格式: 结果 = zm.EncodeAES(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为 `{"属性名":"属性值",...}` ,详见下方表。
返回值: 字符串:返回加密后的结果,失败为`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 初始化Base64模式设置加密模式, 支持URL安全Base64加解密
语法格式: 结果 = zm.EncodeBase64(原文)
命令参数: 原文: 字符串, 待加密的原文本内容
返回值: 字符串: 返回Base64加密后的内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

Dim 解密 = zm.DecodeBase64(密文)
If 解密 = 原文 Then 
    TracePrint "解密成功"
Else 
    TracePrint "解密失败"
End If
备注: 加密后的文本可以用zm.DecodeBase64 快速Base64文本解密进行解密
文件Base64加密请使用zm.EncodeBase64File 快速Base64文件加密
V1.1821: 加入命令
命令名称: zm.EncodeBase64File 快速Base64文件加密 >>点击查看最新帮助<<
功能说明: 对一个文件进行快速Base64加密, 可通过zm.InitBase64 初始化Base64模式设置模式
语法格式: 结果 = 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.EncodeBase64 快速Base64文本加密
V1.1821: 加入命令
命令名称: zm.EncodeDES DES加密 >>点击查看最新帮助<<
功能说明: 对数据进行标准DES加密, 支持DES和DES3。
语法格式: 结果 = zm.EncodeDES(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为 `{"属性名":"属性值",...}` ,详见下方表。
返回值: 字符串:返回加密后的结果,失败为`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`
返回值: 字符串: 返回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(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
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(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
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.EncodeRsaSign RSA签名 >>点击查看最新帮助<<
功能说明: 对数据使用私钥进行RSA签名, 返回签名结果
语法格式: 签名结果 = zm.EncodeRsaSign(数据, 私钥)
命令参数: 数据: 字符串, 待签名的数据内容
返回值: 字符串: 返回签名后的文本数据
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

'通过一些网站或其他方式生成RSA公钥与私钥, 请勿照抄例子的密钥对
Dim 数据 = "紫猫学园 http://zimaoxy.com/"

Dim 公钥 = "-----BEGIN PUBLIC KEY-----\n" &_
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6tcUS8HFLG1fSthJwMvQsMbsY\n" &_
"2sSqTpSTfHrJzF9mVa/O6fLAZWMuWpi1QBWFy6GDDONMn5Rw0Dkg9jG3Okxojxqu\n" &_
"2bZnXflW6FbuDPG1kWj80DNuKXmGKQ3HpqLuk89Zn3LjS0jAYAQM2Z/Xdad+JM4u\n" &_
"9peQQ8WwiTff7rj6owIDAQAB\n" &_
"-----END PUBLIC KEY-----\n"

Dim 私钥 = "-----BEGIN PRIVATE KEY-----\n" &_
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALq1xRLwcUsbV9K2\n" &_
"EnAy9CwxuxjaxKpOlJN8esnMX2ZVr87p8sBlYy5amLVAFYXLoYMM40yflHDQOSD2\n" &_
"Mbc6TGiPGq7Ztmdd+VboVu4M8bWRaPzQM24peYYpDcemou6Tz1mfcuNLSMBgBAzZ\n" &_
"n9d1p34kzi72l5BDxbCJN9/uuPqjAgMBAAECgYBrIM5xvnoS0R6D7SoJLINDNEmY\n" &_
"yjVbTnkbYqoFTXlTe0jDnSJG2CWfPCYwoRN4UE1cpzFoDowaaq7MxdXivtWFkbIw\n" &_
"D1nxLexZ85ocNb5NSKIIh76THttZJtqkN42F1mJyaPjtTrv1HEpAzcE0NApNWsoa\n" &_
"vTRwAsJn/RQtASbSeQJBAOQUasteKjTwKG32y617eP1YKLlN2Yur0ovpty8gUf9g\n" &_
"3wPDxUp3jpTK/8hhOdHf44I9c+daC4Tir73mebsie28CQQDRkOerEiWzce4G/mFE\n" &_
"EeaPZm5FX8OYY1O6omf2JaAyCnbol2O4Ffn5P8GZ2mxXc79j/zvpbXqs4jVSOTk7\n" &_
"j6oNAkBgPLE3MHt0rOUSSTF1+QR7OaitT8j8YzrK6Inv655NuI1BZGip3DqgU+uL\n" &_
"nGKuSN8RhGaUdu0nXBM1eLtil9EnAkEAzjB1T+LWBz1kRatJRfEa2SKeAlHbn3ay\n" &_
"7eFWyl9ww2t6XRR+v6OXxH3PXTIEAPNYbum0J9JYrfsPHWxB/HE4jQJAeZCtTRUQ\n" &_
"Kw699c31ERDde8l8wgO7j+VHvxcvabk+IGA6ktM6Z/Hsiy2Y2TZ+kwM6vIdftJPs\n" &_
"XdiEBtyEVQFQig==\n" &_
"-----END PRIVATE KEY-----\n"

Dim 签名结果 = zm.EncodeRsaSign(数据, 私钥)
TracePrint 签名结果

Dim 验证结果 = zm.EncodeRsaVerifySign(数据, 签名结果, 公钥)
TracePrint 验证结果
备注: 请自行通过其他途径生成密钥对.
V4.2015: 初次加入命令
V4.2402: 删除内部输出代码
命令名称: zm.EncodeRsaVerifySign RSA签名验证 >>点击查看最新帮助<<
功能说明: 对RSA签名数据使用公钥进行验证对比是否一致
语法格式: 结果 = zm.EncodeRsaVerifySign(源数据, 签名数据, 公钥)
命令参数: 源数据: 字符串, 待验证的源数据内容
公钥: 字符串, 用于验证的RSA公钥
返回值: 布尔型: 验证通过返回`true`, 验证不通过返回`false`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

'通过一些网站或其他方式生成RSA公钥与私钥, 请勿照抄例子的密钥对
Dim 数据 = "紫猫学园 http://zimaoxy.com/"

Dim 公钥 = "-----BEGIN PUBLIC KEY-----\n" &_
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6tcUS8HFLG1fSthJwMvQsMbsY\n" &_
"2sSqTpSTfHrJzF9mVa/O6fLAZWMuWpi1QBWFy6GDDONMn5Rw0Dkg9jG3Okxojxqu\n" &_
"2bZnXflW6FbuDPG1kWj80DNuKXmGKQ3HpqLuk89Zn3LjS0jAYAQM2Z/Xdad+JM4u\n" &_
"9peQQ8WwiTff7rj6owIDAQAB\n" &_
"-----END PUBLIC KEY-----\n"

Dim 私钥 = "-----BEGIN PRIVATE KEY-----\n" &_
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALq1xRLwcUsbV9K2\n" &_
"EnAy9CwxuxjaxKpOlJN8esnMX2ZVr87p8sBlYy5amLVAFYXLoYMM40yflHDQOSD2\n" &_
"Mbc6TGiPGq7Ztmdd+VboVu4M8bWRaPzQM24peYYpDcemou6Tz1mfcuNLSMBgBAzZ\n" &_
"n9d1p34kzi72l5BDxbCJN9/uuPqjAgMBAAECgYBrIM5xvnoS0R6D7SoJLINDNEmY\n" &_
"yjVbTnkbYqoFTXlTe0jDnSJG2CWfPCYwoRN4UE1cpzFoDowaaq7MxdXivtWFkbIw\n" &_
"D1nxLexZ85ocNb5NSKIIh76THttZJtqkN42F1mJyaPjtTrv1HEpAzcE0NApNWsoa\n" &_
"vTRwAsJn/RQtASbSeQJBAOQUasteKjTwKG32y617eP1YKLlN2Yur0ovpty8gUf9g\n" &_
"3wPDxUp3jpTK/8hhOdHf44I9c+daC4Tir73mebsie28CQQDRkOerEiWzce4G/mFE\n" &_
"EeaPZm5FX8OYY1O6omf2JaAyCnbol2O4Ffn5P8GZ2mxXc79j/zvpbXqs4jVSOTk7\n" &_
"j6oNAkBgPLE3MHt0rOUSSTF1+QR7OaitT8j8YzrK6Inv655NuI1BZGip3DqgU+uL\n" &_
"nGKuSN8RhGaUdu0nXBM1eLtil9EnAkEAzjB1T+LWBz1kRatJRfEa2SKeAlHbn3ay\n" &_
"7eFWyl9ww2t6XRR+v6OXxH3PXTIEAPNYbum0J9JYrfsPHWxB/HE4jQJAeZCtTRUQ\n" &_
"Kw699c31ERDde8l8wgO7j+VHvxcvabk+IGA6ktM6Z/Hsiy2Y2TZ+kwM6vIdftJPs\n" &_
"XdiEBtyEVQFQig==\n" &_
"-----END PRIVATE KEY-----\n"

Dim 签名结果 = zm.EncodeRsaSign(数据, 私钥)
TracePrint 签名结果

Dim 验证结果 = zm.EncodeRsaVerifySign(数据, 签名结果, 公钥)
TracePrint 验证结果
备注: 请自行通过其他途径生成密钥对.
V4.2015
初次加入命令
命令名称: zm.EncodeSHA SHA计算 >>点击查看最新帮助<<
功能说明: 对数据进行SHA签名计算, 支持SHA1,SHA224和SHA256
语法格式: 结果 = zm.EncodeSHA(数据[, 算法])
命令参数: 数据: 字符串, 待计算的原始数据
返回值: 字符串: 返回计算结果
脚本例子:
复制代码
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(明文, 密钥[, 高级属性])
命令参数: 明文: 字符串, 待加密的明文内容。
高级属性: 表, 可选参数,用于设置加解密模式等选项,格式为 `{"属性名":"属性值",...}` ,详见下方表。
返回值: 字符串:返回加密后的结果,失败为`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的不重复字符串时表示自定义编码表
返回值:
脚本例子:
复制代码
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.NumToStr 数值转字符串 >>点击查看最新帮助<<
功能说明: 与CStr类似, 但本命令可以避免一些过大或过小的数值被转为科学计数法, 例如1.8462985378857e+16
语法格式: 结果 = zm.NumToStr(数值)
命令参数: 数值: 数值型, 要转换的数值内容
返回值: 字符串: 返回转换成字符串型的数值内容
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次

zm.Init  //初始化插件,只需执行一次



Dim a = 18462985378856960

TracePrint a

TracePrint zm.NumToStr(a)
备注: 对大部分数据有效, 但如果数据本身已经超出数据类型, 丢失精度, 那就无法转换了
V4.2434: 加入命令
命令名称: zm.GetGateway 获取默认网关地址 >>点击查看最新帮助<<
功能说明: 获取默认网关地址。
语法格式: 结果 = zm.GetGateway()
命令参数:
返回值: 字符串:返回当前默认网关地址。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.GetGateway()
备注: V1.1805: 加入命令
命令名称: zm.GetIPNet 获取外网IP >>点击查看最新帮助<<
功能说明: 获取外网IP地址等信息, 根据参数决定返回内容
语法格式: 结果 = zm.GetIPNet([返回格式[, 接口[, 缓存 ] ] ])
命令参数: 返回格式: 数值型, 可选, 填写`0`表示只返回ip地址字符串, 填写大于`0`的数字表示返回详细信息表, 包括省份等内容, 不同数字代表不同接口的返回值, `-1`表示测试所有接口并输出结果, 省略默认为`0`
缓存: 布尔型, 可选, 是否强制获取最新数据, `true`是刷新缓存获取最新数据, `false`是以接口自身设定为准, 省略默认为`false`
返回值: 字符串` 或 `表: 返回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 If
Next
备注: V1.1818: 加入命令
V3.1833: 增加多个接口, 提高获取ip稳定性
V4.2015: 更新部分接口
V4.2025: 取消内置失败时循环获取功能, 加入`接口`参数
v4.2118: 加入是否强制刷新缓存参数
V4.2402: 返回格式填`-1`时, 将测试所有接口并输出结果供参考
v4.2514: 更新部分接口
命令名称: zm.HttpDownload 下载文件 >>点击查看最新帮助<<
功能说明: 以HTTP协议的Get方法下载文件, 支持提交cookie与头信息
语法格式: 结果 = zm.HttpDownload([对象][网址][,保存路径][,提交cookie][,请求头信息][,自定义])
命令参数: 对象: table, 可选, 若填写对象将忽略其他参数, 格式为 `{"url":"网址", "path":"保存路径", "cookie":"cookie字符串或文件", "header":{"头信息1", "头信息2"} , "customize":"自定义curl参数"}`
保存路径: string, 可选, 文件的保存路径, 省略为当前路径下的默认文件名
请求头信息: string` 或 `table, 可选, 要提交的头信息, 多个头信息可用一维数组传入, 省略为`""`
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

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

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

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

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

Dim 总数量 = zm.NetDataCount()
TracePrint "一共有", 总数量, "个数据"
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

脚本开头必须先调用一次zm.NetDataInit 初始化网络数据
V1.1818: 加入命令
V3.1903: 大幅度提高执行效率
V4.2113:
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程
命令名称: zm.NetDataDel 删除网络数据 >>点击查看最新帮助<<
功能说明: 从数据表中删除指定共享网络数据, 仅删除一个变量数据, 不会清空所有数据
语法格式: 结果 = zm.NetDataDel(键名[, 数据表名])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

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 检查删除结果
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

脚本开头必须先调用一次zm.NetDataInit 初始化网络数据
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
V4.2113:
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程
命令名称: zm.NetDataGet 获取网络数据 >>点击查看最新帮助<<
功能说明: 从数据表中获取网络共享数据
语法格式: 结果 = zm.NetDataGet(键名[, 数据表名][, 是否删除])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
是否删除: 布尔型, 可选, 表示获取后是否直接删除该键名, 省略默认为false
返回值: 字符串`或_数值型_或_布尔型_或_表_ , 返回键值内容, 该数据类型与写入时相同
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

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 检查删除结果
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

脚本开头必须先调用一次zm.NetDataInit 初始化网络数据
V1.1816: 加入命令
V1.1818: 支持table
V2.1826: 解决写入成功, 读取失败的问题
V3.1903: 大幅度提高执行效率
V4.2113:
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程

命令名称: zm.NetDataGetRows 获取多行网络数据 >>点击查看最新帮助<<
功能说明: 从数据表中获取指定行数的数据, 数据表名与是否删除参数顺序可以打乱
语法格式: 结果 = zm.NetDataGetRows(行数[, 起始行][, 数据表名][, 是否删除])
命令参数: 行数: 数值型, 从指定数据表中获取多少行数据
数据表名: 字符串, 可选, 从指定数据表中获取共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
返回值: 表: 返回二维表, 格式`{ {"id":id,"key":key,"value":value}, ...}`, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//初始化创建表, 并且清空以前数据
zm.NetDataInit "http://192.168.1.100/sql.php", "测试脚本", "QQ345911220", 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
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

脚本开头必须先调用一次zm.NetDataInit 初始化网络数据
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
V4.2113:
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程
命令名称: zm.NetDataInit 初始化网络数据 >>点击查看最新帮助<<
功能说明: 初始化共享网络数据, 创建指定数据表, 实现网络通信功能, 需要网站程序配合, 搭建方法详见后面的备注
语法格式: 结果 = zm.NetDataInit([网址][, 数据表名[, 通信密钥]][, 是否清空][, 超时时间])
命令参数: 网址: 字符串, 可选, 网站程序sql.php的网址
通信密钥: 字符串, 可选, 填写安装时的通信密钥
超时时间: 数值型, 可选, 修改NetData系列所有命令内置超时时间
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

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", "测试脚本", "QQ345911220", True
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
V4.2113:
新增 `通信密钥` 参数, 加强网站安全性
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程
命令名称: 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", "测试脚本", "QQ345911220"

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

Dim 结果 = zm.NetDataQuery("SELECT * FROM `测试脚本`")
TracePrint 结果
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

脚本开头必须先调用一次zm.NetDataInit 初始化网络数据
V1.1816: 加入命令
V3.1903: 大幅度提高执行效率
V4.2113:
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程
命令名称: zm.NetDataSet 设置网络数据 >>点击查看最新帮助<<
功能说明: 往数据表中添加或修改共享网络数据
语法格式: 结果 = zm.NetDataSet(键名, 键值[, 数据表名])
命令参数: 键名: 字符串, 类似于变量名, 区分大小写
数据表名: 字符串, 可选, 往指定数据表中设置共享数据, 数据表必须存在, 省略默认为初始化时的数据表名
返回值:
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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

zm.NetDataSet "昵称", "紫猫"
zm.NetDataSet "等级", 99
zm.NetDataSet "VIP", True
备注: 本功能是使用POST提交至PHP网站的数据库操作, 实现多设备共享网络数据, 所以需要自行搭建网站程序才可使用, 具体搭建方法见教程帖子 >> https://zimaoxy.com/b/t-2876-1-1.html

脚本开头必须先调用一次zm.NetDataInit 初始化网络数据
V1.1816: 加入命令
V1.1818: 支持table
V3.1903: 大幅度提高执行效率
V4.2113:
更新 `sql.php` 与 `medoo.php` 程序, 对旧版有影响, 请参考上面教程帖子操作
全新的环境搭建教程
命令名称: 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: 解决网址不支持`%`字符的问题
V4.2402: 新增`自动补全`参数, 解决无法打开自定义协议问题
命令名称: 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地址
超时时间: 数值型, 可选, 单位秒, 默认为`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`秒
返回值: 字符串:成功返回字符串数据内容, 失败返回`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`字符
追加换行符: 布尔型, 可选, 消息末尾是否追加换行符, 默认为`true`
返回值: 数值型:成功返回大于`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: 加入命令
V4.2015: 加入`追加换行符`可选参数
命令名称: 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, 端口)
命令参数: 数据: 字符串, 要发送的数据内容
端口: 数值型, 目标端口
返回值: 数值型:成功返回大于`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 设置CmpColorEx默认参数 来自定义修改
- 担心一次对比不到颜色? 自由设置限时循环对比时间, 提高成功率
- 画面变化太大, 颜色相似度不好设置? 智能颜色相似度帮你全自动查找
- 对比点存在误差, 需要忽略一定数量的点? 数量相似度解决此问题
- 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
- 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
- 支持命令返回值与参数返回值, 你想怎么写, 就怎么写, 返回值中有序号, 坐标, 颜色
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
- 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
- 需要防检测点击功能? 推荐使用zm.CmpColorExTap 超级多点比色点击
- 需要遍历多个对象数组? 推荐使用zm.CmpColorExTable 超级多点比色遍历
语法格式: 结果 = zm.CmpColorEx([对象][颜色组, ...][, 颜色相似度[, 智能颜色相似度[, 颜色相似度步长]]][, 数量相似度][, 对比超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色相似度: 数值型, 可选, 对比查找的颜色相似度小数, 省略默认为`0.9`, 取值范围`[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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 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: 加入命令
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: 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中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
颜色相似度: 数值型, 可选, 对比查找的颜色相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
颜色相似度步长: 数值型, 可选, 智能颜色相似度调节变化间隔, 必须写在`颜色相似度`和`智能颜色相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
对比超时: 数值型, 可选, 限时对比时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 在调试日志信息中加入该内容, 比如`"@拾取屠龙刀"`, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-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.FindCmpPC 超级查找对比图色 >>点击查看最新帮助<<
功能说明: 集成 zm.FindMultiColor 超级多点找色 , zm.FindPic 超级找图 , zm.CmpColorEx 超级多点比色 和 zm.FindColor 超级找色 四大命令功能, 根据传入的图色数据参数格式智能分配命令使用. 一些特色功能或注意事项如下:

- 注意: `图色数据` 参数中请不要填写找图偏色参数
- 注意: `方向` 参数是字符串内容, 不是按键自带的数值型
- 注意: 依次按 `多点找色, 找图, 多点比色, 找色` 的顺序进行查找比较, 一旦查找比较成功, 立即返回结果
- 注意: `图色数据` 参数支持多个参数, 若出现不同类型的图色数据, 请使用一维数组 `{}` 分类传入, 内部会自动合并到同一个分类下
- 注意: `查找超时` 参数遇到多个不同类型的图色数据时, 每种数据都将独立计算一次超时时间
- 注意: 默认参数是通过 zm.SetFindMultiColor 设置FindMultiColor默认参数 , zm.SetFindPic 设置FindPic默认参数 , zm.SetCmpColorEx 设置CmpColorEx默认参数 , zm.SetFindColor 设置FindColor默认参数 分别修改的
- 注意: 返回值table中的 `fun` 键值对里存放对应找到函数名, `id` 键值对存放该函数下的第几个数据
- 注意: 填写 `对象` 参数后, 最好别再写别的参数
- 参数太多, 写的累? 除了对象与图色数据二选一必选外, 其他参数都是可选的, 使你的代码更加简洁清晰
- 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
- 省略参数的默认值不理想? 可以自定义修改
- 担心一次找不到图色数据? 自由设置限时循环查找时间, 提高成功率
- 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
- 查找方向的数值总是记不住? 直接用中文 `"左上","中心","右上","左下","右下",...` 来代替
- 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
- 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
- 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
- 返回值中有序号, 坐标等内容
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
- 需要防检测点击功能? 推荐使用zm.FindCmpPCTap 超级查找对比图色点击
- 需要遍历多个对象数组? 推荐使用zm.FindCmpPCTable 遍历超级查找对比图色
语法格式: 结果 = zm.FindCmpPC([对象][x1, y1, x2, y2, ][图色数据][, 方向][, 相似度[, 智能相似度[, 相似度步长]]][, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若填写本参数后, 建议不要再跟其他参数
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, "id":id, "x":x, "y":y, "name":name, "miss":miss, "fun":fun}`, 没找到或出错返回`null`, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//--------------------初级用法--------------------//
//支持传入多点找色, 找图, 多点比色, 找色四大命令的图色数据
Dim 结果_绿龙 = zm.FindCmpPC(100, 200, 300, 400, "1FC5F4|0DD200|FFFFFF|504135|D97700")
If 结果_绿龙 Then 
    TracePrint "找到坐标为:", 结果_绿龙["x"], 结果_绿龙["y"]
Else 
    TracePrint "没有找到绿龙"
End If

//多点找色数据可以放到一维数组中传入, 也可以直接分两个参数传入
Dim 多点找色_白龙 = {"242424", "-10|2|ABC54A,9|4|12DC67"}
Dim 结果_白龙 = zm.FindCmpPC(100, 200, 300, 400, 多点找色_白龙)
//上面等同于 Dim 结果_白龙 = zm.FindCmpPC(100, 200, 300, 400, 多点找色_白龙[1], 多点找色_白龙[2])
If 结果_白龙 Then 
    TracePrint "找到坐标为:", 结果_白龙["x"], 结果_白龙["y"]
Else 
    TracePrint "没有找到白龙"
End If

//--------------------中级用法--------------------//
//可以在参数中传入数组代表返回值
Dim 结果_黑龙()
If zm.FindCmpPC("黑龙1.png|黑龙2.png", 结果_黑龙) Then
    TracePrint "找到坐标为:", 结果_黑龙["x"], 结果_黑龙["y"]
Else 
    TracePrint "没有找到黑龙"
End If

//可以把多个参数直接封装进一维数组中作为对象参数传入
Dim 多点比色_红龙 = {"205|177|0CBB00,228|169|FFFFFF", 0.8}
Dim 结果_红龙 = zm.FindCmpPC(多点比色_红龙)
If 结果_红龙 Then 
    TracePrint "找到坐标为:", 结果_红龙["x"], 结果_红龙["y"]
Else 
    TracePrint "没有找到红龙"
End If


//--------------------高级用法--------------------//
//多个不同类型的图色数据建议用一维数组分开传入
Dim 图片_黄龙 = {"黄龙1.png", "黄龙2.png"}
Dim 颜色_黄龙 = {"1FC5F4|0DD200|FFFFFF", "504135|D97700"}
Dim 多点找色_黄龙 = {{"242424", "-10|2|ABC54A,9|4|12DC67"}, {"1FC5F4","137|-7|0DD200,151|173|FFFFFF"}}
Dim 多点比色_黄龙 = {"205|177|0CBB00,228|169|FFFFFF", "195|242|1FC5F4,332|235|0DD200"}
Dim 结果_黄龙()
Dim 图色_黄龙 = {100, 200, 300, 400, 图片_黄龙, 颜色_黄龙, 多点找色_黄龙, 多点比色_黄龙, 5000, 结果_黄龙}
//依次按多点找色, 找图, 多点比色, 找色顺序查找, 每个类型限时5000毫秒, 找到任何一个立即返回到结果_黄龙数组中
If zm.FindCmpPC(图色_黄龙) Then 
    TracePrint "找到坐标为:", 结果_黄龙["x"], 结果_黄龙["y"], ", 序号为:", 结果_黄龙["id"], ", 命令为:", 结果_黄龙["fun"]
Else 
    TracePrint "没有找到黄龙"
End If

//--------------------修改默认值--------------------//
//本函数没有自己的默认值, 而是由四大图色命令的分别对应各自默认值
//使用zm.SetFindMultiColor()修改本命令使用多点找色数据时候的默认值
//使用zm.SetFindColor()修改本命令使用找色数据时候的默认值
//使用zm.SetFindPic()修改本命令使用找图数据时候的默认值
//使用zm.SetCmpColorEx()修改本命令使用多点比色数据时候的默认值
//这里修改多点找色默认值为例, 更多修改默认设置详见各个命令帮助

//设置多点找色的默认日志输出为显示找到状态, 返回值为xy数组
Dim xy()
zm.SetFindMultiColor {"ret":xy, "showlog":"显示找到"}
If zm.FindCmpPC("00AAFF", "42|42|565656") Then
    TracePrint "可以用以下3种格式获取返回值"
    TracePrint "找到序号" & xy["id"], "x=" & xy["x"], "y=" & xy["y"], "颜色=" & xy["name"]
Else
    TracePrint "没有找到"
End If
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
虽然本命令集成了四大图色命令, 但我依旧推荐单独使用对应图色命令, 因为各自对应命令更加便于阅读代码
V4.2042: 初次加入
命令名称: zm.FindCmpPCTable 遍历超级查找对比图色 >>点击查看最新帮助<<
功能说明: 与zm.FindCmpPC 超级查找对比图色类似, 参数只有一个对象数组, 可实现遍历参数的键值对象进行查找
语法格式: 结果 = zm.FindCmpPCTable(对象)
命令参数: 对象: 表, 可选, 把zm.FindCmpPC 超级查找对比图色的对象参数放入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.FindCmpPC(打怪)
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
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
虽然本命令集成了四大图色命令, 但我依旧推荐单独使用对应图色命令, 因为各自对应命令更加便于阅读代码
V4.2042: 初次加入
命令名称: zm.FindCmpPCTap 超级查找对比图色点击 >>点击查看最新帮助<<
功能说明: 与zm.FindCmpPC 超级查找对比图色类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令
语法格式: 结果 = zm.FindCmpPCTap([对象][x1, y1, x2, y2, ][图色数据][, 方向][, 相似度[, 智能相似度[, 相似度步长]]][, 查找超时][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若填写本参数后, 建议不要再跟其他参数
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`"左上"`, 支持`["左上","中心","右上","左下","右下","上左","上右","下左","下右"]`这几个值
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-1`和`-2`, 省略默认为`-2000`
返回值: 表: 找到返回结果保存到表中, 格式为`{id, x, y, name, "id":id, "x":x, "y":y, "name":name, "miss":miss, "fun":fun}`, 没找到或出错返回`null`, 使用方法请看示例
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//本命令内置找到后点击, 其他用法例子与zm.FindCmpPC()相同
Dim 多点比色_红龙 = {"205|177|0CBB00,228|169|FFFFFF", 0.8}
Dim 结果_红龙 = zm.FindCmpPCTap(多点比色_红龙)
If 结果_红龙 Then 
    TracePrint "找到并点击坐标为:", 结果_红龙["x"], 结果_红龙["y"]
Else 
    TracePrint "没有找到红龙"
End If

//点击坐标参数可以自由调整, 下面举几种例子
//这里的"100,200"代表只要找到, 就会点击固定坐标100, 200, 与找到坐标无关
zm.FindCmpPCTap(多点比色_红龙, "100,200")

//这里的"+10,200"代表只要找到, 就点击x坐标为找到的x+10, 点击y坐标为固定200
zm.FindCmpPCTap(多点比色_红龙, "+10,200")

//这里的"+10,-20"代表只要找到, 就点击x坐标为找到的x+10, 点击y坐标为找到的y-20, 相当于是偏移点击
zm.FindCmpPCTap(多点比色_红龙, "+10,-20")

//这里的"+10,-20,3000"代表只要找到, 就点击x坐标为找到的x+10, 点击y坐标为找到的y-20, 并且点击后延时3000毫秒
zm.FindCmpPCTap(多点比色_红龙, "+10,-20,3000")

//这里的"+0,-0,3000"代表只要找到, 就点击找到的坐标, 不做偏移, 并且点击后延时3000毫秒
zm.FindCmpPCTap(多点比色_红龙, "+0,+0,3000")
备注: 该命令用法灵活多变, 更多用法请大家自行摸索, 灵活使用输出日志可以事半功倍
虽然本命令集成了四大图色命令, 但我依旧推荐单独使用对应图色命令, 因为各自对应命令更加便于阅读代码
V4.2042: 初次加入
命令名称: zm.FindColor 超级找色 >>点击查看最新帮助<<
功能说明: 比 FindColor 寻找颜色 更加强大的命令, 具体特色如下

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

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 序号坐标颜色 = zm.FindColor([对象,][x1,y1,x2,y2,][颜色][,方向][,相似度[,智能相似度[,相似度步长]]][,查找次数][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为 `{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 超级找色点击
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindColorEx 超级找色返回所有坐标 >>点击查看最新帮助<<
功能说明: 与zm.FindColor 超级找色类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 结果 = zm.FindColorEx([对象][x1, y1, x2, y2, ]颜色[, 相似度[, 智能相似度[, 相似度步长]]][, 查找超时][, 是否点击][, 点击坐标][, 显示日志][, 输出行号][, 备注][, 等待消失][, 消失超时][, 参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 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: 修复返回值被前次结果覆盖的问题
V3.1929: 修复返回值缺少`counts`问题
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: 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 超级找色类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 序号坐标颜色 = zm.FindColorTap([对象,][x1,y1,x2,y2,][颜色][,方向][,相似度[,智能相似度[,相似度步长]]][,查找次数][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
方向: 字符串, 可选, 从指定方向开始查找, 省略默认为`"左上"`, 支持`["左上","中心","右上","左下","右下","上左","上右","下左","下右"]`这几个值
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
超时时间: 数值型, 可选, 限时查找时间, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 在调试日志信息中加入该内容, 比如`"@拾取屠龙刀"`, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-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
为智能相似度增加另一种方便的写法, 旧语法依旧有效
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindMultiColor 超级多点找色 >>点击查看最新帮助<<
功能说明: 比 FindMultiColor 多点找色 更加强大的命令, 具体特色如下

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

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

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

//--------------------初级用法--------------------//
Dim retA
//表示查找两个多点找色数据, 分别是"BDBDBD","56|33|614B6B"和"242424","-10|2|ABC54A,9|4|12DC67"
//支持无限添加多点找色数据, 只要按照格式"第一点颜色","偏移颜色组"依次添加即可
retA = zm.FindMultiColor("BDBDBD", "56|33|614B6B", "242424", "-10|2|ABC54A,9|4|12DC67")
If retA 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"), 查找结果与其他参数信息
Dim retB = zm.FindMultiColor(100, 200, 300, 400, "00AAFF", "42|42|565656", 0.8, 2000, "中心", "DD58FF", "3|4|A25C6D", True, "显示", "@怪物1", 返回数组, "_39")
If retB 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

//----------------V4.2039版以上支持颜色描述数组数据----------------//
Dim 黑龙, 白龙 //一维数组例子
黑龙 = {"BDBDBD", "56|33|614B6B"}
白龙 = {"242424", "-10|2|ABC54A,9|4|12DC67"}
Dim retD = zm.FindMultiColor(黑龙, 白龙, 0.8)
If retD Then
    TracePrint "颜色找到了"
Else
    TracePrint "没有找到颜色"
End If

Dim 颜色数组() //二维数组例子
颜色数组(0) = {"BDBDBD", "56|33|614B6B"}
颜色数组(1) = {"242424", "-10|2|ABC54A,9|4|12DC67"}
Dim retC = zm.FindMultiColor(颜色数组, 0.8)
If retC Then
    TracePrint "颜色找到了"
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`中
V4.2039: 加入颜色描述数组数据支持
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindMultiColorEx 超级多点找色返回所有坐标 >>点击查看最新帮助<<
功能说明: 与zm.FindMultiColor 超级多点找色类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 序号坐标颜色 = zm.FindMultiColorEx([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击坐标][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-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.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`中
V4.2039: 加入颜色描述数组数据支持
V4.2042:
修复颜色描述数组兼容问题
日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: 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`中
V4.2039: 加入颜色描述数组数据支持
命令名称: zm.FindMultiColorTap 超级多点找色点击 >>点击查看最新帮助<<
功能说明: 与zm.FindMultiColor 超级多点找色类似, 区别在于本命令内置找到后点击. 由于查找与点击是两个动作组成, 为方便代码阅读理解, 故新增本命令

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 序号坐标颜色 = zm.FindMultiColorTap([对象,][x1,y1,x2,y2,][第一点颜色,偏移颜色组][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
偏移颜色组: 字符串, 可选, 相对与第一个颜色坐标点的偏移颜色组,推荐用抓抓工具快速生成, 前面必须是第一点颜色,支持多参数, 详见示例
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.9`, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`"±x,±y,t"`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`"100,100"`表示固定点击坐标100,100, `"+10,-10"`表示偏移点击找到的x+10,y-10位置, `"10,10,2000"`表示点击10,10坐标后延时2000毫秒, 该参数会受zm.SetTap 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{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`中
V4.2039: 加入颜色描述数组数据支持
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindPic 超级找图 >>点击查看最新帮助<<
功能说明: 比 FindPic 找图 更加强大的命令, 具体特色如下

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

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 序号坐标图片名 = zm.FindPic([对象,][x1,y1,x2,y2,][图片][,偏色][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为"000000"
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-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 超级找图点击
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindPicEx 超级找图返回所有坐标 >>点击查看最新帮助<<
功能说明: 与zm.FindPic 超级找图类似, 区别在于本命令会找到所有符合条件的坐标并返回二维数组

:::warning

本命令没有方向参数!

:::
语法格式: 结果 = zm.FindPicEx([对象,][x1,y1,x2,y2,][图片][,偏色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为"000000"
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 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: 加入命令
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindPicExA 超级找图返回所有坐标(Image版) >>点击查看最新帮助<<
功能说明: 与zm.FindPicEx 超级找图返回所有坐标类似, 区别在于本命令采用 Image.FindPic 区域找图返回所有坐标 算法实现

:::danger

本命令的方向参数是字符串型, 例如`"左上"`之类, 而按键自带命令的方向是数值型, 例如`0`之类, 如果直接复制按键命令的参数, 一定要记得修改方向参数!

:::
语法格式: 结果 = zm.FindPicExA([对象,][x1,y1,x2,y2,][图片][,偏色][,方向][,相似度[,智能相似度[,相似度步长]]][,超时时间][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为"000000"
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
是否点击: 布尔型, 可选, 是否需要找到后自动点击该坐标, 支持`[true, false]`这两个值, 省略默认为`false`
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-1`和`-2`, 省略默认为`-2000`
返回值: table: 找到返回结果保存到表中, 格式为`{ {x, y}, ..., "counts":数量, "miss":miss}`, 没找到或出错返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

Dim ret
ret = zm.FindPicExA("紫猫.png|学园.bmp|/sdcard/test.png")
If ret Then
    TracePrint "图片找到了, 有以下几种方式遍历找到的坐标"
    TracePrint "第1种:遍历数组方法"
    For i = 0 to Ubound(ret)
        TracePrint " 坐标:", ret(i, 0), ret(i, 1)
    Next
    
    TracePrint "第2种:遍历表方法"
    For i = 1 to Ubound(ret)+1
        TracePrint " 坐标:", ret[i][1], ret[i][2]
    Next
Else
    TracePrint "没有找到图片"
End If
备注: V4.2118: 加入命令
命令名称: 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中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
偏色: 字符串, 可选, 图片的偏色, 格式为“BBGGRR”, 省略默认为"000000"
相似度: 数值型, 可选, 对比查找的相似度小数, 省略默认为`0.8`, 取值范围`[0, 1.0]`, 越高越相似
相似度步长: 数值型, 可选, 智能相似度调节变化间隔, 必须写在`相似度`后面, 省略默认为`0.05`, 取值范围`[0, 1.0]`
点击坐标: 字符串, 可选, 点击修改后的坐标, 格式`"±x,±y,t"`, 省略为点击找到坐标, `t`是可选的, 表示点击后延时毫秒, 例如`"100,100"`表示固定点击坐标100,100, `"+10,-10"`表示偏移点击找到的x+10,y-10位置, `"10,10,2000"`表示点击10,10坐标后延时2000毫秒, 该参数会受zm.SetTap 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{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
为智能相似度增加另一种方便的写法, 旧语法依旧有效
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.FindStr 超级找字 >>点击查看最新帮助<<
功能说明: 比 FindStr 区域找字 更加强大的命令, 具体特色如下

- 不想记设置字库与切换字库命令? 本命令已集成这两个功能, 只要填写参数即可
- 参数太多, 写的累? 所有参数都是可选的, 使你的代码更加简洁清晰
- 参数太多, 顺序记不住? 除了对象与范围是固定顺序外, 其他参数全部可以打乱顺序随便写
- 省略参数的默认值不理想? 可使用 zm.SetFindStr 设置FindStr默认参数 来自定义修改
- 担心一次找不到文字? 自由设置限时循环查找时间, 提高成功率
- 画面变化太大, 相似度不好设置? 智能相似度帮你全自动查找
- 脚本出错找不到问题? 开启日志输出显示参数, 所有问题一目了然
- 找到后想等画面消失再继续下一步操作吗? 等待消失参数帮你解决这个烦恼
- 支持命令返回值与参数返回值, 你想怎么写, 就怎么写
- 返回值中有序号, 坐标, 还有对应的文字内容
- 支持对象参数写法, 将所有参数保存到一张表里, 直接传入该表
- 支持重写, 即传入对象参数后, 再写其他参数将会覆盖对应的对象数据
- 需要防检测点击功能? 推荐使用zm.FindStrTap 超级找字点击
- 需要遍历多个对象数组? 推荐使用zm.FindStrTable 超级找字遍历
语法格式: 序号与坐标 = zm.FindStr([对象,][x1,y1,x2,y2,][文字][,颜色][,相似度[,智能相似度[,相似度步长]]][,超时时间][,字库文件名][,字库序号][,是否点击][,点击坐标][,显示日志][,输出行号][,备注][,等待消失][,消失超时][,参数返回值])
命令参数: 对象: 表, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
颜色: 字符串, 可选, 要文字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如"FFFFFF-101010|123456"
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
字库序号: 字符串, 可选, 切换字库序号, 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 设置超级点击影响
输出行号: 字符串, 可选, 格式为`"_"`开头后跟行号, 比如`"_10"`表示第10行代码, 输出调试信息窗口显示第几行代码, 需开启显示日志才有效
等待消失: 数值型, 可选, 填写`-1`禁用或`-2`启用, `-2`表示找到后或点击后继续查找, 直到找不到或消失超时, 省略默认为`-1`, 启用后返回值将有`miss`键名, 值为`true`时表示成功消失, 值为`false`表示未消失
参数返回值: 表, 可选, 只能传入数组变量名, 用于保存查找结果, 格式与命令返回值相同
返回值: 表: 找到返回结果保存到表中, 格式为`{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 超级找字点击
V4.2017: 修复字库序号参数报错问题
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: 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中传入, 若后面跟有其他参数, 则会对应覆盖对象数据
y1: 数值型, 可选, 查找范围的左上角y坐标, 省略默认为`0`
y2: 数值型, 可选, 查找范围的右下角y坐标, 省略默认为`0`
颜色: 字符串, 可选, 要文字的16进制颜色,格式为“BBGGRR”,多个颜色用“|”隔开,偏色使用“-”隔开,比如"FFFFFF-101010|123456"
智能相似度: 数值型, 可选, 与相似度组成组成智能相似计算范围, 适合图色变化大的情况, 省略默认取值与`相似度`相同, 取值范围`[0, 1.0]`, 越高越相似
超时时间: 数值型, 可选, 最大查找耗时, 单位毫秒, 如果一次找不到, 可以限时循环查找, 省略默认为`1`
字库序号: 字符串, 可选, 切换字库序号, 0号字库填写`"#0"`, 以此类推, 当填写字库文件名, 不填字库序号时, 默认设置并使用9号字库
显示日志: 字符串, 可选, 输出调试日志信息, 省略默认为"隐藏", 支持 `["显示","显示找到", "显示没找到","隐藏","show", "showfind", "shownofind","hide"]` 这几个值
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
消失超时: 数值型, 可选, 填写`负数`, 表示等待消失的超时时间, 单位毫秒, 注意必须填写负数, 不可填`-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
为智能相似度增加另一种方便的写法, 旧语法依旧有效
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.SetCmpColorEx 设置CmpColorEx默认参数 >>点击查看最新帮助<<
功能说明: 修改 zm.CmpColorEx 超级多点比色 的默认参数值。
语法格式: 默认值 = zm.SetCmpColorEx(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如 `{"sim":0.8, "showlog":"显示"}` 表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如 `{"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"`, `"showfind"`, `"shownofind"`,`"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毫秒
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.SetFindColor 设置FindColor默认参数 >>点击查看最新帮助<<
功能说明: 修改 zm.FindColor 超级找色 的默认参数值。
语法格式: 默认值 = zm.SetFindColor(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如 `{"sim":0.8, "showlog":"显示"}` 表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如 `{"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"`, `"showfind"`, `"shownofind"`,`"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毫秒
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.SetFindMultiColor 设置FindMultiColor默认参数 >>点击查看最新帮助<<
功能说明: 修改 zm.FindMultiColor 超级多点找色 的默认参数值。
语法格式: 默认值 = zm.SetFindMultiColor(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如 `{"sim":0.8, "showlog":"显示"}` 表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如 `{"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 | 布尔型 | 找到后是否点击, 默认不点击
offsetxy | 0 | 数值型 | 对颜色偏移组的坐标实现再次偏移功能
showlog | "隐藏" | 字符串 | 日志输出显示, 可选 `"显示"`,`"显示找到"`,`"显示没找到"`,`"隐藏"`,`"show"`, `"showfind"`, `"shownofind"`,`"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 设置FindMultiColor默认参数 设置 `"offsetxy":1` 属性或其他数字, 实现偏移坐标再次变动功能, 该属性不支持 zm.FindMultiColorEx 超级多点找色返回所有坐标
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.SetFindPic 设置FindPic默认参数 >>点击查看最新帮助<<
功能说明: 修改 zm.FindPic 超级找图 的默认参数值。
语法格式: 默认值 = zm.SetFindPic(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如 `{"sim":0.9, "showlog":"显示"}` 表示修改相似度默认为0.9, 日志输出默认为显示, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如 `{"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"`, `"showfind"`, `"shownofind"`,`"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毫秒
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.SetFindStr 设置FindStr默认参数 >>点击查看最新帮助<<
功能说明: 修改 zm.FindStr 超级找字 的默认参数值。
语法格式: 默认值 = zm.SetFindStr(属性表)
命令参数: 属性表: 表, 按照指定格式对表中的键值对进行赋值, 例如 `{"sim":0.8, "showlog":"显示"}` 表示修改相似度默认为0.8, 日志输出默认为显示, 更多属性见下面表格
按照指定格式对表中的键值对进行赋值, 例如 `{"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"`, `"showfind"`, `"shownofind"`,`"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毫秒
V4.2042: 日志参数 `showlog` 加入 `["显示找到","显示没找到","showfind","shownofind"]` 选项
命令名称: zm.KeyPress 超级按键 >>点击查看最新帮助<<
功能说明: 按下并弹起一个按键, 可加入随机延时防检测
语法格式: 结果 = zm.KeyPress([对象][按键[, 间隔毫秒[, 随机毫秒]]][, 显示日志][, 输出行号][, 备注])
命令参数: 对象: table, 可选, 把所有参数放入一个table中传入, 若后面跟有其他参数, 则会对应覆盖对象数据, 省略默认为`null`
间隔毫秒: 数值型, 可选, 按下与弹起之间的间隔时间, `-1`表示与自带KeyPress相同, 单位毫秒, 省略默认为`-1`
显示日志: 字符串, 可选, 输出调试日志信息, 支持`["显示","隐藏","show","hide"]`这几个值, 省略默认为”隐藏”
备注: 字符串, 可选, 格式为`"@"`开头后跟内容, 比如`"@拾取屠龙刀"`, 输出调试信息窗口就会增加这条内容, 若连续两个`"@@"`则表示在浮窗中显示信息, 需要开启显示日志才有效
返回值: 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 按下截图键 >>点击查看最新帮助<<
功能说明: 按下截图键自动保存

:::warning

部分设备的截图文件夹位置可能不一致, 请手动截图一次查看截图文件夹路径, 再传入到截图文件夹参数中

:::
语法格式: 结果 = 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(按键字符串[, 间隔毫秒])
命令参数: 按键字符串: 字符串, 待输入的字符串内容, 仅支持小写字母, 数字, 英文标点符号, 不支持大写字母, 中文
返回值: 布尔型: 成功返回`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":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`到`最大下标`。
返回值: 任意类型:返回随机到的数组元素。
脚本例子:
复制代码
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.RndInitSeedNet 初始化随机种子网络版 >>点击查看最新帮助<<
功能说明: 通过网络API获取一个随机种子并初始化, 解决多个模拟器同步启动导致随机结果一致的问题.

:::warning

由于使用了第三方免费网络接口, 不保证此函数的稳定性.

:::
语法格式: 结果 = zm.RndInitSeedNet([接口])
命令参数: 接口: 数值型, 可选, 目前支持取值`1`或`2`, 接口`1`未公开限制情况, 接口`2`大约1000次/天, 省略默认为`1`
返回值: 数值型:返回随机数种子, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

//由于是通过网络获取随机种子, 所以效率较慢, 仅需执行一次即可
If zm.RndInitSeedNet() Then
    TracePrint("随机初始化成功")
End If
备注: V4.2402 初次加入本命令
命令名称: 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`。
返回值: 数值型:返回参数范围的随机整数。
脚本例子:
复制代码
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: 数值型, 横坐标数值, 与坐标数组参数二选一, 详见例子
坐标数组: 表, 由坐标组成的数组, 格式为 `{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(个数[, 随机池[, 模式]])
命令参数: 个数: 数值型, 随机字符个数
模式: 数值型, 可选参数,随机方式, 0为全部随机, 1为不重复字符随机, 2为组合随机; 为了兼容旧版插件, `true`为不重复随机, `false`为全部随机. 省略默认为0
返回值: 字符型:随机到的字符串内容。
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

TracePrint zm.RndStr(5) //随机长度为5的字符串
TracePrint zm.RndStr(6, 2) //随机长度为6的小写字母
TracePrint zm.RndStr(10, 1 + 4, 1) //随机长度为10的不重复数字+大写字母
TracePrint zm.RndStr(10, 1 + 4, 2) //随机结果必定有数字和大写字母组合, 适合生成密码之类的
备注: 调用随机函数前,可用 zm.RndInitSeed 初始化随机种子 运行一次。
V1.1720: 加入命令
V1.1724: 增加随机标点符号。
V1.1802: 修复可选参数无效问题
V4.2434: 增加组合随机模式
命令名称: 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.UUID([格式])
命令参数: 格式: 数值型, 可选, 表示返回大小写格式, 0为小写, 1为大写, 省略默认为0
返回值: 字符串: 返回36位长度的UUID字符串, 失败返回`null`
脚本例子:
复制代码
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次

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