设备旋转后元素的坐标系与触摸的坐标系也许会不一样, 本命令将对最后一步得到元素中心坐标做旋转处理, 其他坐标例如范围之类不做处理.
当存在传入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 |
x | 数值型 | 可选, 要转换的x坐标, 必须与y坐标一起填写, 支持任意数量坐标 |
yx | 数值型 | 可选, 要转换的y坐标, 必须与x坐标一起填写, 支持任意数量坐标 |
表, 当有转换坐标参数时, 返回转换后的坐标数组
1 | Import "zm.luae" //导入插件,只需执行一次 |
1 | Import "zm.luae" //导入插件,只需执行一次 |
与zm.ElementFindEx 超级查找元素返回全部相比, 仅多了一个找到后立即点击所有元素的功能, 其它都相同, 点击会受zm.SetTap 设置超级点击设置影响, 内置每次点击间隔250毫秒.
text
, resource-id
, class
, package
, content-desc
, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为 And
关系结果 = zm.ElementFindExTap([对象, …][x1,y1,x2,y2,][元素特征, …][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
参数 | 数据类型 | 解释 |
---|---|---|
对象 | 表 | 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 OR 关系, 找到任何一个对象立即返回结果 |
x1 | 数值型 | 可选, 查找范围左上角x, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
y1 | 数值型 | 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
x2 | 数值型 | 可选, 查找范围右下角x, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
y2 | 数值型 | 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
元素特征 | 字符串 | 可选, 抓抓上获取到的元素特征值, 支持 text , resource-id , class , package , content-desc 这5个对应特征值, 可自由填写0到5个元素特征参数, 无顺序要求, 同个对象每个特征之间为 AND 关系, 内部忽略特征名, 只判断特征值, 详见例子 |
指定坐标x | 数值型 | 可选, 直接获取指定坐标上的元素特征串, 省略默认为0, 指定坐标0,0表示不使用本参数 |
指定坐标y | 数值型 | 可选, 直接获取指定坐标上的元素特征串, 省略默认为0, 指定坐标0,0表示不使用本参数 |
是否最终元素 | 布尔型 | 可选, 是否只获取没有子节点的最终元素节点, 省略默认为true, 表示只获取没有子节点的最终元素元素 |
匹配模式 | 数值型 | 可选, 元素特征的匹配模式, -1表示直接比较是否相等的完整匹配模式, -2表示正则匹配是否符合的正则模式, 省略默认为-1 |
超时时间 | 数值型 | 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断 |
表 , 返回找到首个对象的所有元素特征二维表, 没找到返回 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"
代表找到的数量
1 | Import "zm.luae" //导入插件,只需执行一次 |
查找范围
, 指定坐标
, 超时时间
)查找范围
, 超时时间
), (指定坐标
, 元素特征
, 超时时间
), (查找范围
, 元素特征
)超时时间
, 查找范围
), (查找范围
, 超时时间
, 指定坐标
), (指定坐标
, 元素特征
, 查找范围
)OR
关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回text
, resource-id
, class
, package
, content-desc
"微信"
, 那么有可能找到 text
是 微信
的元素, 或者 content-desc
是 微信
的元素.""
, 也会要求找到对应空字符串"微信", "微信"
, 那么查找的时候就会去找元素特征里存在两个 微信
的元素+
或 -
的元素text
, resource-id
, class
, package
, content-desc
, 这5个元素特征串可自由填写任意数量, 且没有顺序要求, 每个特征串之间为 And
关系结果 = zm.ElementFindEx([对象, …][x1,y1,x2,y2,][元素特征, …][指定坐标x,指定坐标y,][是否最终元素,][匹配模式][,超时时间])
参数 | 数据类型 | 解释 |
---|---|---|
对象 | 表 | 可选, 对象是指把查找一个元素用到的参数全部放到数组中, 然后用该数组做对象参数. 若要填写对象参数, 则必须写在最前面, 填写后将忽略除超时参数以外的其他普通参数. 支持多个对象参数, 每个对象为 OR 关系, 找到任何一个对象立即返回结果 |
x1 | 数值型 | 可选, 查找范围左上角x, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
y1 | 数值型 | 可选, 查找范围左上角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
x2 | 数值型 | 可选, 查找范围右下角x, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
y2 | 数值型 | 可选, 查找范围右下角y, 元素节点必须完全在范围内, 不能超出范围, 省略默认为0, 范围0,0,0,0表示全屏 |
元素特征 | 字符串 | 可选, 抓抓上获取到的元素特征值, 支持 text , resource-id , class , package , content-desc 这5个对应特征值, 可自由填写0到5个元素特征参数, 无顺序要求, 同个对象每个特征之间为 AND 关系, 内部忽略特征名, 只判断特征值, 详见例子 |
指定坐标x | 数值型 | 可选, 直接获取指定坐标上的元素特征串, 省略默认为0, 指定坐标0,0表示不使用本参数 |
指定坐标y | 数值型 | 可选, 直接获取指定坐标上的元素特征串, 省略默认为0, 指定坐标0,0表示不使用本参数 |
是否最终元素 | 布尔型 | 可选, 是否只获取没有子节点的最终元素节点, 省略默认为true, 表示只获取没有子节点的最终元素元素 |
匹配模式 | 数值型 | 可选, 元素特征的匹配模式, -1表示直接比较是否相等的完整匹配模式, -2表示正则匹配是否符合的正则模式, 省略默认为-1 |
超时时间 | 数值型 | 可选, 最大查找时间, 如果每个对象内都有超时时间的话, 将仅使用最大的时间做判断 |
表 , 返回找到首个对象的所有元素特征二维表, 没找到返回 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"
代表找到的数量
1 | Import "zm.luae" //导入插件,只需执行一次 |
查找范围
, 指定坐标
, 超时时间
)查找范围
, 超时时间
), (指定坐标
, 元素特征
, 超时时间
), (查找范围
, 元素特征
)超时时间
, 查找范围
), (查找范围
, 超时时间
, 指定坐标
), (指定坐标
, 元素特征
, 查找范围
)OR
关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回text
, resource-id
, class
, package
, content-desc
"微信"
, 那么有可能找到 text
是 微信
的元素, 或者 content-desc
是 微信
的元素.""
, 也会要求找到对应空字符串"微信", "微信"
, 那么查找的时候就会去找元素特征里存在两个 微信
的元素+
或 -
的元素结果 = 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"
代表多个对象情况下找到的那个序号
1 | Import "zm.luae" //导入插件,只需执行一次 |
OR
关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回+
或 -
的元素结果 = 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"
代表多个对象情况下找到的那个序号
1 | Import "zm.luae" //导入插件,只需执行一次 |
OR
关系, 内部依次循环查找每一个对象, 任何一个被找到则立即返回+
或 -
的元素判断两个表的成员与顺序是否相同, 不考虑地址
结果 = zm.TableIsSame(表1, 表2)
参数 | 数据类型 | 解释 |
---|---|---|
表1 | 表 | 第一个表 |
表2 | 表 | 第二个表 |
布尔型, 返回比较结果, 相同返回true, 不同返回false
1 | Import "zm.luae" //导入插件,只需执行一次 |
本地光学文字识别
结果 = Image.OcrText(x1, y1, x2, y2, 语言, 方向)
参数 | 数据类型 | 解释 |
---|---|---|
x1 | 数值型 | 识别区域范围的左上角x坐标,区域范围全为0时表示全屏识别。 |
y1 | 数值型 | 识别区域范围的左上角y坐标,区域范围全为0时表示全屏识别。 |
x2 | 数值型 | 识别区域范围的右下角x坐标,区域范围全为0时表示全屏识别。 |
y2 | 数值型 | 识别区域范围的右下角y坐标,区域范围全为0时表示全屏识别。 |
语言 | 数值型 | 文字语言, 0为汉字或英文数字, 暂不支持其他语言 |
方向 | 数值型 | 旋转方向, 0不旋转, 1逆时针旋转90°, 2顺时针旋转90°, 3旋转180° |
字符串, 返回识别结果
1 | Dim txt = Image.OcrText(206,0,509,60, 0, 0) |
清空相册, 不可恢复, 慎重操作
Image.ClearAlbum()
无
无
1 | //清空相册 |
视频存入相册
Image.SaveVideoToAlbum 视频路径
参数 | 数据类型 | 解释 |
---|---|---|
视频路径 | 字符串 | 要存入相册的视频路径 |
无
1 | //视频存入相册 |
图片存入相册
Image.SnapAndSave 图片路径
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 要存入相册的图片路径 |
无
1 | //图片存入相册 |
截图保存到相册
Image.SnapAndSave x1, y1, x2, y2
参数 | 数据类型 | 解释 |
---|---|---|
x1 | 数值型 | 截图区域范围的左上角x坐标,区域范围全为0时表示全屏截图。 |
y1 | 数值型 | 截图区域范围的左上角y坐标,区域范围全为0时表示全屏截图。 |
x2 | 数值型 | 截图区域范围的右下角x坐标,区域范围全为0时表示全屏截图。 |
y2 | 数值型 | 截图区域范围的右下角y坐标,区域范围全为0时表示全屏截图。 |
无
1 | Image.SnapAndSave(0,0,512,512) |
二维码图片生成
结果 = Image.QrEncode(图片路径, 文本内容, 图片大小)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 二维码图片的路径, 支持jpg/png格式 |
文本内容 | 字符串 | 二维码的文本信息内容 |
图片大小 | 数值型 | 图片大小 |
字符串, 返回解析二维码得到的字符串
1 | Dim Path = "/sdcard/MobileAnjian/code.png" |
二维码图片解析
结果 = Image.QrDecode(图片路径)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 二维码图片的路径, 支持jpg/png格式 |
字符串, 返回解析二维码得到的字符串
1 | Dim Path = "/sdcard/MobileAnjian/code.png" |
获取图片尺寸
结果 = Image.Size(图片路径)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 待获取大小的图片路径 |
表, 返回图片的大小, 格式{宽, 高}
1 | Dim Path = "/sdcard/MobileAnjian/code.png" |
二值化图片区域多点找色
结果 = Image.PicFindMultiColor(图片路径, x1, y1, x2, y2, 第一个点颜色, 偏移颜色组)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 用于查找的图片 |
x1 | 数值型 | 查找区域范围的左上角x坐标,区域范围全为0时表示全屏查找。 |
y1 | 数值型 | 查找区域范围的左上角y坐标,区域范围全为0时表示全屏查找。 |
x2 | 数值型 | 查找区域范围的右下角x坐标,区域范围全为0时表示全屏查找。 |
y2 | 数值型 | 查找区域范围的右下角y坐标,区域范围全为0时表示全屏查找。 |
第一点颜色 | 数值型 | 要查找的参照点颜色, 0为黑色, 255为白色 |
偏移颜色组 | 字符串 | 相对与第一个颜色坐标点的偏移颜色组 |
表, 返回找到的颜色坐标
1 | Dim Path = "/sdcard/MobileAnjian/图片.png" |
保存图像数据为图片
结果 = Image.SavePixelData(图像数据, 保存路径)
参数 | 数据类型 | 解释 |
---|---|---|
图像数据 | 表 | 从屏幕或图片中获取的图像数据 |
保存路径 | 字符串 | 要保存的图片路径 |
无
1 | Dim Path = "/sdcard/MobileAnjian/保存.png" |
图片顺时针旋转
结果 = Image.SetRotation(图片路径, 角度)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 要处理的图片路径 |
角度 | 数值型 | 顺时针角度, 仅支持 90 / 180 / 270 |
三维数组 ,返回所有点的颜色并存放在三维数组中,格式为(X坐标,Y坐标,RGB分量) ,详见例子。
1 | Dim Path = "/sdcard/Pictures/1.png" |
屏幕二值化
结果 = Image.BinaryzationImg(图片路径, 阈值)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 要获取数据的图片路径 |
阈值 | 数值型 | 二值化阈值, 范围 0 - 255, 作为图像二值化的参照值 |
三维数组 ,返回范围内所有点的颜色并存放在三维数组中,格式为(X坐标,Y坐标,RGB分量) ,详见例子。
1 | Dim Path = "/sdcard/MobileAnjian/code.png" |
屏幕二值化
结果 = Image.Binaryzation(x1, y1, x2, y2, 阈值)
参数 | 数据类型 | 解释 |
---|---|---|
x1 | 数值型 | 范围的左上角x坐标, 范围0,0,0,0表示全屏 |
y1 | 数值型 | 范围的左上角y坐标, 范围0,0,0,0表示全屏 |
x2 | 数值型 | 范围的右下角x坐标, 范围0,0,0,0表示全屏 |
y2 | 数值型 | 范围的右下角y坐标, 范围0,0,0,0表示全屏 |
阈值 | 数值型 | 二值化阈值, 范围 0 - 255, 作为图像二值化的参照值 |
三维数组 ,返回范围内所有点的颜色并存放在三维数组中,格式为(X坐标,Y坐标,RGB分量) ,详见例子。
1 | Dim value = 150 |
获取图片图像数据
结果 = Image.GetPicData(图片路径)
参数 | 数据类型 | 解释 |
---|---|---|
图片路径 | 字符串 | 要获取数据的图片路径 |
三维数组 ,返回范围内所有点的颜色并存放在三维数组中,格式为(X坐标,Y坐标,RGB分量) ,详见例子。
1 | Dim Path = "/sdcard/MobileAnjian/图片.png" |