// 导入 山海插件
Import "shanhai.lua"
// 隐藏虚拟键
If shanhai.SetNavigationBar(false) Then
ShowMessage "隐藏虚拟键成功,重启手机生效"
Delay 2000
Call 倒计时重启手机()
Else
ShowMessage "隐藏虚拟键失败"
Delay 2000
End If
Function 倒计时重启手机
Dim i = 0
For i = 1 To 5
ShowMessage "倒计时:" & i & " 秒后重启手机"
Delay 1000
Next
Call shanhai.Reboot()
End Function
Import "shanhai.lua"
//通过找图色来点击下载app的部分这里就忽略了,假设app安装包都下载放在/sdcard/download文件夹
// 遍历并安装/sdcard/download文件夹内的文件
Dim apparr, path = "/sdcard/download/"
apparr = shanhai.ScanPath(path)
For Each v In apparr
TracePrint v
If InStr(1, v, ".apk") > 0 Then
Call shanhai.Install(path & v)
End If
Delay 1000
Next
Import "shanhai.lua"
// 遍历并安装/sdcard/download文件夹内的文件
Dim i = 1, apparr, path = "/sdcard/Pictures/"
apparr = shanhai.ScanPath(path)
For Each v In apparr
TracePrint v
dir.Rename(path & v, path & "Pic_" & i)
Delay 100
Next
Import "shanhai.lua"
// 释放所有apk包
PutAttachment "/sdcard/apps/",""
// 遍历并安装/sdcard/download文件夹内的文件
Dim apparr, path = "/sdcard/apps/"
apparr = shanhai.ScanPath(path)
For Each v In apparr
TracePrint v
Call shanhai.Install(path & v)
Delay 1000
Next
// 导入插件
Import "shanhai.lua"
// 先读取界面数据存放到变量中
Dim ui_pkgname = ReadUIConfig("包名")
Dim ui_isDisable = ReadUIConfig("是否隐藏")
// 对界面功能进行判断
If ui_isDisable = 0 Then
//隐藏
Call shanhai.DisableApp(ui_pkgname)
Else
//显示
Call shanhai.EnableApp(ui_pkgname)
End If
Import "shanhai.lua"
// 循环获取QQ的通知栏消息
Dim app = "com.tencent.mobileqq"
Dim appinfo = ""
Do
appinfo = shanhai.GetNotification(app)
// 通知栏消息有包含“红包”的时候就打开QQ
If InStr(1, appinfo, "红包") > 0 Then
TracePrint "有红包"
RunApp app
Else
Delay 1000
End If
Loop
其实利用这个获取通知栏命令的功能还能实现一个强大的功能——获取当前通知栏里的短信内容
范例:
Import "shanhai.lua"
// 短信应用的包名
Dim app = "com.android.mms"
Dim sms = ""
Do
sms = shanhai.GetNotification(app)
If sms <> "" Then
TracePrint "当前收到的短信内容是:" & sms
Else
Delay 1000
End If
Loop
Import "shanhai.lua"
Dim i=0, arrXY, x, y
// 启动脚本5秒之后让用户点击屏幕并记录坐标
Do
If i > 5 Then
arrXY = ShanHai.Coordinate(GetScreenX(), GetScreenY(), 10)
x = arrXY(0) : y = arrXY(1)
ShowMessage "当前点击的坐标为: " & x & "x" & y
Delay 2000
Exit Do
Else
i = i + 1
Delay 1000
End If
Loop
Import "shanhai.lua"
Dim ui_delay = cint(ReadUIConfig("启动延迟"))
Dim ui_isInput = ReadUIConfig("录入坐标")
Dim arrXY, x, y, i = 1
// 启动脚本后延迟一段时间
For i = 0 To ui_delay
Delay 1000
Next
// 等待用户点击屏幕坐标,根据设置选择是否记录到文本或者直接复制到剪切板
Do
arrXY = ShanHai.Coordinate(GetScreenX(), GetScreenY(), 10)
x = arrXY(0) : y = arrXY(1)
If ui_isInput Then
Call File.WriteLine("/sdcard/坐标记录.txt", i, x & "x" & y)
Else
Sys.SetClipText x & "x" & y
End If
Loop
Import "shanhai.lua"
Do
If shanhai.IsDisplayChange(21, 25, 96, 69, 8, 1) Then
TracePrint "移动中"
Else
TracePrint "画面停止变化,已到达指定地点"
Exit Do
End If
Delay 1000
Loop
Import "shanhai.lua"
Call shanhai.LogPath("/sdcard/日志1.log")
// 开始记录日志1
For i = 1 To 10
call shanhai.OutLog ("当前循环:" & i)
Delay 1000
Next
Call shanhai.LogPath("/sdcard/日志2.log")
// 开始记录日志2
For i = 1 To 10
call shanhai.OutLog ("当前循环:" & i)
Delay 1000
Next
Import "shanhai.lua"
Dim IntX,IntY
FindMultiColor 0,0,0,0,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY
If intX > -1 Then
Call 记录日志(1, "坐标在" & intX & "," & intY)
Tap IntX, IntY
Delay 1000
Call 记录日志(2, "签到成功")
Else
Call 记录日志(0, "特征没找到")
End If
Function 记录日志(id, msg)
Select Case id
Case 0
Call shanhai.LogPath("/sdcard/错误异常.log")
Case 1
Call shanhai.LogPath("/sdcard/信息输出.log")
Case 2
Call shanhai.LogPath("/sdcard/收益统计.log")
End Select
Call shanhai.OutLog(msg)
End Function
Import "shanhai.lua"
Call shanhai.LogPath("/sdcard/日志1.log")
// 开始记录日志1
For i = 1 To 10
call shanhai.OutLog ("当前循环:" & i)
Delay 1000
Next
Call shanhai.LogPath("/sdcard/日志2.log")
// 开始记录日志2
For i = 1 To 10
call shanhai.OutLog ("当前循环:" & i)
Delay 1000
Next
Import "shanhai.lua"
Dim IntX,IntY
FindMultiColor 0,0,0,0,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY
If intX > -1 Then
Call 记录日志(1, "坐标在" & intX & "," & intY)
Tap IntX, IntY
Delay 1000
Call 记录日志(2, "签到成功")
Else
Call 记录日志(0, "特征没找到")
End If
Function 记录日志(id, msg)
Select Case id
Case 0
Call shanhai.LogPath("/sdcard/错误异常.log")
Case 1
Call shanhai.LogPath("/sdcard/信息输出.log")
Case 2
Call shanhai.LogPath("/sdcard/收益统计.log")
End Select
Call shanhai.OutLog(msg)
End Function
Import "shanhai.lua"
// 如果没有开WiFi就自动开启WiFi
If shanhai.IsConnectWifi() Then
TracePrint "WiFi已开启"
Else
TracePrint "未开启WiFi"
Call shanhai.ControlWifi()
End If
Import "shanhai.lua"
Dim app = "com.tencent.tmgp.jxqy"
Do
// 判断游戏是否需要下载更新
FindMultiColor 287,228,347,276,"230DC3","5|15|230DC3,-18|1|FFFFFF",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
TracePrint "游戏需要更新"
If shanhai.IsConnectWifi() Then
TracePrint "WiFi已开启"
Tap intX,intY '点击更新
Else
TracePrint "未开启WiFi"
Call shanhai.ControlWifi()
Tap intX,intY '点击更新
End If
Exit Do
Else
Delay 1000
End If
Loop
Import "shanhai.lua"
If shanhai.GetNavigationBar() > 0 Then
TracePrint "当前设备有虚拟键"
If shanhai.IsVM() Then
TracePrint "设备是模拟器"
ShowMessage "请手动把模拟器的虚拟键关闭再使用脚本"
Delay 2000
EndScript
Else
TracePrint "设备是手机"
If shanhai.SetNavigationBar(false) Then
ShowMessage "已隐藏虚拟键,重启手机生效"
Delay 2000
Else
ShowMessage "隐藏虚拟键失败,请使用第三方工具手动隐藏"
Delay 2000
End If
End If
End If
Import "shanhai.lua"
Dim UI_XML, XY, arrXY
// 获取当前界面的XML信息
UI_XML = shanhai.GetUIXml()
XY = FindXML(UI_XML, "社区")
If XY <> "" Then
arrXY = Split(XY,",")
TracePrint "社区按钮的坐标为:" & arrXY(0) & "x" & arrXY(1)
End If
Function FindXML(XML, key)
// 组合正则表达式
Dim pattern = "text=""" & key & """.-bounds=""%[([^%]]+)%]"
dim RegexArr = shanhai.RegexFind(XML,pattern)
If RegexArr(0) <> null Then
TracePrint "匹配到字符"
FindXML = RegexArr(0)
Else
TracePrint "未匹配到字符"
FindXML = ""
End If
End Function
Import "shanhai.lua"
// 预定义微信版本号
Dim ver = "6.3.22"
// 判断当前微信版本是否符合要求
If shanhai.AppVersion("com.tencent.mm") = ver Then
TracePrint "当前微信版本符合要求"
Else
TracePrint "当前微信版本不符合要求"
PutAttachment GetSdcardDir(), "weixin.apk"
Call shanhai.Install(GetSdcardDir() & "/weixin.apk")
End If
Import "shanhai.lua"
// 预定义游戏版本号
Dim ver = "1.9.3"
// 判断当前游戏版本是否符合要求
If shanhai.AppVersion("com.tencent.tmgp.cwxjlfkk") = ver Then
TracePrint "当前游戏是最新版本"
Else
ShowMessage "请更新游戏版本到最新"
Delay 2000
EndScript
End If
Import "shanhai.lua"
Dim RAM, intx, inty
Do
// 内存剩余空间小于20%时清理内存
RAM = shanhai.GetRAM()
If RAM < 20 Then
Sys.ClearMemory()
End If
FindMultiColor 0,0,0,0,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY
If intX > -1 Then
TracePrint "找到啦,坐标在"&intX&","&intY
Else
TracePrint "没找到"
End If
Delay 1000
Loop
Import "shanhai.lua"
// 自动设置一个系统能够匹配到的输入法
call MatchIME()
Function MatchIME()
Dim localime = array("baidu.input_mi","FlyIME", "google", "xinshuru","gokeyboard", "smartinputv5", "qqpinyin", "baidu", "komoxo", "mobileanjian", "sogou")
Dim sysime = shanhai.GetIME()
For i = 0 To UBOUND(sysime)
For j = 0 To UBOUND(localime)
If InStr(1, sysime(i), localime(j))>0 Then
MatchIME = j
Call shanhai.SetIME(j)
Exit Function
Else
MatchIME = -1
End If
Next
Next
End Function
Import "shanhai.lua"
// 备份QQ应用数据
If CopyAppData("com.tencent.mobileqq") Then
TracePrint "数据备份成功"
Else
TracePrint "数据备份失败"
End If
Function CopyAppData(pkgname)
Dim appdata = "/data/data/" & pkgname
// 挂载系统文件夹
If shanhai.Mount("/data") Then
// 判断应用数据是否存在
If Dir.Exist(appdata) = 2 Then
// 把数据复制到SD卡里
Dir.Copy appdata, GetSdcardDir() & pkgname
Else
TracePrint "找不到应用数据"
End If
Else
TracePrint "挂载失败"
End If
// 验证是否备份成功
If Dir.Exist(GetSdcardDir() & pkgname) = 2 Then
CopyAppData = true
Else
CopyAppData = false
End If
End Function
//从字符串中提取出连续的数字
Dim text = "验证码:123456,如非本人操作,请忽略本短信。"
Dim tstr = ""
Dim num = ""
For i = 1 To Len(text)
tstr = mid(text, i, 1)
If IsNumeric(tstr) Then
num = num & tstr
End If
Next
TracePrint num
模式匹配提取:
Import "shanhai.lua"
Dim text = "验证码:123456,如非本人操作,请忽略本短信。"
dim RegexArr = shanhai.RegexFind(text,"%d+")
For Each v In RegexArr
TracePrint v
Next
Import "shanhai.lua"
//从字符串中单独提取出网络ip的地址
Dim text = "网络ip来自:117.25.63.155,本地ip:192.168.1.1"
dim RegexArr = shanhai.RegexFind(text,"网络ip来自:(%d+%.%d+%.%d+%.%d+)")
For Each v In RegexArr
TracePrint v
Next
Import "shanhai.lua"
Dim text = "sdfpppqwe"
dim RegexArr = shanhai.RegexFind(text,"[^p]+")
For Each v In RegexArr
TracePrint v
Next
这样就是排除了字母p,匹配到了字母p以外其他的字符。
小括号和中括号是在模式匹配中很常用到的一些办法,大家要灵活的去应用他们的组合
Import "shanhai.lua"
Dim text = "提取:这里是想要提取的内容123456<这里是不想要提取的内容>"
dim RegexArr = shanhai.RegexFind(text,"提取:([^<]+)")
For Each v In RegexArr
TracePrint v
Next
Import "shanhai.lua"
Dim html = url.Get("http://bbs.anjian.com/showtopic-630523-1.aspx")
dim RegexArr = shanhai.RegexFind(html,"<font size=""3"">([^<]+)</font>")
For Each v In RegexArr
TracePrint v
Next
Import "shanhai.lua"
Function 限时免费(日期)
Dim datearr = split(日期, "-")
Dim ret = shanhai.CompareTime(datearr(0), datearr(1), datearr(2), 0, 0, 0)
If ret = -1 Then
ShowMessage "脚本已经到期"
Delay 2000
EndScript
ElseIf ret > 0 Then
ShowMessage "脚本未到期,可以继续使用"
Delay 2000
ElseIf ret = null Then
ShowMessage "联网失败,请检查网络"
Delay 2000
EndScript
End If
End Function
// 判断日期是否到达了2016年7月29号0点0分0秒
Call 限时免费("2016-08-27")
我们还可以利用LateTime 命令来实现限制指定天数的功能
范例:
Import "shanhai.lua"
Function 限制天数(天数)
Dim 路径 = "/sdcard/data.txt"
Dim 日期 = ShanHai.LateTime(天数)
// 这里把计算好的到期时间写入文件以便脚本启动时进行判断
If Dir.Exist(路径) = 1 Then
TracePrint "已有日期文件"
日期 = file.Read(路径)
Else
Call file.Write(路径, 限定日期)
End If
Dim datearr = split(日期, "-")
Dim ret = shanhai.CompareTime(datearr(0), datearr(1), datearr(2), 0, 0, 0)
If ret = -1 Then
ShowMessage "脚本已经到期"
Delay 2000
EndScript
ElseIf ret > 0 Then
ShowMessage "脚本未到期,可以继续使用"
Delay 2000
ElseIf ret = null Then
ShowMessage "联网失败,请检查网络"
Delay 2000
EndScript
End If
End Function
Import "ShanHai.lua"
// 在界面上设计一个输入框用于输入网址
Dim AppUrl = ReadUIConfig("歌曲地址")
If AppUrl <> "" Then
ShowMessage "打开指定歌曲链接"
Delay 2000
Call shanhai.OpenWeb(AppUrl)
End If
Import "ShanHai.lua"
// 设置搜狗输入法
Call shanhai.Execute("ime set com.sohu.inputmethod.sogou/.SogouIME")
ime 命令是adb shell命令里和输入法有关的命令,可以用来获取输入法和设置输入法,后面是跟上输入法的组件。
这个组件名可以通过山海插件里的GetIME来获取到。
在插件里的设置输入法命令,本身只附带有11种输入法,如果大家设备上有安装其他的输入法的话,那就可以利用execute这个命令自己去切换输入法了。
Import "ShanHai.lua"
Dim ret = shanhai.Execute("dumpsys battery > /sdcard/tmp.txt")
Dim text
If ret Then
TracePrint "命令执行成功"
text = file.Read("/sdcard/tmp.txt")
TracePrint text
Else
TracePrint "命令执行失败"
End If
Import "ShanHai.lua"
Function execute(cmd)
Dim path = GetSdcardDir() & "/tmp.txt"
Dim ret = shanhai.Execute(cmd & " > " & path)
If ret Then
execute = file.Read(path)
Else
execute = ""
End If
End Function
// 获取电源信息
TracePrint execute("dumpsys battery")
// 获取设备内存占用信息
TracePrint execute("dumpsys meminfo")
Function FindPicEx(x, y, x1, y1, pic)
Do
Dim intX, intY
FindPic x, y, x1, y1, pic,"000000",0, 0.8, intX, intY
If intx > -1 Then
FindPicEx = True
Exit Do
Else
FindPicEx = false
End If
Delay 1000
Loop
End Function
Function Click(x, y)
For 5
Tap x, y
Delay 500
Next
End Function
Function SwipeEx(x, y, x1, y1)
For 2
Swipe x, y, x1, y1, 1000
Delay 1000
Next
End Function
Call shanhai.iif(FindPicEx(277,967,364,1018,"Attachment:1.png"),Click(100,200), SwipeEx(100,200,200,600))
Import "ShanHai.lua"
Dim arrNum = array(5,21,878,32,0)
For 5
TracePrint shanhai.RandArray(arrNum)
Next
我们还能实现点击随机的一些坐标
Import "ShanHai.lua"
Dim tPoin = {{543,376}, {490,466}, {556,516}, {500,964}}
Dim tempXY
For 5
tempXY = shanhai.RandArray(tPoin)
TracePrint tempXY[1], tempXY[2]
Tap tempXY[1], tempXY[2]
Delay 1000
Next
Import "ShanHai.lua"
Function GetWeather(city, apikey)
// 定义数据
Dim api_url = "http://apis.baidu.com/apistore/weatherservice/cityname?cityname=" & city
Dim header = "apikey:" & apikey
// 提交信息
Dim json = shanhai.GetHttp(api_url, 10, header)
// json数据转成table数据
Dim table = Encode.JsonToTable(json)
GetWeather = table
End Function
Dim weather = GetWeather("福州", "648fe2b8c016014bbe3b287d0d1c622f")
If weather["errNum"] = 0 Then
TracePrint "福州今日的天气:" & weather["retData"]["weather"]
TracePrint "今日气温:" & weather["retData"]["temp"]
Else
TracePrint "查询失败"
End If
我们还可以通过api去查询汇率
Import "ShanHai.lua"
Function Converter(fromCurrency, toCurrency, amount)
// 定义数据
Dim api_url = "http://apis.baidu.com/apistore/currencyservice/currency?"
api_url = api_url & "&fromCurrency=" & fromCurrency
api_url = api_url & "&toCurrency=" & toCurrency
api_url = api_url & "&amount=" & amount
Dim header = "apikey:648fe2b8c016014bbe3b287d0d1c622f"
// 提交信息
Dim json = shanhai.GetHttp(api_url, 10, header)
// json数据转成table数据
Dim table = Encode.JsonToTable(json)
Converter = table
End Function
Dim currency = Converter("CNY", "USD", 500)
If currency["errNum"] = 0 Then
TracePrint "按照" & currency["retData"]["date"] & "的汇率转换之后的金额是:" & currency["retData"]["convertedamount"]
Else
TracePrint "查询失败"
End If
Dim nums = Array(3, 5, 7, 2, 0, 9)
For i = 1 To UBound(nums)
For j = 0 To UBound(nums)-1
If nums(j) > nums(j + 1) Then
temp = nums(j)
nums(j) = nums(j + 1)
nums(j + 1) = temp
End If
Next
Next
For Each v In nums
TracePrint v
Next
使用起来并不友好~~我们可以直接用sort命令来简化掉
Import "ShanHai.lua"
Dim nums
nums = Array(3, 5, 7, 2, 0, 9)
// 升序排列
nums = shanhai.sort(nums)
For Each v In nums
TracePrint v
Next
// 降序排列
nums = shanhai.sort(nums, true)
For Each v In nums
TracePrint v
Next