没什么说的

UI部分:

界面1:
{综合:{},    其他:{    文字框:{注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",名称:"文字框2",显示内容:"    ",文字大小:0,高度:0,宽度:0},    水平布局:{文字框:{注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",名称:"文字框1",显示内容:"功能选择:",文字大小:0,高度:0,宽度:0},    下拉框:{注释:"初始选项是可选属性,默认值为0。模版中设置了三个选项,您可以根据需要增加或减少,注意各选项之间用逗号分隔。",名称:"功能选择",点击响应:"函数名1",选项:["完整操作","截图",    ],初始选项:0},    },    多选框:{注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",名称:"是否开启日志",提示内容:"是否开启日志",点击响应:"函数名1",选中:false,文字大小:0,高度:0,宽度:0},    },    }

源码

//====================================================================================================================================================================================================
//插件区
//====================================================================================================================================================================================================
Import "shanhai.lua"
Import "zm.luae" //导入插件,只需执行一次
zm.Init  //初始化插件,只需执行一次
//================================================================================================================================================================================================
//声明区
//================================================================================================================================================================================================
//1.--[固有变量]
Dim imgid,strid,intX,intY,t,tt,ttt
dim 本行内容,当前行数,读取结果,当前账号,当前密码,当前状态,账号文件路径,错误代码,起始行数,账号文件内容数组,脚本记录的行数,脚本记录的行内容
Dim 结果,临时变量1,临时变量2,arr,brr,crr,drr,全组,分组
Dim UI界面的参数显示字符串//UI区来获取界面的参数内容并显示出来的变量
Dim 脚本配置() //常见的脚本配置表声明
//2.--[自定义变量]
/*
//声明的例子
Dim 找图_雷电游戏中心图标=array(33,75,391,236,"Attachment:雷电游戏中心.png","202020",0,0.8,100,"雷电游戏中心图标")
Dim 多点找色_商品被选中标志=array(76,96,655,183,"FFFFFF-101010","-3|5|FFFFFF-101010,-4|3|772200-101010,-3|-1|812F02-101010",2,0.85,100,"商品被选中的标志")
Dim 多点bi色_上半部分标志=array("38|232|E1833B-202020,69|242|E1833B-202020,52|263|E1833B-202020,31|250|E1833B-202020",0.9,100,"上半部分标志")
Dim 点击坐标_主界面_测试按钮=array(100,200)
*/
Sub declaration()
End Sub
//================================================================================================================================================================
//配置区 配置下脚本基本的设置 主要是控制脚本的一些功能开启关闭和初始化的一些东西
//================================================================================================================================================================
Sub config()
End Sub
//1.脚本本身相关
脚本配置["作者"] = "点滴积累"
脚本配置["作者QQ"] = "1847154827"
脚本配置["脚本名称"] = "脚本1"
脚本配置["脚本版本"] = "000000"
脚本配置["脚本备注"] = "夜神模拟器 平板 800 600 版本3.7.5"
//2.网络验证相关 一般不开
脚本配置["是否开启简陋网络验证限制"] = false
//3.时间限制相关
脚本配置["是否开启时间限制"] = false
脚本配置["时间限制"] = "2018-06-28 11:00:00"
//4.网络数据库验证相关 相关部分并没写 也用不上
脚本配置["是否开启网络验证限制"] = false
//5.屏幕参数设置
脚本配置["横向分辨率"] = GetScreenX()
脚本配置["纵向分辨率"] = GetScreenY()
脚本配置["DPI"] = Device.GetDPI()
脚本配置["旋转方向"] =GetScreenRotation() //0 没旋转 //1 逆时针旋转90 //2 逆时针旋转180  //3 逆时针旋转270
脚本配置["是否开启缩放"] = false
//6.指定的屏幕参数
脚本配置["是否检查屏幕参数"] = false
脚本配置["规定的横向分辨率"] = 720
脚本配置["规定的纵向分辨率"] = 1280
脚本配置["规定的DPI"] = 200
脚本配置["规定的旋转方向"] =0
//7.常用路径
脚本配置["SD卡目录"] = GetSdcardDir()
脚本配置["按键目录"] = GetTempDir()
//8.设备相关
脚本配置["设备编号"] = GetDeviceID()
//9.日志相关
脚本配置["是否开启日志功能"] = ReadUIConfig("是否开启日志",false)
//10.字库相关
脚本配置["是否开启字库"] = false
脚本配置["字库名"] = "Attachment:test字库0.txt|Attachment:test字库1.txt|Attachment:test字库2.txt"
脚本配置["是否只识别前11行"] = false //关闭的话 会匹配范围内全部行 为true则只会匹配前11行 但是相应速度会很快
//11.控制台的设置
脚本配置["控制台位置"] = 0.3
脚本配置["控制台位置是否锁定"] = 0 //为0表示不锁定 为其他则表示锁定
//================================================================================================================================================================
//初始化区  对手机环境简单的获取设置 和 简单的检测
//================================================================================================================================================================
Call 初始化()
//===========================================================================================================================
//UI区 接收脚本界面参数进行一定的检测 最后输出下获取的参数
//===========================================================================================================================
Sub UI区()
End Sub
UI界面的参数显示字符串 = ""
/*
//普通的参数接收和检测的写法
Dim 测试界面参数1=trim(ReadUIConfig("测试界面参数1",""))
If 测试界面参数1 = "" Then Call show("测试界面参数1:[" & 测试界面参数1 & "] 不能为空")Delay 2000EndScript
Else UI界面的参数显示字符串 = UI界面的参数显示字符串 & "测试界面参数1:[" & 测试界面参数1 & "]\n"
End If
//例子1:输入框普通文件路径的判断的参考例子
dim 文件路径 = ReadUIConfig("文件路径")
//先判断文件是否存在 存在才继续不存在停
结果 = Dir.Exist(文件路径)
If 结果 = 0 Then Call show(文件路径&" 没有找到对应文件")Delay 2000EndScript
Else UI界面的参数显示字符串 = UI界面的参数显示字符串 & "文件路径:["& 文件路径 &"]\n"
End If
//例子2:输入框文件路径的判断是否存在不存在则创建的参考例子(文件夹不行)
//先判断文件是否存在 存在才继续不存在创建
结果 = Dir.Exist(文件路径)
If 结果 = 0 Then Call show(文件路径&" 没有找到对应文件 自动创建")Delay 1000File.Write 文件路径, ""Delay 1000
End If
//创建后再次判断
结果 = Dir.Exist(文件路径)
If 结果 = 0 Then     Call show(文件路径&" 没有找到对应文件 创建失败")Delay 2000EndScript
Else UI界面的参数显示字符串 = UI界面的参数显示字符串 & "文件路径:[" & 文件路径 & "]\n"
End If
*/
For 2show UI界面的参数显示字符串Delay 2000
Next
//===========================================================================================================================
//测试区 要调试的代码在这个地方 最后以endscript结尾
//===========================================================================================================================
Sub test()
End Sub
//测试内容写这里//EndScript
临时变量1 = ReadUIConfig("功能选择")
If 临时变量1 = 0 Then Call 截图(GetSdcardDir())EndScript
ElseIf 临时变量1 = 3 ThenFor 10ShowMessage Sys.GetFront()Delay 2000NextEndScript
End If
//================================================================================================================================================
//准备区 脚本的正式代码之前的一些检测 比如时间检测 网络检测等等
//================================================================================================================================================
Sub 准备区()
End Sub
//1 检测分辨率设置
If 脚本配置["是否检查屏幕参数"] Then Call 检测分辨率()
End If
//2.时间检测
If 脚本配置["是否开启时间限制"] Then     Call 时间限制检测()
End If
//3.简易网络检测 需要调整控制博文的源代码内容
If 脚本配置["是否开启简陋网络验证限制"] Then     Call 简陋网络验证()
End If
//================================================================================================================================================
//正式代码区 脚本的正式代码 完整代码写在这里
//================================================================================================================================================
Sub formal()
End Sub
/*
//例子:遍历读取账号文件内容 并且具备记忆功能 自动从上次的位置开始 不是粗暴的执行一个删除一个账号的处理 而是把记忆写到脚本配置里面
//1.读取账号文件内容
//2.对账号文件做基础的判断和处理 文件是否存在 内容是否对 是否去掉了可能的Bom头和乱码 去掉空行等等 这里粗略的写一写
//3.获取账号文件内容转化为数组
账号文件内容数组 = file.ReadLines(账号文件路径)
//4.读取脚本本身的配置 看看是否记录了上次的行数和对应的行内容 判断里面的内容是否正常 不正常就从第一行开始 正常就按照脚本配置的内容进行
起始行数=0
脚本记录的行数 = ReadConfig("脚本记录的行数")
脚本记录的行内容 = ReadConfig("脚本记录的行内容")
If Trim(脚本记录的行数) = "" or Trim(脚本记录的行内容) = "" Then //如果脚本记录的上次的行数和行内容为空 那么这个记录就不合法 就从第一行开始了起始行数 = 0showmessage "起始记录是第["&cstr(起始行数+1)&"]条"Delay 500
ElseIf not IsNumeric(Trim(脚本记录的行数)) or CInt(Trim(脚本记录的行数)) < 0 Then//脚本记录de阿上次的行数是不是数值 不是则不合法起始行数 = 0showmessage "起始记录是第["&cstr(起始行数+1)&"]条"Delay 500
ElseIf InStr(1, Trim(账号文件内容数组(CInt(脚本记录的行数))), 脚本记录的行内容) < 1 Then//脚本记录的行数和行内容 在现在读取的账号文件的对应行上的内容 是否和脚本记录的行内容一致 不一致证明这个账号文件有变动 就从第一行开始起始行数 = 0showmessage "文件内容变动 起始记录是第{"&(起始行数+1)&"}条 "Delay 500
Else 起始行数 = CInt(Trim(脚本记录的行数))showmessage "起始记录是第["& cstr(脚本记录的行数+1)  &"]条"Delay 1000
End If
Delay 1000
//5.开始读取账号 读取前 把当前行数和行内容写入到脚本配置做记录
For i = 起始行数 To UBOUND(账号文件内容数组) //注意i不是从0开始的 就是说不一定是从第一行开始的Rem 主循环开头把当前行数和行内容写入到脚本配置里面 作为记录当前行数 = i本行内容 = trim(账号文件内容数组(i))WriteConfig "脚本记录的行数", CStr(当前行数), trueWriteConfig "脚本记录的行内容", 本行内容, true //第三个参数必须为true分析出账号和密码 准备给脚本操作提供准备arr = Split(本行内容, "----")当前账号 = Trim(arr(0))当前密码 = Trim(arr(1))If 当前账号 = "" or 当前密码 = "" Then //简单判断下账号密码合法性 不合法就直接跳到下个账号进行操作        goto 主循环结尾End If一些必要的脚本操作 这里暂时用个循环代替    For 10ShowMessage "第[" & CStr(当前行数 + 1) & "]行-账号[" & 当前账号 & "]-密码[" & 当前密码 & "] 进行登录签到."Delay 10ShowMessage "第[" & CStr(当前行数 + 1) & "]行-账号[" & 当前账号 & "]-密码[" & 当前密码 & "] 进行登录签到.."Delay 10ShowMessage "第[" & CStr(当前行数 + 1) & "]行-账号[" & 当前账号 & "]-密码[" & 当前密码 & "] 进行登录签到..."Delay 1000NextRem 主循环结尾Delay 10
Next
//6 整个读取账号循环完毕不要忘记重置下脚本配置让脚本下次从第一行开始
ShowMessage "账号到底 重置记忆"
WriteConfig "脚本记录的行数", "", true
WriteConfig "脚本记录的行内容", "", true //第三个参数必须为true
Delay 2000
*/
//============================================================================================================================================================================
//函数区
//============================================================================================================================================================================
/*
作用:在屏幕上显示信息和脚本内反馈信息 如果参数是数租 那么可以设置屏幕显示位置 如果只想显示屏幕而不要脚本反馈以后再设置
实例:
//call show(array("hello",500,400)) --让显示指定显示的坐标位置显示
//call show("hello") --简单的显示指定内容
*/
Function show(显示数组或显示内容)//检测下参数是否是数组 不是数组是字符串 则直接显示这个字符串即可 是数租表示要指定显示位置
    If IsArray(显示数组或显示内容) Then If IsNumeric(显示数组或显示内容(1)) and IsNumeric(显示数组或显示内容(2)) Then ShowMessage 显示数组或显示内容(0), 500, CInt(显示数组或显示内容(1)), CInt(显示数组或显示内容(2))TracePrint 显示数组或显示内容(0)Else ShowMessage 显示数组或显示内容(0)TracePrint 显示数组或显示内容(0)End IfElse ShowMessage 显示数组或显示内容TracePrint 显示数组或显示内容End If
End Function
/*
作用:封装的自用的找图 参数直接用抓抓生成的参数 除了intX,intY其他的无脑复制 构建成1个数组作为参数
FindPic 0, 0, 0, 0, "Attachment:主界面_登录按钮.png", "000000", 0, 0.9, intX, intY ->抓抓生成的代码->dim 主界面_登录按钮=array(0, 0, 0, 0, "Attachment:Screenshot_2017-11-11-22-39-24.png", "000000", 0, 0.9,100,"主界面_登录按钮")->最后2个参数 一个是给循环找图用的每次找图的间隔时间 单位毫秒,最后一个是这个找的是什么图
参数:一个数组 数组结构如下  前8个元素直接从抓抓复制自动生成的代码 第九个是循环找图专用的 用来规定找图的间隔 单位毫秒 第十个参数 就是图片是找的什么图 找到后会反馈提示
返回值:返回-1表示没找到 大于-1表示找到了 可能是0 1 23456等等 对应不同的图 因为可以同时找多图  找到的坐标回到intX,intY里面了 找到的图片序号是在imgid里面
建:图片名字 和 变量名字最好统一下 免得出现混乱
*/
Function 找图(找图数组)Dim 结果,全组,分组imgid = -1  //重置下这个变量 避免上面找图留下的值结果 = FindPic(找图数组(0),找图数组(1),找图数组(2),找图数组(3),找图数组(4),找图数组(5),找图数组(6),找图数组(7),intX,intY)If 结果 > -1 Then     全组 = Split(找图数组(4), "|") //分析出当前找到的是哪个图片 对应的图片名字        TracePrint "找图:=[" & Replace(全组 (结果),"Attachment:","",1) & "]=[找到]了,序号[" & 结果 & "],坐标[" & cstr(intX) & ", " & cstr(intY) &"]"        ElseTracePrint "找图:-<" & 找图数组(9) & ">- 都没找到"End If//返回值找图=结果imgid=结果
End Function
Function 循环找图(找图数组, 最大循环时间)Dim 结果,全组,分组,tt = TickCount()结果 = -1    DoIf TickCount() - t > 最大循环时间 * 1000 Then Exit doEnd If结果 = FindPic(找图数组(0),找图数组(1),找图数组(2),找图数组(3),找图数组(4),找图数组(5),找图数组(6),找图数组(7),intX,intY)If 结果 > -1 Then Exit Do//出口
        End If//循环找图间隔If CInt(找图数组(8)) > 10 Then Delay CInt(找图数组(8))Else Delay 100//默认100毫秒间隔
        End IfLoop//这路判断下循环找图结果imgid=-1 //重置imgid全局变量If 结果 > -1 Then             全组 = Split(找图数组(4), "|") //分析出当前找到的是哪个图片 对应的图片名字        TracePrint "循环找图:=[" & Replace(全组 (结果),"Attachment:","",1) & "]=[找到]了,序号[" & 结果 & "],坐标[" & cstr(intX) & ", " & cstr(intY) &"]"        ElseTracePrint "循环找图:-<" & 找图数组(9) & ">- 都没找到"End If//返回值imgid= 结果循环找图 = 结果
End Function
Function 多点bi色(多点bi色数组)Dim  全组,分组,当前横坐标,当前纵坐标,是否找到是否找到 = -1//简单判断下数组参数是否是多点bi色的 是才继续 不是则提示 避免多点找色参数写道了这里的冲突If not IsNull(多点bi色数组(4)) Then TracePrint "多点bi色 -<参数数组错误>-"EndScriptEnd IfIf CmpColorEx(多点bi色数组(0),多点bi色数组(1)) = 1 Then//分析出要点击的坐标全组 = Split(多点bi色数组(0), ",")分组 = Split(全组(0), "|")当前横坐标 = CInt(分组(0))当前纵坐标 = CInt(分组(1))intX = 当前横坐标intY = 当前纵坐标TracePrint "多点bi色 =["& 多点bi色数组(3)  &"]= 找到了  坐标["& cstr(intX) &":"& cstr(intY) &"]"多点bi色 = 1ElseTracePrint "多点bi色 -<"&  多点bi色数组(3) &">- 找不到"多点bi色 = -1End If
End Function
Function 循环多点bi色(多点bi色数组, 最大循环时间)Dim t,是否找到,全组,分组,当前横坐标,当前纵坐标是否找到=-1 //初始值为-1 表示没找到//简单判断下数组参数是否是多点bi色的 是才继续 不是则提示 避免多点找色参数写道了这里的冲突If not IsNull(多点bi色数组(4)) Then TracePrint "循环多点bi色 -<参数数组错误>-"EndScriptEnd Ift = TickCount()DoIf TickCount() - t > 最大循环时间 * 1000 Then Exit DoEnd IfIf CmpColorEx(多点bi色数组(0), 多点bi色数组(1)) = 1 Then 是否找到 = 1            Exit Do//跳出
        End If//循环间隔If CInt(多点bi色数组(2)) > 10 Then Delay CInt(多点bi色数组(2))Else Delay 100//默认100毫秒间隔
        End IfLoop//这里判断下结果If 是否找到 > -1 Then //分析出要点击的坐标全组 = Split(多点bi色数组(0), ",")分组 = Split(全组(0), "|")当前横坐标 = CInt(分组(0))当前纵坐标 = CInt(分组(1))intX = 当前横坐标intY = 当前纵坐标TracePrint "多点bi色 =["& 多点bi色数组(3)  &"]= 找到了  坐标["& cstr(intX) &":"& cstr(intY) &"]"            ElseTracePrint "多点bi色 -<"&  多点bi色数组(3) &">- 找不到"            End If循环多点bi色=是否找到
End Function
Function 多点找色(多点找色数组)If IsNull(多点找色数组(4)) Then TracePrint "多点找色 -<参数数组错误>-"EndScriptEnd IfFindMultiColor 多点找色数组(0),多点找色数组(1),多点找色数组(2),多点找色数组(3),多点找色数组(4),多点找色数组(5),多点找色数组(6),多点找色数组(7),intX,intYIf intX > -1 And intY > -1 ThenTracePrint "多点找色 =["& 多点找色数组(9)  &"]= 找到了  坐标["& cstr(intX) &":"& cstr(intY) &"]"多点找色 = 1            Else TracePrint "多点找色 -<"&  多点找色数组(9) &">- 找不到"        多点找色 = -1End If
End Function
Function 循环多点找色(多点找色数组, 最大循环时间)Dim t,是否找到,全组,分组,当前横坐标,当前纵坐标是否找到=-1 //初始值为-1 表示没找到If IsNull(多点找色数组(4)) Then TracePrint "多点找色 -<参数数组错误>-"EndScriptEnd Ift = TickCount()DoIf TickCount() - t > 最大循环时间 * 1000 Then Exit DoEnd IfFindMultiColor 多点找色数组(0), 多点找色数组(1), 多点找色数组(2), 多点找色数组(3), 多点找色数组(4), 多点找色数组(5), 多点找色数组(6), 多点找色数组(7), intX, intYIf intX > -1 And intY > -1 Then 是否找到 = 1Exit DoEnd If//循环间隔If CInt(多点找色数组(8)) > 10 Then Delay CInt(多点找色数组(8))Else Delay 100//默认100毫秒间隔
        End If        Loop//这里判断下结果If 是否找到 > -1 Then                 TracePrint "循环多点找色 =["& 多点找色数组(9)  &"]= 找到了  坐标["& cstr(intX) &":"& cstr(intY) &"]"        ElseTracePrint "循环多点找色 -<"&  多点找色数组(9) &">- 找不到"            End If循环多点找色=是否找到
End Function
/*
切换字库操作和字库设置都要在别处处理 本函数内不处理这个 判断检测识字结果本函数内部也不处理后面自行判定
复杂的识字不要用这个函数了 还是
注:识字找字尽量范围小点 不然识字找字都会出问题一定要用指定的颜色和偏色做字库 如果对应的颜色和偏色变化了 那么字库基本要重做
*/
Function 识字(识字数组)Dim ocrcharocrchar=Ocr(识字数组(0),识字数组(1),识字数组(2),识字数组(3),识字数组(4),识字数组(5))TracePrint "识字=["& 识字数组(6)  &"]= 识别结果=["& ocrchar &"]="识字=ocrchar
End Function
//一定要用指定的颜色和偏色做字库 如果对应的颜色和偏色变化了 那么字库基本要重做
Function 找字(找字数组)Dim 找字结果=-1Dim 全组,分组strid=-1找字结果=FindStr(找字数组(0),找字数组(1),找字数组(2),找字数组(3),找字数组(4),找字数组(5),找字数组(6),intX,intY)If intX > -1 And intY > -1 Then //把找字的字符串分解下  如果是找单字 就直接输出整个内容全组 = Split(找字数组(4), "|")TracePrint "找字  =["& 找字数组(7) &":" & 全组(找字结果) & "]=找到了 坐标["& cstr(intX) &","& cstr(intY) &"]"找字结果 = 1strid=找字结果Else TracePrint "找字  -<" & 找字数组(7) & ">-没找到"End If找字 = 找字结果
End Function
Function 单点找色(单点找色数组)       Dim  序号//全屏查找颜色FFFFFF-101010与123456序号 = FindColor(单点找色数组(0),单点找色数组(1),单点找色数组(2),单点找色数组(3),单点找色数组(4), 单点找色数组(5), 单点找色数组(6), intX,intY)If 序号 > -1 ThenTracePrint "单点找色 "&单点找色数组(7)&"--找到的颜色序号为: "&序号&"--坐标为:", intX & ", " & intYElseTracePrint "单点找色  -<" & 单点找色数组(7) & ">-没找到"End If单点找色=序号
End Function
Function 等待多点找色消失(多点找色数组,等待时间)    //间隔默认设置为100毫秒把     For cint(等待时间*10)If 多点找色(多点找色数组) = -1 Then Exit ForEnd If        Delay 100Next
End Function
Function 等待多点bi色消失(多点bi色数组,等待时间)    //间隔默认设置为100毫秒把     For cint(等待时间*10)If 多点bi色(多点bi色数组) = -1 Then Exit ForEnd If        Delay 100Next
End Function
/*
//作用 点击某个坐标 类似tap intX,intY 但是支持tapX array(100,200)  tapX "100,200"的格式 注意不支持tapX intX,intY
*/
Function 点击坐标(坐标信息)Dim t,tt,全组,分组,x,y//1.判断参数类型 数组 或者字符串 字符串中
    If IsArray(坐标信息) Then If IsNull(坐标信息(0)) or IsNull(坐标信息(1)) or not IsNumeric(坐标信息(0)) or  not IsNumeric(坐标信息(1)) thenTracePrint "tapX-:<点击参数有问题>"Else x = CInt(坐标信息(0))y = CInt(坐标信息(1))            Tap x, yTracePrint "tapX-:点击["&cstr(x)&","&cstr(y)&"]"End IfElse /**///参数是字符串全组 = Split(坐标信息, ",")x = 全组(0)y = 全组(1)//简单判断If IsNull(全组(0)) or IsNull(全组(1)) or not IsNumeric(全组(0)) or  not IsNumeric(全组(1)) thenTracePrint "tapX-:<点击参数有问题>"Else x = CInt(x)y = CInt(y)            Tap x, yTracePrint "tapX-:点击["&cstr(x)&","&cstr(y)&"]"End ifEnd If
End Function
Function 文本文件格式化操作(文件路径)Dim 读取内容读取内容 = Trim(file.Read(文件路径))    //判断开头3个字符是否是bom头If Mid(读取内容, 1, 3) = Chr(239) & Chr(187) & Chr(191) Then //有则替换为空 然后重新写入内容 这个地方不确定是否除了第一行之外还可能存在bom头 应该没那么巧file.Write 文件路径, Replace(读取内容, Chr(239) & Chr(187) & Chr(191), "")End If    //如果txt里面最后不是以\r\n结尾的 就自动添加一个回车换行符 来实现这个 也解决了替换最后一行 不写\r\n会替换找不到的情况If trim(读取内容)<>""and Right(读取内容, 2) <> "\r\n" Then file.Write 文件路径, 读取内容 & "\r\n"End If
End Function
/*TracePrint FindMultiColorEX(多点找色_钱标志,0,10,"在线标志")*/
Function FindMultiColorEX(arr,找图缩小方向,找图缩小幅度,remark)//x1,y1,x2,y2,第一颜色,偏移颜色组,方向,相似度,找图缩小方向,找图缩小幅度,remark
    Dim str,i,x1,y1,x2,y2,第一颜色,偏移颜色组,方向,相似度//array(214,231,425,436,"0000CE-202020","-4|-3|0000F5-202020,4|4|0000CC-202020,7|8|0000A8-202020,-4|19|0000A2-202020,-9|11|0000AE-202020,-14|15|0000A2-202020,-2|-7|0000F5-202020,-4|-5|0000F6-202020,6|1|0000CC-202020",0,0.85,0,0,50,"陈列界面_XX标志")x1 = arr(0)y1 = arr(1)x2 = arr(2)y2 = arr(3)第一颜色 = arr(4)偏移颜色组 = arr(5)方向 = arr(6)相似度 = arr(7)str=""i=0// 我循环多点找色  每次找完后如果找到符合要求的 我都会根据找到的坐标缩小下次的查找范围 直到找不到就跳出循环即可
    DointX=-1:intY=-1 //每次循环重置下2个变量
        FindMultiColor x1, y1, x2, y2, 第一颜色, 偏移颜色组, 方向, 相似度, intX, intYIf intX>-1 And intY>-1 Then //找到了符合要求的  就把范围缩小  然后对这个缩小的范围继续的找这个特征码//判断下是不是第一个 是第一个写法就不大相同了If i = 0 Then //这里还要多判断下remark是否为空 为空的话自然正常写 不为空的话需要多加1个变量到字符串里If Trim(remark) = "" Then str=intX&","&intYElse str=remark&","&intX&","&intYEnd IfElse If Trim(remark) = "" Then str=str&"|"&intX&","&intYElse str=str&"|"&remark&","&intX&","&intYEnd IfEnd If//判断下找图的缩小方向If 找图缩小方向 = 0 Then x1 = intX + 找图缩小幅度Else y1 = intY + 找图缩小幅度                End If//这是新添加的代码  多点找色函数有个问题  1140, 67, 1138, 90 这样的范围依然可以找到东西 好奇怪 而不是返回-1来表示已经无法继续寻找了If (x1 >= x2) or (y1 >= y2) Then Exit do                End If                              ElseExit Do End Ifi = i + 1Delay 50                            LoopFindMultiColorEX=str
End Function
Function 找图X(arr,找图缩小方向,找图缩小幅度,remark)Dim str,i,x1,y1,x2,y2,图片信息,偏移颜色组,方向,相似度   x1 = arr(0)y1 = arr(1)x2 = arr(2)y2 = arr(3)图片信息 = arr(4)偏移颜色组 = arr(5)方向 = arr(6)相似度 = arr(7)str=""i=0//我循环多点找色  每次找完后如果找到符合要求的 我都会根据找到的坐标缩小下次的查找范围 直到找不到就跳出循环即可
    DointX=-1:intY=-1 //每次循环重置下2个变量
        FindPic x1, y1, x2, y2, 图片信息, 偏移颜色组, 方向, 相似度, intX, intYIf intX>-1 And intY>-1 Then //判断下是不是第一个 是第一个写法就不大相同了If i = 0 Then //这里还要多判断下remark是否为空 为空的话自然正常写 不为空的话需要多加1个变量到字符串里If Trim(remark) = "" Then str=intX&","&intYElse str=remark&","&intX&","&intYEnd IfElse If Trim(remark) = "" Then str=str&"|"&intX&","&intYElse str=str&"|"&remark&","&intX&","&intYEnd IfEnd If//判断下找图的缩小方向If 找图缩小方向 = 0 Then x1 = intX + 找图缩小幅度Else y1 = intY + 找图缩小幅度End If//这是新添加的代码  多点找色函数有个问题  1140, 67, 1138, 90 这样的范围依然可以找到东西 好奇怪 而不是返回-1来表示已经无法继续寻找了If (x1 >= x2) or (y1 >= y2) Then Exit doEnd If                  Else//TracePrint i & "未找到颜色点坐标为", colX, colY//如果多大的范围都无法找到 那么就是直接退出循环
            Exit Do End Ifi = i + 1Delay 50                            Loop找图X=str
End Function
Function 时间检测(过期时间)Dim 当前网络时间=GetNetworkTime()TracePrint 当前网络时间TracePrint 过期时间If 过期时间 < 当前网络时间 Then ShowMessage "当前已过期 脚本停止"TracePrint "当前已过期 脚本停止"Delay 2000EndScriptElse TracePrint "尚未过期"End If
End Function
/*
作用:用字典二维数组来进行米字决识字的函数  如果字库无法准确识别 可以考虑这个功能
//注意:该函数用到了findmulticolorEX函数  万一该函数有变化 可能会影响到本函数的使用
//参数1:是一个识字的范围和颜色偏色的一个数组 参考多点找色的参数 基本一样
//参数2:dict 是一个二维数组 是要辨识的多点找色特征码集合
//参数3 :缩小方向为0 或者1 为0则横向缩小 为1则为纵向缩小
//参数4 缩小幅度 一般设置为10即可
//返回值:是识别出来的字符串
例子
dict=array( _Array("0","F0F0F0","0|22|F3F3F3,-6|11|F3F3F3,6|11|F3F3F3,-4|2|F3F3F3,5|3|F3F3F3,4|20|F3F3F3,-4|20|F3F3F3,0|11|000000"), _Array("1","F2F2F2","5|0|F3F3F3,5|10|F2F2F2,5|20|F2F2F2,2|3|000000,2|21|000000,2|0|F3F3F3,5|6|F2F2F2,5|14|F2F2F2"), _Array("2","F3F3F3","2|-3|F3F3F3,5|-4|F2F2F2,10|-1|F3F3F3,7|7|F2F2F2,3|12|F2F2F2,0|17|F3F3F3,5|1|000000,10|17|F2F2F2"), _Array("3","F3F3F3","5|-3|F1F1F1,10|2|F2F2F2,2|7|5C5C5C,5|19|F3F3F3,10|13|F0F0F0,0|15|F3F3F3,5|13|000000,5|3|000000"), _Array("4","F3F3F3","0|14|F3F3F3,0|19|F2F2F2,3|14|F2F2F2,-9|13|F3F3F3,-3|10|000000,-10|-1|000000,-3|17|000000,4|11|000000"), _Array("5","F3F3F3","8|0|F3F3F3,3|3|000000,-1|5|F1F1F1,-1|9|F3F3F3,4|14|000000,10|14|F3F3F3,4|21|F3F3F3,-1|14|000000"), _Array("6","F2F2F2","0|9|F3F3F3,0|22|F3F3F3,-1|15|000000,0|5|000000,5|14|F3F3F3,-7|14|F2F2F2,-5|3|F3F3F3,4|5|000000"), _Array("7","EDEDED","12|1|F3F3F3,8|7|F2F2F2,6|4|000000,6|11|F3F3F3,5|19|F3F3F3,0|11|000000,1|20|000000,8|20|000000"), _Array("8","F1F1F1","0|10|ECECEC,0|22|F3F3F3,0|16|000000,0|5|000000,-6|5|F2F2F2,5|5|F3F3F3,6|16|F3F3F3,-6|16|F3F3F3"), _Array("9","F0F0F0","0|13|ECECEC,-3|21|ECECEC,0|17|000000,-5|17|000000,1|7|000000,6|11|F3F3F3,-5|7|F3F3F3,6|17|F3F3F3") _
)
TracePrint 范围识字(多点找色_测试识字,dict,0,10)
*/
//参数 范围缩小方向 是规定的是横向缩小范围还是纵向缩小范围 有2个值为0 或者为1
//注意这个识字还不成熟 最好是范围小一点 区域杂色和类似颜色少一点
//为了增加速度这里在识别的时候用了KeepCapture  如果文字是动态的 请根据情况自己修改下
Function 范围识字(arr,dict,范围缩小方向,范围缩小幅度)Dim all_str,nowstr,结果数组1,j,k,brr//开始尝试列出这串字符串的内容//KeepCapture //是否添加根据自己需要For j=0 to ubound(dict)//TracePrint "范围识字的循环参数: "&j    brr=array(arr(0),arr(1),arr(2),arr(3),dict(j, 1), dict(j, 2),arr(6),arr(7))nowstr = FindMultiColorEX(brr, 范围缩小方向,范围缩小幅度, dict(j, 0))//TracePrint nowstrIf Trim(nowstr) = "" Then //如果为空 那么不操作
        Else //不为空 那么就写入到总字符串里面        all_str=all_str&"|"&nowstr                End If        Next//TracePrint all_str// ReleaseCapture//对应上面的keepture//开始处理下最终结果  主要是处理下第一个位置的| 去掉即可If Left(all_str, 1) = "|" Then        all_str = Mid(all_str, 2, (Len(all_str) - 1))End If      //TracePrint "初步找到的结果:" & all_str//开始用转变为数组结果数组1 = Split(all_str, "|")Dim 当前元素,对比元素,arr_1,arr_2 //当前元素自然是为了存放当前的数组元素(该元素也是1个数组 过渡数组就为了短暂存放中间数组 方便两个数组进行交换的)//注意当前元素和对比元素不是数组 只是一个以逗号分隔的字符串而已//开始准备冒泡排序进行调整数组的元素的顺序For j = 0 To ubound(结果数组1) - 1  //最后一项没有后一位对比 所以不用了            //开始冒泡        For k = j+1  To ubound(结果数组1)        //开始对比当前元素=结果数组1(j) //必须在这里获取 因为这里的元素值是变动的 一定要对比元素=结果数组1(k)// TracePrint "对比元素为:-"&对比元素arr_1 = Split(当前元素, ",")arr_2 = Split(对比元素, ",")//这里有个问题 如果字是纵向排列 和横向排列   那么我们排序的顺序就会不同If 范围缩小方向 = 0 Then If clng(arr_1(1))>clng(arr_2(1)) then//开始交换结果数组1(j) = 对比元素结果数组1(k)=    当前元素    End IfElse If clng(arr_1(2))>clng(arr_2(2)) then//开始交换结果数组1(j) = 对比元素结果数组1(k)=    当前元素    End IfEnd If//TracePrint Join(结果数组1,"|")
        NextNext//最后重新输出下整个数组的内容TracePrint "范围识字结果:"&Join(结果数组1, "|")范围识字=Join(结果数组1, "|")
End Function
//Call 定时器("2016-05-20 17:05:50") //不到规定时间 脚本会在这个函数不断的循环 10秒检测一次
Function 定时器(日期时间)DoIf DateTime.Format() > Trim(日期时间) Then Exit Do //判断到时间了才会执行后面的内容代码
        End IfDelay 10000Loop
End Function
//该函数产生固定长度的数字字母字符串 随机数字字母字符串(array(0,15)) 或者 随机数字字母字符串(20)
Function 随机数字字母字符串(配置数组或者长度数值)Dim arr,str,resultIf IsArray(配置数组或者长度数值) Then If 配置数组或者长度数值(0) = 0 Then str="a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-1-2-3-4-5-6-7-8-9-0"arr = Split(str, "-")ElseIf 配置数组或者长度数值(0) = 1 Thenstr="1-2-3-4-5-6-7-8-9-0"arr = Split(str, "-")ElseIf 配置数组或者长度数值(0) = 2 Thenstr="a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z"arr = Split(str, "-")End IfElse str="a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-1-2-3-4-5-6-7-8-9-0"arr = Split(str, "-")End If//35个字符For cint(配置数组或者长度数值(1))result=result&arr(cint(随机数(0,ubound(arr))))Delay 10NextTracePrint "得到的随机字符串为: " & result随机数字字母字符串=result
End Function
Function 初始化()Dim 结果,字库数组//1.屏幕常亮状态KeepScreen true//2.设置控制台的位置SetControlBarPos 脚本配置["控制台位置"], 脚本配置["控制台位置是否锁定"]//3.开头调用一次即可  和rnd配合的
    Randomize    //4.日志设置    If 脚本配置["是否开启日志功能"] Then     Log.Open TracePrint "==[本次日志开启]=="Else      Log.Close End If//5.字库设置If 脚本配置["是否开启字库"] Then If not 脚本配置["是否只识别前11行"] Then SetRowsNumber (0)//他和SetDictEx配合字库数组=Split(脚本配置["字库名"],"|")For i = 0 To UBOUND(字库数组)If Trim(字库数组(i)) <> "" Then TracePrint SetDictEx(i, Trim(字库数组(i))) //设置字库
                End IfNextTracePrint UseDict(0) //调用0号字库为当前字库
        Else 字库数组=Split(脚本配置["字库名"],"|")For i = 0 To UBOUND(字库数组)If Trim(字库数组(i)) <> "" Then TracePrint SetDict(i, Trim(字库数组(i))) //设置字库
                End IfNextTracePrint UseDict(0) //调用0号字库为当前字库
        End IfEnd If//6.缩放设置  //受影响命令有: Tap 短暂点击、Touch 按住一段时间、TouchDown 按住不放、TouchMove 模拟滑动、Swipe 模拟划动、GetPixelColor 得到指定点颜色、FindColor 寻找颜色、CmpColor 对比指定点颜色、CmpColorEx 对比多个点颜色、FindMultiColor 多点找色。If 脚本配置["是否开启缩放"] Then Select Case GetScreenX() / GetScreenY()Case 800/1280     //1600X2560 1200X1920 800X1280 600X960TracePrint "采取了10:16的比例缩放"//    SetScreenScale 800, 1280Case 480 / 640TracePrint "采取3:4的比例缩放"//    SetScreenScale 480, 640Case 480 / 800  //1536X2560 1080X1800 768X1280 480X800TracePrint "采取3:5的比例缩放"//    SetScreenScale 480, 800Case 9 / 16   //1440X2560 1080X1920 720X1280 540X960TracePrint "采取9:16的比例缩放"//SetScreenScale 480, 800
        Case Else//海马玩模拟器是1280 720 和上面不同的 所以放到这里来了TracePrint "不符合规定的分辨率 无法缩放"// SetScreenScale 1280, 720
        End SelectElse End If
End Function
Sub OnScriptExit()For 2Call show("联系QQ: ["&脚本配置["作者QQ"]&"]")Delay 2000NextTracePrint "==[本次日志关闭]=="
End Sub
Function 时间限制检测()dim 网络时间=智能获取官方网络时间()If Trim(网络时间) <> "" and InStr(1, Trim(网络时间), "-") > 1 and InStr(1, Trim(网络时间), ":") > 1 Then //开始判断是否过期If Trim(网络时间) > 脚本配置["时间限制"] Then Call show("超出试用期")Delay 1000EndScriptElse Call show("您的试用截至到:["&脚本配置["时间限制"]&"]")Delay 1000End IfElse Call show("无法获取网络时间")Delay 1000EndScriptEnd If
End Function
Function 智能获取官方网络时间()Dim 当前网络时间,网络时间,变量,是否获取到网络时间,t当前网络时间 = ""网络时间 = ""变量=""是否获取到网络时间 = 0//114如果没获取到 则擦开始第二个官网网络时间
    DoIf TickCount() - t > 1 * 60 * 1000 Then Call show("1分钟无法获取网络时间 脚本停止")Delay 1000EndScriptEnd If网络时间 = ""网络时间 = GetNetworkTime()If trim(网络时间) <> "" and  InStr(1, 网络时间, "-") > 1 And InStr(1, 网络时间, " ") > 1 And InStr(1, 网络时间, ":") > 1 Then 智能获取官方网络时间 = 网络时间//是否获取到网络时间=1 //表示下面获取就不用获取了Call show("按键官方:" & 网络时间)Delay 500Exit DoEnd If//山海师的获取网络时间/**/网络时间 = ""网络时间 = shanhai.GetNetTime()If trim(网络时间) <> "" and  InStr(1, 网络时间, "-") > 1 And InStr(1, 网络时间, " ") > 1 And InStr(1, 网络时间, ":") > 1 Then 智能获取官方网络时间 = 网络时间//是否获取到网络时间=1 //表示下面获取就不用获取了Call show("山海师::" & 网络时间)Delay 500Exit DoEnd IfDelay 1000Loop
End Function
Function 简陋网络验证()Dim 网页源代码,控制字符串,当前脚本名    //初始化3个局部变量 赋初值网页源代码=""控制字符串 = ""当前脚本名 = 脚本配置["脚本名"]//这个指定地址是我博客上的一篇博文的地址 后面加上 随机数的原因是为了 避免 网页缓存 才加上随机数的网页源代码=url.Get("http://blog.sina.com.cn/s/blog_acaaccbf0102xoji.html?test123=" & cstr(随机数(10,1000)),10)//判断是否得到了正确的源代码  源代码里面应该有 点滴积累 这四个字  有这4个字表示的确是我自己的博客的博文If UTF8.InStr(1, 网页源代码, "点滴积累") > 1 Then //开始进一步查找 是否存在该脚本的名字  如果存在则取出该脚本对应的控制字符串If UTF8.InStr(1, 网页源代码, trim(当前脚本名)) > 1 Then //开始提取控制字符串控制字符串 = 取文本中间("[" & Trim(当前脚本名) & "]", "[/" & Trim(当前脚本名) & "]", 网页源代码)If Trim(控制字符串) = "否" Then                 For 5Call show("当前脚本被限制 请联系作者QQ["&脚本配置["作者QQ"]&"]")Delay 1000NextEndScriptEnd IfEnd if        End If
End Function
//使用下面函数 返回值要int()下 免得出现提示警告
Function 随机数(最小值,最大值)Dim 结果结果 = Int((最大值 - 最小值 + 1) * Rnd() + 最小值)随机数=结果
End Function
Function delayR(t)Delay cint(随机数(cint(t*0.8),cint(t*1.2)))
End Function
Sub 清理文本框(width)    For cint(width)KeyPress "del"    Delay 20Next
End Sub
'    Arr = Array (100,100,100,200,null,50,"滑动")
'    结果 = TouchDMU (Arr)
Sub TouchDMU(arr)Dim s,t,isPrintisPrint=1If IsNull(arr(4)) Then arr(4) = 50If IsNull(arr(5)) Then arr(5) = 50TouchDownEvent arr(0), arr(1), 0Delay arr(5)Doarr(0) = CInt(arr(0) + (arr(2) - arr(0)) / 2)      arr(1) = CInt(arr(1) + (arr(3) - arr(1)) / 2)TouchMoveEvent arr(0), arr(1), 0, arr(5)Loop Until Sqr((arr(2) - arr(0)) ^ 2 + (arr(3) - arr(1)) ^ 2) < 20    TouchMoveEvent arr(2), arr(3), 0, arr(5)TouchUpEvent  0If IsNull(arr(6)) = False And isPrint = 1 Then TracePrint "TouchDMU:",arr(6)TracePrint "坐标与时间:", arr(0), arr(1), arr(2), arr(3), arr(4), arr(5)End If
End Sub

Function 取文本中间(开始字符串,结束字符串,完整字符串)Dim 开始字符串位置,结束字符串位置,过渡字符串//过渡字符串用来承接半路获取的部分完整字符串开始字符串位置 = cint(UTF8.InStr(1, 完整字符串, 开始字符串))//判断下 开始字符串位置 是否大于0 如果小于等于0那么久返回个空字符串If 开始字符串位置 > 0 Then //能找到开始字符串  先把完整字符串缩小 缩小检测范围过渡字符串=UTF8.Mid(完整字符串, 开始字符串位置+utf8.len(开始字符串), utf8.len(完整字符串)-开始字符串位置-utf8.len(开始字符串)+1)//TracePrint 过渡字符串//然后以这个过渡字符串为准查找结束字符串结束字符串位置 = cint(UTF8.InStr(1, 过渡字符串, 结束字符串))If 结束字符串位置 > 0 Then 取文本中间=UTF8.Mid(过渡字符串, 1, 结束字符串位置-1)Else 取文本中间=""End IfElse 取文本中间=""End If
End Function
Function 逆向取文本中间(开始字符串,结束字符串,完整字符串)Dim 开始字符串位置,结束字符串位置,过渡字符串//过渡字符串用来承接半路获取的部分完整字符串结束字符串位置 = cint(UTF8.InStr(1, 完整字符串, 结束字符串))//TracePrint "结束字符串位置"&cstr(结束字符串位置)//判断下 开始字符串位置 是否大于0 如果小于等于0那么久返回个空字符串If 结束字符串位置 > 0 Then //能找到开始字符串  先把完整字符串缩小 缩小检测范围过渡字符串=UTF8.Mid(完整字符串, 1,结束字符串位置+utf8.len(结束字符串))//TracePrint 过渡字符串//然后以这个过渡字符串为准查找结束字符串开始字符串位置 = cint(UTF8.InStrRev(过渡字符串, 开始字符串, 结束字符串位置))//TracePrint cstr(开始字符串位置)If 开始字符串位置 > 0 Then //TracePrint 开始字符串位置+utf8.len(开始字符串)逆向取文本中间=UTF8.Mid(过渡字符串, 开始字符串位置+utf8.len(开始字符串), 结束字符串位置-开始字符串位置-utf8.len(开始字符串))Else 逆向取文本中间=""End IfElse 逆向取文本中间=""End If
End Function
Function 重启指定app(包名)Rem 重启指定app开头//回到桌面For 3KeyPress "Home"Delay 200Next//判断下 这个app是否开启过 没开启则//    If Sys.IsRunning(包名) Then
    KillApp 包名Delay 1500 //给点延迟 让系统有缓和//    End If
    RunApp 包名Delay 2000 //启动app给点延迟//延迟大了之后 可以考虑延迟20秒后判断下是否app处于手机的前台 Sys.AppIsFront("com.tongcheng.android")/*Delay 20000If not Sys.AppIsFront(包名) Then Goto 重启指定app开头End If*/Rem 重启指定app结尾
End Function
/*
一个截图的函数 图片主要是存放到sdcard目录下的 脚本截图 这个文件夹
参数1 :截图存放目录  不要以/结尾 而且再调用这个函数前 请一定要确保这个路径是存在的  不用每次都判断路径是否存在 只需要在脚本开头判断下即可
*/
Function 截图(截图存放目录)Dim t,当前截图文件名,当前截图文件完整路径//检测下存放目录  不过这个检测最好放到初始化里面检测比较好当前截图文件名 = DateTime.Format("%Y_%m_%d_%H_%M_%S",time()) & ".png"//TracePrint 当前截图文件名当前截图文件完整路径 = 截图存放目录 & "/" & 当前截图文件名SnapShot 当前截图文件完整路径ShowMessage "截图文件[" & 当前截图文件完整路径 & "]"Delay 500
End Function
/*如果出现其他去不掉的bom则可以一个一个字符取出来 转成asc码看看是什么*/
Function 去除bom(文件路径)Dim 读取内容读取内容 = Trim(file.Read(文件路径))//判断开头3个字符是否是bom头If Mid(读取内容, 1, 3) = Chr(239) & Chr(187) & Chr(191) Then //有则替换为空 然后重新写入内容 这个地方不确定是否除了第一行之外还可能存在bom头 应该没那么巧file.Write 文件路径, Replace(读取内容, Chr(239) & Chr(187) & Chr(191), "")End If
End Function
Function 输入九宫格密码操作(支付密码)//(1) 先把0-9个数字对应的坐标和 X对应的坐标记录到指定数组//(2)接收 支付密码 检测是否是6位 是否是数字 然后从左侧开始依次的取以为 判断是哪个数值 找到数值到上面数组里面找到坐标进行点击
    Dim t,tt,坐标字符串,当前坐标数组,当前点击横坐标,当前点击纵坐标,当前密码字符Dim 密码坐标数组//这个要在外面定义//全部清理下For 6Tap 402,769Delay 100Next//分解字符串开始依次点击字符For i=1 to len(支付密码)坐标字符串 = ""当前点击横坐标 = -1当前点击纵坐标 = -1当前密码字符 = CInt(Mid(支付密码, i, 1))TracePrint  当前密码字符坐标字符串 = Trim(密码坐标数组(当前密码字符))TracePrint  坐标字符串当前坐标数组 = Split(坐标字符串, ",")当前点击横坐标 = CInt(Trim(当前坐标数组(0)))        当前点击纵坐标 = CInt(Trim(当前坐标数组(1)))If 当前点击横坐标 > 15 and 当前点击纵坐标 > 400 and 当前点击纵坐标 <= 800 Then Tap 当前点击横坐标, 当前点击纵坐标Else End IfDelay 200next
End Function
/*
作用 简单说脚本出现意外和异常就用调用这个函数来进行自我纠错让流程回归正轨 这个函数只是一个思路 根据实际进行变化和改动脚本流程出现意外和异常  就会调用这个函数 一开始是尝试不重启app在app内部尝试回到一个标准界面 重新开始流程当时如果还不行就重启app 然后回到app的指定界面 继续脚本执行  这个需要配合 错误代码变量来执行 错误代码为0  则表示没错误 不执行 为其他的话可以根据错误代码的值进行针对性的操作 不过这里的异常处理函数没有写
参数1:如果级别为0 那么表示 先在app内部进行处理 一顶时间内如果无法达成要求 才考虑进行级别为1的重开模式
*/
Function 异常处理操作(处理级别参数)Dim t,tt,可能的界面的条件1,可能的界面的条件2,可能的界面的条件3,找到符合要求的界面的条件Rem 异常处理操作开头If 处理级别参数 = 0 Then //app内部异常处理 就是 处理级别参数为0的异常处理 如果这个级别处理不聊才切到下面的级别参数为1的处理办法t = TickCount()DoIf TickCount() - t > 1 * 60 * 1000 Then Exit Do //跳出此循环 开始下面的处理级别为1的异常处理
            End IfIf 找到符合要求的界面的条件 Then //符合要求 跳出整个异常处理即可
                Goto 异常处理操作结尾ElseIf 可能的界面的条件1 ThenElseIf 可能的界面的条件2 ThenElseIf 可能的界面的条件3 ThenEnd IfDelay 500LoopEnd If//最终手段 就是重置 就是处理级别参数为1的处理方法 重置appKillApp "QQ.tebfxyb.com"Delay 2000RunApp "QQ.tebfxyb.com"//60秒找不到正确的首页 那么久说明启动失败 从异常处理开头再次执行t = TickCount()DoIf TickCount() - t > 1 * 60 * 1000 Then goto 异常处理操作开头//重开异常处理还是无法解决这个问题 则 继续重开
        End IfIf 找到符合要求的界面的条件 Then //符合要求 跳出整个异常处理即可
            Exit DoElseIf 可能的界面的条件1 ThenElseIf 可能的界面的条件2 ThenElseIf 可能的界面的条件3 ThenEnd IfDelay 500LoopRem 异常处理操作结尾
End Function
/*
作用  : 是用来读取配置文件里面的内容到 配置文件这个table里面
参数1;就是配置文件路径 你懂的
返回值 是返回一个json字符串 解析后是一个表 可以得到指定的配置文件的内容
注意 配置文件里面的内容必须是 如下结构
定义值1 = 111
值 = 222
实例:
dim 配置文件=Encode.JsonToTable(读取配置文件到table("/sdcard/Misc/配置.txt"))
TracePrint 配置文件["永远不会用到的值"] //只是为了证明配置文件内容传输正常
TracePrint 配置文件["测试"]
*/
Function 读取配置文件到table(配置文件路径)Dim t,arr,brrDim 配置文件={"永远不会用到的值":"永远不会用到的值"}//这里要进行下预处理 无非就是去掉bom和末尾添加回车换行符 如果末尾没有以这个结尾的话
    Call 文本文件格式化操作(配置文件路径)//先每行读取下到一个数组中arr = File.ReadLines(配置文件路径)For Each v In arrbrr = Split(v, "=")//TracePrint brr(0)If IsNull(brr(1)) Then Else 配置文件[trim(brr(0))]=trim(brr(1))End IfNext读取配置文件到table=Encode.TableToJson(配置文件)
End Function
/*
和上面那个对应 但是这个和table没关系了 只是单纯的把指定的key的值写入到配置文件对应的行 如果不存在该配置项则在开头会新添加这个配置项
//参数1 没什么可说的
//参数2 就是要修改的配置项的名字
//参数3 修改的配置项的值
//例子:
Call 写入配置文件("/sdcard/配置.txt","姓名","123")
*/
Function 写入配置文件(配置文件路径,key, value)Dim t,arr,brr,配置文件内容,是否找到配置项是否找到配置项 = 0//这里要进行下预处理 无非就是去掉bom和末尾添加回车换行符 如果末尾没有以这个结尾的话
    Call 文本文件格式化操作(配置文件路径)//先每行读取下到一个数组中arr = File.ReadLines(配置文件路径)配置文件内容 = file.Read(配置文件路径)For Each v In arrbrr = Split(v, "=")//TracePrint brr(0)If trim(brr(0))=trim(key) Then 是否找到配置项 = 1//开始对配置文件内容进行替换        配置文件内容 = Replace(配置文件内容, v, brr(0) & "=" & value)//新内容写入配置文件
            file.Write 配置文件路径,配置文件内容//跳出
            Exit ForEnd IfNext//如果没有找到符合的 那么自然是要在末尾添加一个新的配置项了If 是否找到配置项 = 0 Then file.Write 配置文件路径,配置文件内容&key&"="&value&"\r\n"End If
End Function
Function 替换文件的部分内容(文件路径,修改前状态,修改后状态)Dim 读取结果,结果读取结果 = File.Read(文件路径)TracePrint 读取结果//修改当前账号状态结果 = Replace(读取结果, 修改前状态, 修改后状态,1)TracePrint 结果//再把新内容写入进去
    File.Write 文件路径, 结果
End Function
Function 等待找图消失(找图数组,等待时间)    //间隔默认设置为100毫秒把     For cint(等待时间*10)If 找图(找图数组) = -1 Then Exit ForEnd If        Delay 100Next
End Function
Function 检测分辨率()If 脚本配置["是否检查屏幕参数"] Then If (脚本配置["规定的横向分辨率"] <> 脚本配置["横向分辨率"]) or (脚本配置["规定的纵向分辨率"] <> 脚本配置["纵向分辨率"]) or (脚本配置["规定的DPI"] <> 脚本配置["DPI"]) or (脚本配置["规定的旋转方向"] <> 脚本配置["旋转方向"]) Then For 5show "屏幕参数为:" & 脚本配置["横向分辨率"] & "X" & 脚本配置["纵向分辨率"] & "\nDPI:" & 脚本配置["DPI"] & "\n旋转角度为:" & 脚本配置["旋转方向"]&"\n不合要求 脚本停止"Delay 2000Next            EndScriptEnd IfElse show "屏幕参数为:" & 脚本配置["横向分辨率"] & "X" & 脚本配置["纵向分辨率"] & "\nDPI:" & 脚本配置["DPI"] & "\n旋转角度为:" & 脚本配置["旋转方向"]Delay 200End If
End Function/*
//记录脚本的历次改动和变化 和对应的版本号
*/
Function 脚本更新信息()
/**/
End Function
Sub 函数区()
End Sub

备份一个

百度云 脚本文件地址:

链接:https://pan.baidu.com/s/13v5B2DUaBXRyCCzObUsWDg
提取码:g6ff
复制这段内容后打开百度网盘手机App,操作更方便哦

123

转载于:https://www.cnblogs.com/zjl8455482/p/10397382.html

个人向常用的一些函数的汇总成一个简易模板相关推荐

  1. php wordpress 代码模板,WordPress 主题模板常用基本代码与函数

    平时在WordPress 主题模板文件里常遇到的基本代码与函数,简单的跟大家分享. 一:WordPress主题中基本模板文件 一套完整的WordPress主题应至少具有如下模板文件: style.cs ...

  2. c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)

    C语言输入字符和字符串(所有函数大汇总) C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar() ...

  3. sum函数两个同行的元素相加_Excel函数公式大全:利用sum函数进行汇总以及对多个汇总进行求和...

    教程领到手,学习不用愁!领 ↑↑↑ 最高效最快速的入门学习方式:看知识兔视频课程,跟着知识兔老师操作,听知识兔老师讲解,初学者不要自己瞎琢磨瞎折腾,很容易走弯路.学以致用,光看不练都是假把式.学完知识 ...

  4. Oracle手边常用70则脚本知识汇总

    Oracle手边常用70则脚本知识汇总 作者:白宁超 时间:2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...

  5. mysql计算1000天后的日期_Mysql中常用的日期函数

    在日常工作中写sql也会经常用到日期函数,更甚者在面试的时候会让你在写sql的过程中使用日期函数,因此做了几个常用日期函数的汇总,希望可以帮助其他人了解日期函数. 获取当前的日期(包含具体的时分秒) ...

  6. Pandas 函数方法汇总一览查询(持续补充改进)

    Pandas 函数方法汇总一览查询(持续补充改进) 文章目录 Pandas 函数方法汇总一览查询(持续补充改进) 初衷 Pandas 最最常用函数罗列 Pandas 函数用法示例 初衷 NumPy.P ...

  7. 常用ANSI C语言标准库函数汇总(一)

    常用ANSI C语言标准库函数汇总(一) C语言被发明出来时并没有什么库函数,随着C语言的流行,越来越多的厂商和组织开始提供C语言的编译器,同时把经常用到的函数封装成"库"的形式发 ...

  8. 【转载】EEG中常用的功能连接指标汇总

    EEG中常用的功能连接指标汇总 功能连接(Functional connectivity, FC)可以说是EEG研究中的一个非常重要的方法.对于正常的大脑高级认知功能来说,往往并不仅仅是单独的某个脑区 ...

  9. mysql 中常用的聚合函数的使用

    mysql 中常用的聚合函数的使用 文章目录 1 count 函数 2 sum 函数 3 avg 函数 计算平均值 4 max 和min 函数 求最大值 ,最小值 总结 参考文档: 什么是聚合函数: ...

  10. 8.Hive基础—函数—系统内置函数、常用内置函数、自定义函数、自定义UDF函数、自定义UDTF函数

    本文目录如下: 第8章 函数 8.1 系统内置函数 8.2 常用内置函数 8.2.1 空字段赋值 8.2.2 CASE WHEN THEN ELSE END 8.2.3 行转列 8.2.4 列转行 8 ...

最新文章

  1. E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)E: U
  2. 斯洛文尼亚接受BCH支付的商家达343家,日本和北昆士兰州对BCH接受度增长迅速
  3. C# Lambda 和 匿名函数的GC总结
  4. 光猫的分类及应用范围有哪些?
  5. BCHN近期收到一笔1000 BCH的匿名捐款
  6. Android--Fragment基本介绍
  7. 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为MP4)
  8. Qt QScrollArea and layout in code
  9. 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
  10. css设置背景透明度
  11. [网络应用]11款来自 deviantART 的 foobar 2000 皮肤
  12. linux 中eth,执行命令取出linux中eth0的IP地址
  13. Processing笔记05—贪吃蛇小游戏
  14. 训练营四教官打死网瘾少年案今开庭审理
  15. OpenCV中关于各种颜色的定义以及RGB值
  16. Linux lolcat输出彩色格言
  17. android 取消系统默认手机加密(全盘加密)
  18. Pytorch torch.sparse_coo_tensor()
  19. 修改freeradius服务器配置
  20. qt控件显示当前实时时间

热门文章

  1. VB.NET中Socket编程
  2. 多个html5页面背景音乐,HTML5页面背景音乐代码 网页背景音乐通用代码
  3. 苹果电脑是“监狱”、弃用 Ubuntu,GNU 创始人斯托曼谈自由软件运动现状
  4. 计算机鼠标键盘没反应,电脑鼠标键盘突然失灵
  5. 修复ie浏览器主页被360篡改
  6. 【转】D3DXLoadSkinMeshFromXof函数及.x在不同dx版本中
  7. 信号峰拟合的MATLAB程序,包括高斯拟合,多高斯拟合等多种类型
  8. win10装kali linux双系统,win10安装kali组成双系统攻略
  9. python opencv对颗粒的计数与计算空洞率
  10. coreos 安装 mysql_在 UOS 上体验 CoreOS