@xxtouch
2017-12-07T02:02:39.000000Z
字数 10494
阅读 3836
声明
已经保持 = screen.is_keeped()
参数及返回值
- 已经保持
- 布尔型,返回 screen.keep 函数的调用状态
true 屏幕已经保持
false 屏幕未保持
示例
if screen.is_keeped() then
-- 屏幕已保持
else
-- 屏幕未保持
end
声明
横坐标, 纵坐标 = screen.find_color(颜色 [, 相似度, 左, 上, 右, 下 ])
参数及返回值
- 颜色
整数型,代表需要搜索的颜色- 相似度
整数型,可选参数,代表需要搜索的颜色的相似度,取值范围 1~100,默认 100- 左, 上, 右, 下
整数型,可选参数,代表搜索区域,默认 全屏- 横坐标, 纵坐标
整数型,返回匹配色的坐标,搜索失败返回 -1, -1
说明
使用相似度模式查找,获取区域中第一个匹配色的位置
示例
x, y = screen.find_color(0xffffff, 90, 0, 0, 100, 200)
if x~=-1 and y~=-1 then
sys.alert("在范围内找到一个与白色相似度在 90% 以上的点")
end
注:上述代码中使用了非本章函数 sys.alert
声明
横坐标, 纵坐标 = screen.find_color({颜色, 色偏} [, 左, 上, 右, 下 ])
参数及返回值
- 颜色
整数型,代表需要搜索的颜色- 色偏
整数型,需要搜索的颜色的最大色偏- 左, 上, 右, 下
整数型,可选参数,代表搜索区域,默认 全屏- 横坐标, 纵坐标
整数型,返回匹配色的坐标,搜索失败返回 -1, -1
说明
使用色偏模式查找,获取区域中第一个匹配色的位置
示例
x, y = screen.find_color({0xffffff, 0x101020}, 0, 0, 100, 200)
if x~=-1 and y~=-1 then
sys.alert("在范围内找到一个白色色偏在 0x101020 以内的点")
end
注:上述代码中使用了非本章函数 sys.alert
声明
tid = thread.timer_start(timeout, task [, error_callback ])
参数及返回值
- timeout
实数型,计时器超时时间,单位:秒- task
函数型,这个函数将加入任务队列- error_callback
函数型,错误回调,当执行任务时发生异常,则会回调这个函数并不再抛出,可选参数,默认在异常时抛出错误- tid
整数型,任务 id,这个 id 可用于结束或是等待一个任务
说明
开始一个指定时间的计时器,超时则会将任务派发到队列中
示例
本章最后
声明
thread.timer_stop(tid)
参数及返回值
- tid
整数型,任务 id,这个 id 可用于结束或是等待一个任务
说明
终止一项计时器任务,不管它是否已经派发,是否已经完成
示例
本章最后
声明
基址 = app.mem_base_address(应用程序包名)
参数及返回值
- 应用程序包名
文本型,需要获取基址的应用的 bundle identifier(应用包名,可在 XXT 应用程序--更多--应用列表 中查看)- 基址
整数型,返回当前正在运行的这个应用的基址,程序不在运行返回 0
说明
获取某个正在运行的应用的基址
32 位应用程序上的地址需要 +1
使用该函数可能导致严重后果(包括但不限于应用卡死崩溃、系统崩溃、脚本停止、账号被封、被请喝茶)
不得将此函数用于非法用途,使用则代表同意
示例
ba = app.mem_base_address("com.xxx.xxx")
声明
搜索结果数组 = app.mem_find(应用程序包名, 新一轮搜索, 搜索结构, 数据类型 [, 最大返回个数 ])
参数及返回值
- 应用程序包名
文本型,需要进行内存搜索的应用的 bundle identifier(应用包名,可在 XXT 应用程序--更多--应用列表 中查看)- 新一轮搜索
布尔型,是否开始一次全新的搜索(后续搜索可以用 false)- 搜索结构
表型,第一个值是需要搜索的值,然后后面的依次是相对于第一个值的位置以及值,相对位置的值只能是 U8 类型- 数据类型
文本型,代表需要搜索的数据类型
- 类型参考如下
I8: 有符号的8位整数
I16: 有符号的16位整数
I32: 有符号的32位整数
I64: 有符号的64位整数
U8: 无符号的8位整数
U16: 无符号的16位整数
U32: 无符号的32位整数
U64: 无符号的64位整数
F32: 有符号的32位浮点数
F64: 有符号的64位浮点数- 最大返回个数
整数型,可选参数,搜索的最大结果数,默认 4096- 搜索结果数组
表型,返回一个数组,包含有效第一个值的地址的集合,最多有参数5指定的那么多个
说明
这个函数仅仅支持 32 位应用
从内存中搜索指定指定结构的数据所在的位置
使用该函数可能导致严重后果(包括但不限于应用卡死崩溃、系统崩溃、脚本停止、账号被封、被请喝茶)
不得将此函数用于非法用途,使用则代表同意
示例
-- 搜索过程为先搜素100,如果该内存地址+4的位置为200且-8的位置为30,则为一个有效地址
array = app.mem_find("com.xxx.xxx", true, {100, 4, 200, -8, 30}, "I32")
声明
数据值 = app.mem_read(应用程序包名, 内存地址, 数据类型)
参数及返回值
- 应用程序包名
文本型,需要进行内存读取的应用的 bundle identifier(应用包名,可在 XXT 应用程序--更多--应用列表 中查看)- 内存地址
整数型,需要读取的内存地址- 数据类型
文本型,代表需要读取的数据类型
- 类型参考如下
I8: 有符号的8位整数
I16: 有符号的16位整数
I32: 有符号的32位整数
I64: 有符号的64位整数
U8: 无符号的8位整数
U16: 无符号的16位整数
U32: 无符号的32位整数
U64: 无符号的64位整数
F32: 有符号的32位浮点数
F64: 有符号的64位浮点数- 数据值
字符串型 | nil,成功返回数据,失败返回 nil
说明
这个函数仅仅支持 32 位应用
从指定应用中读取指定内存地址的数据
使用该函数可能导致严重后果(包括但不限于应用卡死崩溃、系统崩溃、脚本停止、账号被封、被请喝茶)
不得将此函数用于非法用途,使用则代表同意
示例
-- 读取包名为com.xxx.xxx的应用中, 内存地址为0x1000000处的有符号的32位整数
data = app.mem_read("com.xxx.xxx", 0x1000000, "I32")
声明
写入成败 = app.mem_write(应用程序包名, 内存地址, 值, 数据类型)
参数及返回值
- 应用程序包名
文本型,需要进行内存写入的应用的 bundle identifier(应用包名,可在 XXT 应用程序--更多--应用列表 中查看)- 内存地址
整数型,需要写入的内存地址- 值
整数型,需要写入的值- 数据类型
文本型,代表需要写入的数据类型
- 类型参考如下
I8: 有符号的8位整数
I16: 有符号的16位整数
I32: 有符号的32位整数
I64: 有符号的64位整数
U8: 无符号的8位整数
U16: 无符号的16位整数
U32: 无符号的32位整数
U64: 无符号的64位整数
F32: 有符号的32位浮点数
F64: 有符号的64位浮点数- 写入成败
布尔型,成功返回 true,失败返回 false
说明
这个函数仅仅支持 32 位应用
写入数据到指定应用的指定内存地址位置
使用该函数可能导致严重后果(包括但不限于应用卡死崩溃、系统崩溃、脚本停止、账号被封、被请喝茶)
不得将此函数用于非法用途,使用则代表同意
示例
-- 将无符号32位整数99999写入到包名为com.xxx.xxx的应用内存地址为0x1000000处
flag = app.mem_write("com.xxx.xxx", 0x1000000, 99999, "U32")
声明
{sec, usec} = sys.time_of_day()
参数及返回值
- sec
整数型, 代表秒级时间戳- usec
整数型, 代表秒级时间戳过后的微秒数
说明
获取微秒级时间信息
示例
local tod = sys.time_of_day()
print("timestamp: "..tod.sec..string.format(".%06d", tod.usec))
-
声明
clear.memory([force])
参数及返回值
- force
布尔型,可选参数,当这个参数为 true 的时候,会强力清理设备内存,可能会导致前台/后台程序崩溃退出,默认 false
说明
清理系统内存,此函数会阻塞脚本所有线程,直到清理完毕
这个函数可能引起整系统崩溃
这个函数已不推荐使用
警告:这个函数调用产生的效果不可逆转
示例
clear.memory(true) -- 强行清理内存,可能导致正在运行着的app闪退
-
声明
device.change_resolution(width, height)
参数及返回值
- width
整数型,表示需要设置的屏宽- height
整数型,表示需要设置的屏高
说明
这个函数不再推荐使用
改变设备分辨率
将分辨率改到大于设备物理分辨率会导致无法取色等问题
这个函数仅支持 iOS8 ,修改不一定会成功,在修改失败的情况下,设备会自动注销多次后恢复初始分辨率
示例
--
-
声明
device.reset_resolution()
参数及返回值
说明
这个函数不再推荐使用
重置设备分辨率为初始状态,用于消除device.change_resolution
对设备带来的影响
这个函数仅支持 iOS8
示例
--
-
声明
md = matrix_dict.new()
参数及返回值
- md
字库对象,新建的一个空字库
说明
新建一个空字库
示例
本章结尾
-
声明
md = matrix_dict.load_file(filename)
参数及返回值
- filename
文本型,包含点阵信息文件的绝对路径- md
字库对象,返回新建的字库
说明
创建一个字库并加载文件中所有的点阵信息
文件中多个点阵信息之间用换行符隔开
示例
本章结尾
-
声明
md = matrix_dict.load_string(str)
参数及返回值
- str
文本型,一个或多个点阵信息,多个点阵信息之间用换行符隔开- md
字库对象,返回新建的字库
说明
创建一个字库并从文本加载点阵信息
示例
md = matrix_dict.load_string([[
411FFF03606C0D81B03606C0D81B03606C0DFFFFFE00$日$0.0.124$20
FFFFFF00618C318630C618FFFFFF8C618C318630C61FC3F800$历$2.0.164$20
00601C0703F1FFE038000603C7E0F80300600C3FFBFF0600C018030060$件$0.1.155$22
0FE1FC300607FFFFC308610C01FC3F8003FE7FCC018333E7E4F0100$邮$0.0.200$23
FFFFFE18430861FFFFF8008010FE365CCE190321E43CFDFF3C$照$2.2.180$20
]])
-
声明
new_md = md:copy()
参数及返回值
- md
字库对象,正在操作的字库- new_md
字库对象,返回新建的字库
说明
创建字库的拷贝
示例
本章结尾
-
声明
mcount = md:add_with_file(filename)
参数及返回值
- md
字库对象,正在操作的字库- filename
文本型,包含点阵信息文件的绝对路径- mcount
整数型,添加成功的点阵数
说明
追加一个文件中所有的点阵信息到字库
文件中多个点阵信息之间用换行符隔开
示例
本章结尾
-
声明
mcount = md:add_with_string(str)
参数及返回值
- md
字库对象,正在操作的字库- str
文本型,一个或多个点阵信息,多个点阵信息之间用换行符隔开- mcount
整数型,添加成功的点阵数
说明
追加点阵信息到字库
示例
本章结尾
-
声明
md:add_with_dict(md2)
参数及返回值
- md
字库对象,正在操作的字库- md2
字库对象,需要追加的字库
说明
追加字库到字库
示例
本章结尾
-
声明
status = md:remove(str)
参数及返回值
- md
字库对象,正在操作的字库- str
文本型,需要删除的点阵
说明
从字库中删除一个点阵
示例
本章结尾
-
-- 示例代码
screen.init_home_on_bottom() -- 初始化旋转坐标系为 home 在下
cl = os.clock()
mdict = matrix_dict.load_file("/User/1.txt") -- 装载字库
mdict:remove("7FE8010627E7C6C300E0F83FFE031801302604008010FFFFFC08010020$附$0.0.157$22") -- 删除字库中 附 字的点阵定义
mdict:add_with_string("7FE8010627E7C6C300E0F83FFE031801302604008010FFFFFC08010020$附$0.0.157$22") -- 添加 附 字点阵定义
img = screen.image(16, 160, 604, 213) -- 抓取一行字的图
img:binaryzation({ -- 对小图片进行二值化处理
{ 0xa9a7af, 0x333333},
{ 0xffffff, 0x333333}
})
str = img:dm_ocr(mdict) -- 使用 mdict 作为字库来识别 img 上的文字
sys.alert("识别结果:"..str.."\n耗时"..((os.clock()-cl) * 1000).."毫秒")
cl = os.clock()
img = screen.image(16, 33, 639, 1135) -- 抓几乎全屏
img:binaryzation({ -- 整图二值化处理
{ 0xa9a7af, 0x333333},
{ 0xffffff, 0x333333}
})
x, y = img:dm_find_str(mdict, 95, "附加") -- 找字
-- 因为从图片中找字是找到字相对于图片的坐标,所以还需要加上图片左上在屏幕的起始坐标,才算字相对于屏幕左上的位置
sys.alert("找到文字\n坐标为:"..tostring(x + 16)..","..tostring(y + 33).."\n耗时"..((os.clock()-cl) * 1000).."毫秒")
--[[
以上测试在 iPhone 5S iOS8 主屏幕,默认壁纸,第一排图标为 邮件、日历、照片、相机、计算器、附加程序、播客 中的任意四个的情况下都能表现良好
以下是本次测试的 /User/1.txt 的完整内容
411FFF03606C0D81B03606C0D81B03606C0DFFFFFE00$日$0.0.124$20
FFFFFF00618C318630C618FFFFFF8C618C318630C61FC3F800$历$2.0.164$20
00601C0703F1FFE038000603C7E0F80300600C3FFBFF0600C018030060$件$0.1.155$22
0FE1FC300607FFFFC308610C01FC3F8003FE7FCC018333E7E4F0100$邮$0.0.200$23
FFFFFE18430861FFFFF8008010FE365CCE190321E43CFDFF3C$照$2.2.180$20
C01FFC0C01803004008010FE1FC0080100200600C010$片$3.0.100$21
0600C01803107FFFC198310600C0001FF318610C2184308610C21FF3FE$相$0.0.167$23
0200C0180337FFFFC19831060040001FF300600C01803007FCFF8$机$0.3.159$22
00C0198238638E3983000600C0180300600C01BFFFFF00C0180300600C018$计$0.0.121$23
060180E079F73E768FD19A3346689D0FA3B5E69CD1DF3FE600C0180200$算$1.0.213$22
00DF9BF342684D09A13FE705C0780B7E7FCF0DE1F42E84DF9BF3006$器$1.1.224$21
0600C0187FFFFE0C41980B318724FC9BE2187FCFF90C23CDEDB4948018030$播$0.0.230$22
1E03C44188711C2607D0ABD13E20C40891162384E098100200780$客$1.2.165$22
7FE8010627E7C6C300E0F83FFE031801302604008010FFFFFC08010020$附$0.0.157$22
4608C31BFFFFFF0CE18C30005FCBF941282504E09C1282504BF97F2004$程$1.0.175$21
1FE3FC4009012024048692F2464C4889312C2704C098120200400$序$2.0.120$22
0C018030061FFF180300600FE1FC000001FE300600C01803007F8$加$1.0.132$21
FFFFFCFF8FF0FE0FC3F0ED3FAFBDF79E71CE3BC7F8FF1F63C070080$多$0.2.372$25
0600C41FFFFFF1EC01F83F1F8303FFFFFDB636C6D8DB1B7FFFFFFFF180300$媒$1.1.301$23
00201C0783E1FFFFFF83380600C01983F07FFFFFFFFF07E0FC198300600C0180$体$0.1.247$23
--]]
注:上述代码中使用了非本章函数 screen.init_home_on_bottom
、screen.image
、:binaryzation
、:dm_ocr
、:dm_find_str
、sys.alert
-
声明
str = img:dm_ocr(md[, sim])
参数及返回值
- img
图片对象,当前操作的图片对象- md
字库对象,需要识别的文字所在字库,关于字库类型的更多信息,参考 matrix_dict(字库对象) 模块- sim
整数型,可选参数,识别精度,取值范围 0~100 ,默认 90- str
文本型,成功返回识别出来的文字;失败返回空字符串
说明
使用大漠点阵字库对图片对象进行文字识别
需要事先对图片进行二值化处理
这个函数已不推荐使用
示例
-
声明
x, y = img:dm_find_str(md, sim, str)
参数及返回值
- img
图片对象,当前操作的图片对象- md
字库对象,需要搜索的文字所在字库,关于字库类型的更多信息,参考 matrix_dict(字库对象) 模块- sim
整数型,可选参数,识别精度,取值范围 0~100 ,默认 90- str
文本型,需要查找的文字- x
整数型,成功则返回字符串所在位置的左上角横坐标,失败返回 -1- y
整数型,成功则返回字符串所在位置的左上角纵坐标,失败返回 -1
说明
使用大漠点阵字库在图片对象找字符串位置
需要事先对图片进行二值化处理
这个函数已不推荐使用
示例
-
声明
local showUI = require("showUI")
confirm, selects = showUI(uitable)
参数及返回值
- uitable
表型,一个描述 UI 结构的表- confirm
布尔型,用户按下确定为 true,用户按下取消或者自动消失为 false- selects
表型,用户对这个 UI 弹窗做出的选择们;如果用户选择取消或超时,则返回空表
说明
简单的方式展现一个 UI
该函数使用 webview 模块实现
showUI 模块详细手册:https://www.zybuluo.com/chendbdb/note/381353
示例
local showUI = require("showUI")
local w, h = screen.size()
local uitable = {
style = 'default',
title = 'Func UI例子',
width = w,
height = h,
config = 'test',
timeout = 60,
button = {'取消','确认'},
views = {
{type='Label',text='Lable空'},
{type='Edit',caption='Edit空'},
{type='EditMulti',text='Edit空'},
{type='ComboBox',item={'ComboBox1','ComboBox2'}},
{type='RadioGroup',item={'RadioGroup1','RadioGroup2'}},
{type='CheckBoxGroup',item={'CheckBoxGroup1','CheckBoxGroup2'}},
{type='Image',src='f.png'},
{type='Image',src = 'http://ttaozi.com/tlog/zfb.gif'},
{type='Image',src='http://stock.591hx.com/images/hnimg/201405/20/65/14829989175739416965.jpg'},
{type='Iframe',src='http://www.baidu.com'},
{type='Label',text='Lable左边\n背景红色',background=0xff0000,color=0xffffff,align='left'},
{type='Label',text='Lable右边\n背景蓝色',background=0x0000ff,color=0xffffff,align='right'},
{type='Label',text='Label展示\n换行1\n换行2\n换行3\n换行4'},
{type='Edit',caption='Edit',text='默认内容',prompt='背景红 字蓝',background=0xff0000,color=0x0000ff},
{type='EditMulti',rows='5',text='换行\n内容',prompt='背景蓝 字红',background=0x0000ff,color=0xff0000},
{type='Label',text='单选菜单',align='right'},
{type='ComboBox',select = 'aaa', item = {'aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii','jjj'},background=0xff0000,color=0xffffff},
{type='Label',text='单选框'},
{type='RadioGroup',select = 'aaa', item = {'aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii','jjj'},background=0xff0000,color=0xffffff},
{type='Label',text='多选框'},
{type='CheckBoxGroup',select = {'aaa','bbb'}, item = {'aaa','bbb','ccc','ddd','eee','fff','ggg','hhh','iii','jjj'},background=0xff0000,color=0xffffff},
{type='Label',text='图片'},
{type='Image',src = 'http://stock.591hx.com/images/hnimg/201405/20/65/14829989175739416965.jpg',background=0xffff00},
}
}
local a,b = showUI(uitable)
if a then
sys.toast("你按下了确定")
sys.alert(table.concat(b,", "))
else
sys.toast("你按下取消")
end
-