手指精灵脚本函数帮助

函数列表

用户参数接口USERVAR

addContact

appKill

appRun

appRun(运行并打开指定界面)

appRunning

cloudOcrText

cloudOcrTextDama2

compareColor

compareColorMulti

copyText

copyTextGet

findColorFuzzy

findColorInRegion

findColorInRegionFuzzy

findColorMulti

findColorMultiInRegion

findImageFuzzy

findImageInRegionFuzzy

ftpDownload

ftpUpload

getAppPid

getColor

getColorRGB

getDeviceInfo

getFileInfo

getNetTime

getIPMessage

getRunningAppInfo

getScreenResolution

httpGet

httpGet(下载文件)

httpPost

inputKey

inputText

inputTextClear

inputTextDelete

keepScreen

logDebug

luaStop

memoryRead

memorySearch

memorySearchMulti

memoryWrite

mSleep

notifyMessage

notifyVibrate

notifyVoice

rebootDevice

rotateScreen

runScript

sendMail

setAutoPlayScript

setControlBarPosition

setGPSLocation

snapshotScreen

snapshotRegion

timeSkew

timeSkewStop

touchClick

touchDown

touchHoldClick

touchMove

touchUp

tulingChat

unzip

weiShuJu

weixinFriend

weixinGetChatData

用户参数接口USERVAR

可以让用户输入参数的接口,有text和droplist。请注意以下格式不要随意添加空格!

用户参数静态文本LABEL格式: USERVAR LABEL=显示内容
用户参数text格式: USERVAR 变量名=默认显示值 "参数提示信息"
用户参数DropList输入格式: USERVAR 变量名=DropList{0的提示信息|1的提示信息|2的提示信息...} "参数提示信息"

用户设置好参数后,启动脚本后第一时间手指精灵会自动获取这些参数并且传入脚本,脚本在后面的程序中可以调用。脚本里面获取的都是字符串,如果需要整型用tonumber(str)转成整数。

示例

		定义用户参数
		--静态提示文本
		USERVAR LABEL=你是猪
		--定义用户参数msgstr1让用户可以直接输入字符串,在后面可以直接调用msgstr1。
		USERVAR msgstr1=你是猪 "输入喊话内容"
		--定义用户参数timemax让用户可以直接输入字符串,后面调用时因为需要整型,必须用tonumber转换。
		USERVAR timemax=30 "喊话间隔时间(秒)"
		--用户参数DropList,用户选择“随机”,hhorder=“0”,用户选择“按顺序”,hhorder=“1”
		USERVAR hhorder=DropList{随机|按顺序} "选择喊话顺序"
		function main()
            mSleep(2000);
            --获取并且转成整数
            local timemaxvalue=tonumber(timemax);
            notifyMessage(timemax..":"..msgstr1..":"..hhorder);
            --logDebug(timemax..":"..msgstr1..":"..hhorder);
            mSleep(2000);
		end
		选择脚本时会显示
		

		更多选项时比如:
		USERVAR hhorder=DropList{随机|按顺序|aaa|bbb|ccc}
		选随机 hhorder ="0";
		选按顺序 hhorder="1";
		选aaa hhorder="2";
		选bbb hhorder="3";
		选ccc hhorder="4";
		以此类推
		

addContact

往通讯录中添加人名和手机号码

参数

参数1(String):人名

参数2(String):手机号码

返回值

示例

            -- 添加人名电话号码到通讯录里面
            function main()
                mSleep(2000);
                addContact("高圆圆", 13688888888);
                mSleep(2000);
            end
        

appKill

关闭指定包名的app

参数

参数1:包名

返回值

示例

		
		appKill("com.xxx.xxx");
		

appRun

运行指定包名的app

参数

参数1:包名

返回值

示例

		
		appRun("com.xxx.xxx");
		

appRun(运行并打开指定页面)

运行指定包名的app,并且进入指定页面

参数

参数1:包名
参数2:页面名

返回值

示例

		直接打开微信朋友圈
		appRun("com.tencent.mm", ".plugin.sns.ui.SnsTimeLineUI");
		

appRunning

指定包名的app是否在前台运行

参数

参数1:包名

返回值

整数:1 正在运行,0 没有运行

示例

		
		res=appRunning("com.xxx.xxx");
		

cloudOcrText

截取屏幕发送到haoi23远程答题平台进行图片识别

参数

参数1: 密码串(www.haoi23.net)注册并登录后会员中心获取
参数2: 题目类型(在www.haoi123.net首页查看)
参数3: 待识别图片域左上角X坐标
参数4: 待识别图片域左上角Y坐标
参数5: 待识别图片域右下角X坐标
参数6: 待识别图片域右下角Y坐标
参数7:超时时间范围为20-600
参数8:远程答题平台类型(0:好爱旧接口9月1日后无法使用; 1:好爱接口, 2:小爱接口)

返回值

第一个返回值为图片识别得到的答案,失败返回空;第二个返回值为失败时的错误信息

示例

		
		code, err=cloudOcrText("name|pass12313213213", "1004", 100, 100, 200, 200, 600, 1);
		if code=="" then
		  notifyMessage(err);
		else
		  notifyMessage("识别成功:"..code);
		end
		

cloudOcrTextDama2

截取屏幕发送到dama2远程答题平台进行图片识别
如果遇到“用户无权使用该APP”的错误,请到打码兔用户后台添加软件白名单,允许使用手指精灵

参数

参数1(String): 打码兔用户名(www.dama2.com注册)
参数2(String):打码兔用户密码
参数3(number): 题目类型(在http://wiki.dama2.com/index.php?n=ApiDoc.Pricedesc查看),如果不知道可以填200
参数4(number): 待识别图片域左上角X坐标
参数5(number): 待识别图片域左上角Y坐标
参数6(number): 待识别图片域右下角X坐标
参数7(number): 待识别图片域右下角Y坐标

返回值

第一个返回值为图片识别得到的答案,失败返回空;第二个返回值为失败时的错误信息

示例

		
		code, err=cloudOcrTextDama2("用户名", "密码", 200, 100, 100, 200, 200);
		if code=="" then
		  notifyMessage(err);
		else
		  notifyMessage("识别成功:"..code);
		end
		

compareColor

屏幕上某一点的颜色值跟指定的颜色值进行比较,如果相似返回1,否则返回-1

参数

参数1: 屏幕坐标x
参数2: 屏幕坐标y
参数3: 对比的颜色值
参数4: 相似度(0~100,但是不要设置成100,一般为60~90)

返回值

如果相似返回 1, 否则返回 -1

示例

		下面代码是把屏幕上180,125这个点的颜色跟0xffffff比较,相似度80。如果相似返回1,否则返回-1
		res=compareColor(180, 125, 0xffffff, 80);

copyText

复制内容到系统剪切板

参数

参数1: 复制到剪切板的字符串

返回值

示例

		copyText("这是复制的文本");

copyTextGet

获取系统剪切板内容

参数

返回值

字符串: 系统剪切板内容,没有会返回空字符串

示例

		str=copyTextGet();
		notifyMessage(str);
		

compareColorMulti

屏幕上多点的颜色值进行比较,如果相似返回1,否则返回-1

参数

参数1: 颜色及坐标数组,格式为 cx1, cy1, c1, cx2, cy2, c2 ....
参数2: 相似度(0~100,但是不要设置成100,一般为60~90)

返回值

如果相似返回 1, 否则返回 -1

示例

		下面代码是同时把71,136跟0xff8e10比较,410,116跟0x6bef21比较,相似度80。如果相似返回1,否则返回-1
		carr={71, 136, 0xff8e10, 410, 116, 0x6bef21};
		res=compareColorMulti(carr, 80);
		

findColorFuzzy

全屏幕搜索指定颜色值,如果找到返回第一个点的坐标,否则返回 -1,-1

参数

参数1: 需要搜索的颜色值
参数2: 相似度(0~100,但是不要设置成100,一般为60~90)

返回值

如果找到,返回第一个点的x,y, 否则返回 -1,-1

示例

		全屏搜索颜色值0xd61018,相似度为90
		x,y=findColorFuzzy(0xd61018, 90);
		

findColorInRegion

指定范围内搜索指定颜色值,如果找到返回第一个点的坐标,否则返回 -1,-1

参数

参数1: 需要搜索的颜色值
参数2: 范围起点x
参数3: 范围起点y
参数4: 范围终点x
参数5: 范围终点y

返回值

如果找到返回第一个点的x,y, 否则返回 -1,-1

示例

		在屏幕0,0到300,300范围内搜索颜色值0xde0c18,相似度95
		x,y=findColorInRegion(0xde0c18, 0, 0, 300, 300);
		

findColorInRegionFuzzy

指定范围内搜索指定颜色值,如果找到返回第一个点的坐标,否则返回 -1,-1

参数

参数1: 需要搜索的颜色值
参数2: 相似度(0~100,但是不要设置成100,一般为60~90)
参数3: 范围起点x
参数4: 范围起点y
参数5: 范围终点x
参数6: 范围终点y

返回值

如果找到返回第一个点的x,y, 否则返回 -1,-1


示例

		在屏幕0,0到300,300范围内搜索颜色值0xde0c18,相似度90
		x,y=findColorInRegionFuzzy(0xde0c18, 90, 0, 0, 300, 300);
		

findColorMulti

全屏搜索指定多个颜色值,如果找到返回第一个点的坐标,否则返回 -1,-1

参数

参数1: 需要搜索的颜色值table 格式为 {点1的颜色, 第二个点相对点1的x偏移, 第二个点相对点1的y偏移, 第二个点颜色 ...}
参数2: 相似度(0~100,但是不要设置成100,一般为60~90)
参数3: 范围起点x
参数4: 范围起点y
参数5: 范围终点x
参数6: 范围终点y

返回值

如果找到返回第一个点的x,y, 否则返回 -1,-1

示例

		在屏幕范围内搜索颜色值 0xff8e10,同时相对这个点(339,-20)处比较颜色0x6bef21,相对这个点(19, 157)处比较颜色 0xffffff, 相似度80
		carr={0xff8e10, 339, -20, 0x6bef21, 19, 157, 0xffffff};
		x, y=findColorMulti(carr, 80);

findColorMultiInRegion

指定范围内搜索指定多个颜色值,如果找到返回第一个点的坐标,否则返回 -1,-1

参数

参数1: 需要搜索的颜色值table 格式为 {点1的颜色, 第二个点相对点1的x偏移, 第二个点相对点1的y偏移, 第二个点颜色 ...}
参数2: 相似度(0~100,但是不要设置成100,一般为60~90)
参数3: 范围起点x
参数4: 范围起点y
参数5: 范围终点x
参数6: 范围终点y

返回值

如果找到返回第一个点的x,y, 否则返回 -1,-1

示例

		在屏幕70,15到700,600范围内搜索颜色值 0xff8e10,同时相对这个点(339,-20)处比较颜色0x6bef21,相对这个点(19, 157)处比较颜色 0xffffff, 相似度80
		carr={0xff8e10, 339, -20, 0x6bef21, 19, 157, 0xffffff};
		x, y=findColorMultiInRegion(carr, 80, 70, 15, 700, 600);
		

findImageFuzzy

全屏搜索图片,图片格式为24位bmp(注:搜索图片是很慢的过程, 搜索的图片处理的尽量小)。支持png图片,完全透明的像素点(alpha为0)会被忽略。alpha不是0的不会被忽略。透明图片如:

参数

参数1:图片名字
参数2:相似度(0~100,但是不要设置成100,一般为60~90)

返回值

如果找到,返回第一个点的x,y, 否则返回 -1,-1

示例

		全屏搜索test.bmp相似的图片,相似度80。找到返回第一个点的x,y, 否则返回 -1,-1
		x,y=findImageFuzzy("mnt/sdcard/Handjingling/test.bmp", 80);
		-- 也可以使用png图片,完全透明的像素点(alpha为0)会忽略
		-- x,y=findImageFuzzy("mnt/sdcard/Handjingling/test.png", 80);
		if x>-1 then
			notifyMessage("找到了图片 "..x..":"..y);
		else
			notifyMessage("没找到图片 "..x..":"..y);
		end
		或者把图片放入sd卡Handjingling/images/ 文件夹下然后
		x,y=findImageFuzzy("test.bmp", 80);
		if x>-1 then
			notifyMessage("找到了图片 "..x..":"..y);
		else
			notifyMessage("没找到图片 "..x..":"..y);
		end
		

findImageInRegionFuzzy

指定范围内搜索图片,图片格式为24位bmp。支持png图片,完全透明的像素点(alpha为0)会被忽略。alpha不是0的不会被忽略。透明图片如:

参数

参数1: 图片名字
参数2: 相似度(0~100,但是不要设置成100,一般为60~90)
参数3: 范围起点x
参数4: 范围起点y
参数5: 范围终点x
参数6: 范围终点y

返回值

如果找到,返回第一个点的x,y, 否则返回 -1,-1

示例

		在屏幕18,25到120,370范围内搜索颜色值test2.bmp,相似度为80
		x,y=findImageInRegionFuzzy("mnt/sdcard/Handjingling/test.bmp", 80, 18, 25, 120, 370);
		-- 也可以使用png图片,完全透明的像素点(alpha为0)会忽略
		-- x,y=findImageInRegionFuzzy("mnt/sdcard/Handjingling/test.png", 80, 18, 25, 120, 370);
		if x>-1 then
			notifyMessage("找到了图片 "..x..":"..y);
		else
			notifyMessage("没找到图片 "..x..":"..y);
		end
		或者把图片放入sd卡Handjingling/images/ 文件夹下然后
		x,y=findImageInRegionFuzzy("test.bmp", 80, 18, 25, 120, 370);
		if x>-1 then
			notifyMessage("找到了图片 "..x..":"..y);
		else
			notifyMessage("没找到图片 "..x..":"..y);
		end
		

ftpDownload

从ftp服务器下载文件到本地

参数

参数1(String):ftp服务器地址
参数2(Number):端口号
参数3(String):用户名
参数4(String):密码
参数5(String):ftp服务器下载的文件,相对路径
参数6(String):保存在本地的路径

返回值(Number)

成功返回1 失败返回-1

匿名帐号密码为 帐号:"anonymous", 密码:"ftp4j"

示例

		从ftp服务器192.168.0.66下载文件"/scripts/b.lua",保存到sd卡"/mnt/sdcard/Handjingling/httpGetd.lua"
		res=ftpDownload("192.168.0.66", 1680, "user", "111111", "/scripts/b.lua", "/mnt/sdcard/Handjingling/httpGetd.lua");
		if res==1 then
			notifyMessage("下载成功");
		else
			notifyMessage("下载失败");
		end
		

ftpUpload

把本地文件上传到ftp服务器

参数

参数1(String):ftp服务器地址
参数2(Number):端口号
参数3(String):用户名
参数4(String):密码
参数5(String):需要上传的本地文件的路径
参数6(String):保存在ftp服务器的路径

返回值(Number)

成功返回1 失败返回-1

匿名帐号密码为 帐号:"anonymous", 密码:"ftp4j"

示例

		上传文件"/mnt/sdcard/Handjingling/httpGet.lua"到ftp服务器192.168.0.66,保存为"/scripts/b.lua"
		local res=ftpUpload("192.168.0.66", 1680, "user", "111111", "/mnt/sdcard/Handjingling/httpGet.lua", "/scripts/b.lua");
		if res==1 then
			notifyMessage("上传成功");
		else
			notifyMessage("上传失败");
		end
		

getAppPid

通过包名获取进程id

参数

参数1(String): app包名

返回值(Number)

进程id

示例

		获取包名为"com.jbbl.memorytest"的进程id
		local pid=getAppPid("com.jbbl.memorytest");

getColor

获取屏幕上指定点的颜色值(整型)

参数

参数1: 屏幕坐标x
参数2: 屏幕坐标y

返回值

指定点的颜色整数

示例

		获取屏幕71,136点的颜色值,注意返回值是整数
		color=getColor(71, 136);

getColorRGB

获取屏幕上指定点的颜色值的RGB

参数

参数1: 屏幕坐标x
参数2: 屏幕坐标y

返回值

指定点的颜色RGB三个整数

示例

		获取屏幕71,136点的颜色值,注意返回值是三个整数
		r,g,b=getColorRGB(71, 136);

getDeviceInfo

获取设备信息

参数

返回值

返回值1(String):手指精灵的设备机器码

返回值2(String):设备IMEI

返回值3(String):设备MAC地址

返回值4(String):设备IP地址

示例

		function main()
			mSleep(2000);
			local regcode, imei, mac, ip =  getDeviceInfo();
			notifyMessage("regcode is:"..regcode.."  imei is:"..imei.."  mac is:"..mac.." ip is:"..ip);
			mSleep(2000);
		end
		

getFileInfo

获取文件的大小和修改时间

参数

参数1(String):文件的全路径

返回值

返回值1(Number):文件的大小,如果文件不存在返回-1

返回值2(Number):文件的修改时间(10位的毫秒数)

示例

		--获取test.lua的文件大小和修改时间
		function main()
			mSleep(2000);
			local size, mtime =  getFileInfo("/mnt/sdcard/Handjingling/scripts/test.lua");
			notifyMessage("size is:"..size.."  mtime is:"..mtime);
			mSleep(2000);
		end
		

getNetTime

获取网络时间

参数

返回值

成功返回网络时间(10位数字),失败返回0

示例

		ntime=getNetTime();
		if ntime>0 then 
			notifyMessage("系统时间是:"..ntime);
		end

		

getRunningAppInfo

获取当前运行app的 pid,包名,和活动名

参数

返回值

返回值1(number):app的进程id

返回值2(String):app的包名

返回值3(String):app的活动名

示例


		function main()
			mSleep(1000);
			while true do
				pid, pack, act= getRunningAppInfo();
				notifyMessage("正在运行的app pid :"..pid.." 包名:"..pack.." 活动名:"..act);
				mSleep(1500);
			end
			mSleep(2000);
		end
		
		

getScreenResolution

获取屏幕尺寸

参数

返回值

屏幕宽高

示例

		获取屏幕的高宽
		w,h=getScreenResolution();

inputKey

模拟单个字符,包括系统按键,类似 os.execute("input keyevent 3")

参数

参数1: 发送的字符

返回值

示例

		向当前文本发送home键
		inputKey("3");
		

常用的 HOME:"3",

更多按键查询 http://www.handjingling.com/forum.php?mod=viewthread&tid=562&extra=page%3D1

inputText

向选中的文本发送文字,android发送中文必须到设置里面安装中文接口

参数

参数1: 发送的字符串

返回值

示例

		向当前文本发送“哈哈哈1243”
		str="哈哈哈1243";
		inputText(str);

httpGet

获取网页内容,默认超时15秒

参数

网页url,格式为http://www.handjingling.com

返回值

网页内容字符串,失败返回空

示例

		-- 从手指精灵网站获取时间
		res=httpGet("http://www.handjingling.com/app/servertime.php");
		if res == "" then
			notifyMessage("请求失败");
		else
			notifyMessage("请求结果是:"..res);
		end
		

httpGet(下载文件)

下载文件并保存到指定文件夹

参数

参数1(String):网页url,格式为http://www.handjingling.com/xxx
参数2(String):sd卡路径,比如:/mnt/sdcard/Handjingling/test.txt
参数3(Number):超时秒,一般设置60

返回值

成功返回字符串"1",失败返回""

示例

		下载log.txt文件并保存到本地
		res=httpGet("http://www.handjingling.com/app/test/log.txt", "/mnt/sdcard/Handjingling/log.txt", 60);
		if res == "" then
			notifyMessage("下载失败");
		else
			notifyMessage("下载成功:"..res);
		end
		

httpPost

httpPost基本方法

参数

参数1(Table):post参数的table

返回值

成功返回网页信息,失败返回空

示例

		--[START]
		--[TYPE]:1
		--[APPVERSION]:1.0
		--[DESCRIPTION]:
		--[END]
		--以上部分请不要随意修改!

		function main()
			 mSleep(1000);
			 local postTable = {uid="11e哈哈e22",ver="kkk"};
			 --测试网站 
			 local res = httpPost("http://www.handjingling.com/app/test/httpPost.php", postTable);
			 notifyMessage("res is:"..res);
			 mSleep(2000);
		end
		
		

inputTextClear

清除光标前文本(android最好设置里面安装中文接口,否则很慢)

参数

参数1: 清除文本的个数

返回值

示例

		清除光标前10个文字,如果此个数可以比文本框里面实际文本个数多
		inputTextClear(10);

inputTextDelete

删除光标后面的文本

参数

参数1: 删除文本的个数

返回值

示例

		删除当前光标后10个文字,如果此个数可以比文本框里面实际文本个数多
		inputTextDelete(10);

rebootDevice

重启设备

参数

返回值

示例


		function main()
			mSleep(2000);
			rebootDevice();
			mSleep(2000);

		end
				
		

setAutoPlayScript

设置自动运行脚本, 设置完后每次启动手指精灵会自动运行此脚本

参数

参数1(String):自动运行的脚本名字

返回值

示例


		function main()
			mSleep(2000);
			setAutoPlayScript("xxx.lua");
			mSleep(2000);

		end
				
		

setControlBarPosition

修改控制条的位置

参数

参数1(Number):控制条位置x

参数2(Number):控制条位置y

返回值

示例


		function main()
			mSleep(2000);
			setControlBarPosition(300, 300)
			mSleep(2000);

		end
				
		

sendMail

发送邮件,邮箱必须开启pop3和smtp功能才能使用

参数

参数1(字符串): 邮件服务器地址,如:smtp.sina.cn 或者 smtp.qq.com

参数2(字符串): 邮件服务器端口,一般是 25

参数3(字符串): 发件帐号

参数4(字符串): 发件密码

参数5(字符串): 发件邮箱地址

参数6(字符串): 接受邮箱地址

参数7(字符串): 邮件标题

参数8(字符串): 邮件内容

返回值

返回值1(number):1 成功, -1 失败

示例


		用sina邮箱给自己发邮件

		function main()
			mSleep(1000);
			local res = sendMail("smtp.sina.cn", "25", "aiseven888@sina.cn", "xxxxxx", "aiseven888@sina.cn", "aiseven888@sina.cn", "哈哈", "hehehe");
			if res == -1 then
				notifyMessage("发送失败");
			else
				notifyMessage("发送成功");
			end
			mSleep(2000);
		end
				
		

keepScreen

开启/关闭保持屏幕。开启时会获取一次屏幕图像数据,之后找图找色函数不会在重新获取屏幕图像数据。开启后请注意必须关闭

参数

参数1: true开启保持屏幕,false关闭保持屏幕

返回值

示例

		下面代码是开启保持屏幕后截图两次,即使实际屏幕变了,但是截图会是一样
		keepScreen(true);
		snapshotScreen("/sdcard/Handjingling/img/0.bmp");
		notifyMessage("第一个图完成");
		--手动切换下屏幕
		mSleep(4000);
		snapshotScreen("/sdcard/Handjingling/img/1.bmp");
		notifyMessage("第二个图完成");
		keepScreen(false); --记着关闭
		
		

logDebug

保存信息到日志文件log.txt
log.txt在sd卡文件的 sd卡的应用默认目录下

参数

参数1: 字符串信息

返回值

示例

		保存文本到log.txt
		logDebug("哈哈哈");

luaStop

结束正在运行的脚本

参数

返回值

示例

		luaStop();

memoryRead

获取进程指定地址的内存,返回整数

参数

参数1(Number): 通过getAppPid获取的进程id
参数2(Number):内存地址,整数10进制16进制都可
参数3(Number):读取内存的类型 1 byte, 2 word, 4 dword

返回值(Number)

获取的内容

示例

		读取并且修改包名是"com.jbbl.memorytest",地址是0x80A04004的内容
		function main()
		mSleep(2000);
		--获取进程id
		local pid=getAppPid("com.jbbl.memorytest");
		--读取内容
		local res=memoryRead(pid, 0x80A04004, 4);
		notifyMessage("read res is:"..res);
		--更改此地址内容为132
		memoryWrite(pid, 0x80A04004, 132, 4);
		mSleep(1000);
		end

memorySearch

搜索内存,返回搜索到的个数和最多10000个内存地址

参数

参数1(Number): 通过getAppPid获取的进程id
参数2(Number):搜索的数值
参数3(Number):0或者不放,表示新的搜索,1表示在上次搜索的基础上继续搜索

返回值

返回值1(Number):搜索到的个数
返回值2(数组):地址数组,最多100个

示例

		搜索包名为"com.jbbl.memorytest",数值为:1193046的内存个数
		--获取进程id
		local pid=getAppPid("com.jbbl.memorytest");
		notifyMessage("进程id:"..pid);
		mSleep(1000);
		--进行一次新的搜索,搜索的数值为1193046
		local count, arr = memorySearch(pid, 1193046);
		if count>0 then
			notifyMessage("搜索个数:"..count.." 第一个数值是:"..arr[1]);
		end
		mSleep(2000);
		

memorySearchMulti

联合搜索内存,返回搜索到的个数和最多10000个内存地址

参数

参数1(Number): 通过getAppPid获取的进程id
参数2(整数table):搜索的数值数组 格式为 {数值1, 数值2相对数值1的偏移, 数值2, 数值3相对数值1的偏远, 数值3 ...}
参数3(Number):0或者不放,表示新的搜索,1表示在上次搜索的基础上继续搜索

返回值

返回值1(Number):搜索到的个数
返回值2(数组):地址数组,最多100个

示例

		下面的例子是先搜索1193046, 如果找到1193046,再判断此地址+16的位置是否为111111, 如果是表示找到一个
		--获取进程id
		local pid=getAppPid("com.jbbl.memorytest");
		notifyMessage("进程id:"..pid);
		mSleep(1000);
		--进行一次新的搜索联合搜索
		local marr={1193046, 16, 111111};
		--也可以用这个数组找
		--local marr={111111, -16, 1193046};
		local count, arr2 = memorySearchMulti(pid, marr);
		if count>0 then
			notifyMessage("联合搜索结果为:"..count.." 第一个数值是:"..arr2[1]);
		else
			notifyMessage("联合搜索失败 个数为:"..count);
			mSleep(2000);
			luaStop();
		end
		

memoryWrite

修改指定地址的数值

参数

参数1(Number): 通过getAppPid获取的进程id
参数2(Number):内存地址,整数10进制16进制都可
参数3(Number):需要修改的内容,整数10进制16进制都可
参数4(Number):修改内存的类型 1 byte, 2 word, 4 dword

返回值

示例

		读取并且修改包名是"com.jbbl.memorytest",地址是0x80A04004的内容
		function main()
		mSleep(2000);
		--获取进程id
		local pid=getAppPid("com.jbbl.memorytest");
		--读取内容
		local res=memoryRead(pid, 0x80A04004, 4);
		notifyMessage("read res is:"..res);
		--更改此地址内容为132
		memoryWrite(pid, 0x80A04004, 132, 4);
		mSleep(1000);
		end
		

mSleep

延时

参数

参数1: 毫秒数

返回值

示例

		延时一秒
		mSleep(1000);
		

notifyMessage

播放一个提示信息

参数

参数1: 提示信息

返回值

示例

		在屏幕上播放一个提示信息
		str="调试信息";
		notifyMessage(str);

notifyVibrate

发出一个震动提示,手机专用函数

参数

返回值

示例

		发出一个震动提示
		notifyVibrate();

notifyVoice

发出一个默认声音提示或者自定义声音提示

参数

无 或者 声音文件的全路径

返回值

示例

		发出一个声音默认的声音提示
		notifyVoice();
		或者 播放自定义的声音
		notifyVoice("/mnt/sdcard/Handjingling/test.wav");
		

runScript

运行另一个脚本或者重新运行当前脚本

参数

参数1: 脚本名字,比如xxx.lua, 如果为空,表示重新运行当前脚本
参数2: 0或者不填 运行脚本的时候会到桌面再运行,1: 不跳到桌面直接运行脚本

返回值

示例

		function main()
			--在main里面添加代码
			mSleep(2000);
			local i = 0;
			while i < 5 do
				mSleep(500);
				notifyMessage("i is :"..i);
				i = i+1;
			end
			--重新运行自己
			runScript();
            --运行名字为xxx.lua的脚本(scripts下面的脚本,只需要文件名)
            --runScript("xxx.lua");
			while i < 20 do
				mSleep(500);
				notifyMessage("i is :"..i);
				i = i+1;
			end
			mSleep(2000);

		end
		

rotateScreen

设置屏幕方向。

参数

参数1: 屏幕方向 0:默认, 90: 顺时针90, 180: 顺时针190, -90: 逆时针90

返回值

示例

		屏幕顺时针转90度
		rotateScreen(90);

setGPSLocation

更改gps位置,支持Android 5.1及以下版本,6.0及以上暂不支持。此函数只需要调用一次即可生效,脚本结束会自动失效。支持微信,探探和陌陌,微信和探探必须在【开发者选项】里面开启【允许模拟位置】

参数

参数1(Number): 经度

参数2(Number): 纬度

返回值

返回值1(Number):1成功, -1失败,可能是由于没有打开【允许模拟位置】

示例

			测试方法:安装微信,发现里面查找附近的人,运行脚本等10-20秒,然后在查找附近的人。点击查看附近人的信息可以验证更改是否成功。
			注意:微信必须开启【允许模拟位置】,请用 appRun("com.tencent.mm");启动微信

			function main()
				mSleep(1000);
				--必须先杀掉微信
				for i=0 , 5 do
					appKill("com.tencent.mm");
					mSleep(100);
				end
				appRun("com.tencent.mm");
				mSleep(3000);
				-- 湖州
				--local res = setGPSLocation(120.0944,30.8989);
				--北京昌平
				local res = setGPSLocation(116.216,40.184);
				mSleep(2000);
				if res == -1 then
					notifyMessage("GPS更改失败");
					mSleep(2000);
				else
					while true do
						mSleep(1000);
						notifyMessage("GPS已经更改");
					end
				
				end
				mSleep(2000);
			end
 
		

snapshotScreen

保存整个屏幕图像到文件。

参数

参数1: 保存图像路径

返回值

示例

snapshotScreen("sdcard/Handjingling/test.bmp");

snapshotRegion

保存指定屏幕范围的图像到文件

参数

参数1: 保存图像路径
参数2: 范围起点x
参数3: 范围起点y
参数4: 范围终点x
参数5: 范围终点y

返回值

示例
在保存屏幕(100,120)到(300, 330)到文件
		snapshotRegion("sdcard/Handjingling/test.bmp", 100, 120, 300, 330);

timeSkew

改变系统时间,脚本停止后会恢复系统时间,但是会有些偏差,请谨慎使用

参数

参数1(Number): 时间倍数(10表示10倍,0.5表示0.5倍)

返回值

示例
把系统运行时间改成10倍
		timeSkew(10);

timeSkewStop

停止改变系统时间

参数

返回值

示例
停止系统时间加速
		timeSkewStop();

touchClick

手指单击,类似鼠标的单击,暂时只支持单点,按下和弹起时间间隔为0.1秒

参数

参数1: 触点序号(默认0,不需要更改)
参数2: 触点x
参数3: 触点y

返回值

示例
在屏幕200,300处点一下
		touchClick(0, 200, 300);

touchHoldClick

手指单击,类似鼠标的单击,暂时只支持单点,自定义按下和弹起时间间隔

参数

参数1: 触点序号(默认0,不需要更改)
参数2: 触点x
参数3: 触点y

返回值

示例
在屏幕200,300处点一下,按下1秒再弹起
		touchHoldClick(0, 200, 300, 1000);

touchDown

手指按下,类似鼠标按下,暂时只支持单点

参数

参数1: 触点序号(默认0,不需要更改)
参数2: 触点x
参数3: 触点y

返回值

示例
在屏幕200,300处按下
		touchDown(0, 200, 300);

touchMove

手指移动,类似鼠标的移动,暂时只支持单点

参数

参数1: 触点序号(默认0,不需要更改)
参数2: 触点x
参数3: 触点y

返回值

示例
在屏幕200,300移动
		touchMove(0, 200, 300);

touchUp

手指弹起手指事件结束,类似鼠标弹起,暂时只支持单点

参数

参数1: 触点序号(默认0,不需要更改)

返回值

示例
手指事件结束
		touchUp(0);
		

tulingChat

图灵机器人聊天

参数

参数1(String): 图灵的key 到http://www.tuling123.com/ 申请帐号,添加机器人,在机器人的接入里面获取

参数2(String): 发送的消息

参数3(String): 图灵需要的发送者名字,可随意写一个字符串

返回值

返回值1(Number): 微数据返回的code,编码到图灵网站查询

返回值2(String): 微数据返回的消息字符串

返回值3(String): 微数据返回的链接字符串

示例

			--
			function main()
				mSleep(2000);
				local code, text, url = tulingChat("key", "你好啊", "haha");
				--100000 是图灵的文字类型, 200000 是图灵的文字加图片类型
				if code == 100000 or code == 200000 then
					notifyMessage("text is:"..text);
				else
					notifyMessage("错误是:"..text);
				end
				mSleep(2000);
			end
        

unzip

解压缩zip文件到指定文件夹,文件夹不存在会自动创建

参数

参数1(String): zip文件全路径

参数2(String): 目标文件全路径

返回值

1 成功, -1 失败

示例

            --
            function main()
                mSleep(1000);
                local res = unzip("/mnt/sdcard/Handjingling/image.zip", "/mnt/sdcard/imagetest/ts/");
                notifyMessage("res is:"..res);
                mSleep(2000);
            end
		

weiShuJu

获取微数据图文数据

参数

参数1(String): 微数据的key 到http://weishuju.handjingling.com/申请

返回值

返回值1(Number): 微数据返回的code,编码到微数据网站查询

返回值2(Number): 微数据返回的数据类型,编码到微数据网站查询

返回值3(String): 微数据返回的文字信息

返回值4(String): 微数据返回的图像在本地保存的路径(已经下载到本地,如果为空表示下载失败)

示例

            --
            function main()
                mSleep(1000);
                local code, type, text, image = weiShuJu("key");
                if code == 0 then
                    notifyMessage("text is:"..text.."  image is:"..image);
                else
                    notifyMessage("请求失败");
                end
				-- 下载完毕调用发送微信朋友圈
				weixinFriend(1, text, image);
				mSleep(3000);
				-- 自己点击发送
				mSleep(2000);
            end
        

weixinFriend

发送微信朋友圈

参数

参数1(Number): 发送微信朋友圈数据类型 1: 图片文字, 2:网页链接

参数2(String): 文字描述

参数3(String): 数据类型1时:图片路径,多个图片用','号隔开,数据类型2时:网页标题

参数4(String): 数据类型2时:网页链接。注意网页链接不能太长,否则会显示不出发送页面,太长的时候请使用短链接

参数5(String): 数据类型2时:网页的小图标链接,必须是http远程链接

返回值

示例

            -- 发图文,复制保存成脚本,保证图片存在
			function main()
				mSleep(2000);
				--发送两张图片
				weixinFriend(1, "哈哈", "/mnt/sdcard/DCIM/Camera/1.jpg,/mnt/sdcard/DCIM/Camera/2.jpg");
				mSleep(5000);
				-- 手动关闭页面,退出编辑
				mSleep(5000);
				weixinFriend(2, "这个小朋友面泥捏的不错,赞!", "最近喜欢上面泥(二)", "http://mp.weixin.qq.com/s/-dvGYS_iAzQV_38u16c3rQ", "http://tb1.bdstatic.com/tb/r/image/2016-08-29/7e80d2852e314092388abe096f18d49c.jpg");
				mSleep(2000);
			end
        

weixinGetChatData

发送微信朋友圈

参数

返回值

返回值1(String): 用户名

返回值2(Number): 消息类型 0: 文字 1:图像 2:网页链接

返回值3(String): 消息内容

示例

            -- 获取微信聊天窗口的用户名,最后一条消息类型和消息内容
			function main()
				mSleep(1000);
				while true do
					mSleep(2000);
					local username, type, msg = weixinGetChatData();
					notifyMessage("用户名:"..username.."  最后一条:"..msg.." 类型:"..type);
				end
				mSleep(2000);
			end