微信安卓辅助-微信安卓辅助养号脚本

/*
微信辅助
1.0.0
*/
Import "ShanHai.lua"
 
 
//测试方法
Call 测试()
Function 测试()
// Dim 当前界面配置 = ShanHai.GetUIXml()
// TracePrint 当前界面配置
// Dim 已经私聊过的列表 = {"name":""}
// Dim RegexArr = shanhai.RegexFindEx(当前界面配置,"<node index=""0"" text=""([^""]+)""[^>]+><node index=""[^""]+"".text="""".resource.id=""com.tencent.mm:id/bn1"".-bounds=""([^""]+)""")
// Dim 数 = 0
// For i = 0 To UBOUND(RegexArr)
//
// Dim table = {"name":RegexArr(i,0),"坐标":RegexArr(i,1),"是否添加过":false}
// 列表[数] = table
// 数 = 数+1
// Next
End Function
 
 
Function 矩形转换坐标(矩形)
Dim RegexArr = shanhai.RegexFindEx(矩形,"(%d+),(%d+)")
Dim 坐标 = Array(0,0)
Dim x,y
For i = 0 To UBOUND(RegexArr)
x = x + RegexArr(i, 0)
y = y + RegexArr(i, 1)
Next
坐标(0) = Cint(x / (UBOUND(RegexArr)+1))
坐标(1) = Cint(y / (UBOUND(RegexArr)+1))
矩形转换坐标=坐标
End Function
 
Function 回到首页()
  Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
  Dim 应用数据 = 获取全局变量("应用数据")
    Do
Delay 脚本相关数据["长延时"]
If 判定界面() = "首页" Then 
TracePrint "确认首页"
Exit Do
Else 
KeyPress "back"
Delay 脚本相关数据["长延时"]
End If
 
If Sys.AppIsFront(应用数据["应用包名"]) = false Then 
TracePrint "连续按多次back,有时候可能因为卡顿导致回到桌面,重启即可"
RunApp 应用数据["应用包名"]
Delay 3000
End If
    Loop
End Function
 
Function 点击发现()
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim i= 0
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 450, 1212
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("66|217|6161F8-101010,77|224|F15A6C-101010,81|235|EFB23C-101010,74|246|EEE256-101010,63|251|56ED5A-101010", 0.9) = 1 Then
TracePrint "点击生效,重置超时时间"
脚本相关数据["任务计时重置"] = True
设置全局变量("脚本相关数据",脚本相关数据)
Delay 脚本相关数据["短延时"]
Exit Do
End If
Loop
End Function
 
Function 点击朋友圈()
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim i= 0
Dim 计时 = TickCount()
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 313, 238
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("661|97|FFFFFF-101010,646|101|FFFFFF-101010,613|101|3F3A39-101010,572|104|3F3A39-101010", 0.9) = 1 Then
TracePrint "点击生效,重置超时时间"
脚本相关数据["任务计时重置"] = True
设置全局变量("脚本相关数据",脚本相关数据)
Delay 脚本相关数据["短延时"]
Exit Do
End If
Loop
End Function
 
Function 点击朋友圈照相机()
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim i= 0
Dim 计时 = TickCount()
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 664, 108
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("415|106|1F1D1C-101010,475|106|1F1D1C-101010,662|100|7F7F7F-101010,680|106|7F7F7F-101010", 0.9) = 1 Then
TracePrint "点击生效,重置超时时间"
脚本相关数据["任务计时重置"] = True
设置全局变量("脚本相关数据",脚本相关数据)
Delay 脚本相关数据["短延时"]
Exit Do
End If
Loop
End Function
 
Function 点击朋友圈照相机照片()
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim i= 0
Dim 计时 = TickCount()
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 390, 606
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("601|81|30682D-101010,603|107|30682D-101010,682|85|30682D-101010,684|107|30682D-101010", 0.9) = 1 Then
TracePrint "点击生效,重置超时时间"
脚本相关数据["任务计时重置"] = True
设置全局变量("脚本相关数据",脚本相关数据)
Exit Do
End If
Loop
End Function
 
Function 制作内容发送()
Dim 用户数据 = 获取全局变量("用户数据")
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Delay 脚本相关数据["长延时"]
Tap 76, 1226
Delay 脚本相关数据["长延时"]
Tap 365,337 + (用户数据["朋友圈发消息"]["文件夹位置"] – 1)*184
Delay 脚本相关数据["长延时"]
For i = 0 To 2
For j = 0 To 2
Tap 203 + 241 * j, 175 + 241 * i
Delay 脚本相关数据["短延时"]
Next
Next
Delay 脚本相关数据["短延时"]
Tap 653,94
Delay 脚本相关数据["长延时"]
InputText 用户数据["朋友圈发消息"]["内容"]
Delay 脚本相关数据["长延时"]
 
Dim i= 0
Dim 计时 = TickCount()
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 645, 101
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("661|97|FFFFFF-101010,646|101|FFFFFF-101010,613|101|3F3A39-101010,572|104|3F3A39-101010", 0.9) = 1 Then
TracePrint "发送成功,记录"
脚本相关数据["任务结束标志"] = True
用户数据["朋友圈发消息"]["已完成次数"] = 用户数据["朋友圈发消息"]["已完成次数"] + 1
用户数据["朋友圈发消息"]["上一次发送时间"] = Time()
TracePrint "当前已完成次数:"& 用户数据["朋友圈发消息"]["已完成次数"]
设置全局变量 "脚本相关数据", 脚本相关数据
设置全局变量 "用户数据", 用户数据
If 用户数据["朋友圈发消息"]["已完成次数"] = 用户数据["朋友圈发消息"]["发送次数"]+0 Then 
            TracePrint "朋友圈发消息任务完成"
            用户数据["朋友圈发消息"]["是否需要"] = false
            设置全局变量 "用户数据", 用户数据
            End If
Delay 脚本相关数据["短延时"]
Exit Do
End If
Loop
End Function
 
Function 点击发现_方法2()
Dim 当前界面配置 = ShanHai.GetUIXml()
Dim RegexArr = shanhai.RegexFindEx(当前界面配置,"text=""发现"".-bounds=""([^""]+)""")
Dim 发现坐标 = 矩形转换坐标(RegexArr(0,0))
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim i= 0
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 发现坐标(0), 发现坐标(1)
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
当前界面配置 = ShanHai.GetUIXml()
If ShanHai.CountStr(当前界面配置,"扫一扫")>=1 and ShanHai.CountStr(当前界面配置,"摇一摇")>=1 Then
TracePrint "点击生效,重置超时时间"
脚本相关数据["任务计时重置"] = True
设置全局变量 "脚本相关数据", 脚本相关数据
TracePrint "使用XML配置读取方式,返回下一个要点击的地方的坐标"
RegexArr = shanhai.RegexFindEx(当前界面配置, "text=""附近的人"".-bounds=""([^""]+)""")
点击发现_方法2 = RegexArr(0,0)
Delay 脚本相关数据["短延时"]
Exit Do
End If
Loop
End Function
 
Function 点击附近的人(坐标列表)
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim 当前界面配置,RegexArr
Dim 附近的人坐标 = 矩形转换坐标(坐标列表)
Dim i= 0
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
Tap 附近的人坐标(0), 附近的人坐标(1)
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("664|82|FFFFFF-101010,664|98|FFFFFF-101010,664|104|3F3A39-101010,664|113|FFFFFF-101010", 0.9) = 1 Then
TracePrint "点击生效,重置超时时间"
脚本相关数据["任务计时重置"] = True
设置全局变量 "脚本相关数据", 脚本相关数据
Delay 脚本相关数据["短延时"]
Exit Do
End If
Loop
End Function
 
Function 开始打招呼()
Dim 用户数据 = 获取全局变量("用户数据")
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim 已打招呼人数 = 0
 
Dim 间隔 = 128              //截图找上下两个的距离
Dim 起始X = 404
Dim 起始Y = 216
Dim 一页打招呼人数 = 8
Do
For i = 0 To 一页打招呼人数-1
Tap 起始X, 起始Y + i * 间隔
Delay 脚本相关数据["长延时"]
Dim 打招呼返回 = 打招呼()
If 打招呼返回 = True Then 
已打招呼人数 = 已打招呼人数 + 1
TracePrint "已打招呼人数:"&已打招呼人数
TracePrint 用户数据["附近的人打招呼"]["打招呼人数"]
If 用户数据["附近的人打招呼"]["打招呼人数"]+0 = 已打招呼人数 Then 
脚本相关数据["任务结束标志"] = True
用户数据["附近的人打招呼"]["是否需要"] = false
设置全局变量 "用户数据", 用户数据
设置全局变量 "脚本相关数据", 脚本相关数据
Exit Do
End If
End If
Delay 脚本相关数据["短延时"]
Next
Delay 脚本相关数据["长延时"]
TouchDown 379, 1122, 1
Delay 脚本相关数据["短延时"]
TouchMove 379, 80, 1, 700
Delay 脚本相关数据["短延时"]
TouchMove 379, 81, 1, 300
Delay 脚本相关数据["短延时"]
TouchUp 1
Delay 脚本相关数据["长延时"]
Loop
 
End Function
 
Function 打招呼()
Dim 用户数据 = 获取全局变量("用户数据")
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
Dim 打招呼坐标 = Array()
Dim intX,intY
Dim i= 0
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
FindMultiColor 0,0,0,0, "19AD1A-101010","-115|-35|19AD1A-101010,-114|32|19AD1A-101010,200|39|19AD1A-101010", 0, 0.9, intX, intY
If intX > -1 And intY > -1 Then
Tap intX,intY
End If
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
If CmpColorEx("602|83|19AD1A-101010,601|114|19AD1A-101010,685|84|19AD1A-101010,683|116|19AD1A-101010", 0.9) = 1 Then
TracePrint "到了输入界面"
脚本相关数据["任务计时重置"] = True
设置全局变量 "脚本相关数据", 脚本相关数据
Delay 脚本相关数据["长延时"]
InputText 用户数据["附近的人打招呼"]["内容"]
Delay 脚本相关数据["长延时"]
i = 0
Do
Delay 脚本相关数据["短延时"]
If i mod 10 = 0 Then 
KeyPress "back"
i=i+1
Else 
i=i+1
End If
Delay 脚本相关数据["短延时"]
FindMultiColor 0,0,0,0, "19AD1A-101010","-115|-35|19AD1A-101010,-114|32|19AD1A-101010,200|39|19AD1A-101010", 0, 0.9, intX, intY
If intX > -1 And intY > -1 Then
TracePrint "打招呼完成"
Delay 脚本相关数据["短延时"]
KeyPress "back"
Delay 脚本相关数据["长延时"]
Delay 脚本相关数据["长延时"]
脚本相关数据["任务计时重置"] = True
设置全局变量 "脚本相关数据", 脚本相关数据
打招呼 = true
Exit Function
End If
Loop
End If
Loop
End Function
 
Function 朋友圈发消息()
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
    Dim 线程ID = Thread.Start(朋友圈发消息进程)
    Dim 计时 = TickCount()
    Dim 超时次数 = 0
    Do
        Delay 脚本相关数据["长延时"]
        If TickCount() – 计时 > 脚本相关数据["超时时间"]*1000 Then 
            Thread.Stop (线程ID)
            超时次数 = 超时次数+1
            Call 超时处理()
            Exit Do
        End If
        脚本相关数据 = 获取全局变量("脚本相关数据")
        If 脚本相关数据["任务计时重置"] = True Then 
        TracePrint "任务稳定进行,重置超时"
        脚本相关数据["任务计时重置"] = false
        设置全局变量 "脚本相关数据", 脚本相关数据
        计时 = TickCount()                      //重置计时
        End If
        脚本相关数据 = 获取全局变量("脚本相关数据")
        If 脚本相关数据["任务结束标志"] = True Then 
        TracePrint "等待重新分发任务"
        脚本相关数据["任务结束标志"] = false
        设置全局变量 "脚本相关数据", 脚本相关数据
        Exit Do
        End If
        Delay 脚本相关数据["长延时"]
    Loop
End Function
 
Function 朋友圈发消息进程()
Dim 当前界面配置 = 判定界面()
If 当前界面配置 = "未知界面" Then 
Call 回到首页()
Call 点击发现()
Call 点击朋友圈()
Call 点击朋友圈照相机()
Call 点击朋友圈照相机照片()
Call 制作内容发送()
ElseIf 当前界面配置 = "首页" Then
Call 点击发现()
Call 点击朋友圈()
Call 点击朋友圈照相机()
Call 点击朋友圈照相机照片()
Call 制作内容发送()
End If
End Function
 
Function 附近的人打招呼()
Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
    Dim 线程ID = Thread.Start(附近的人打招呼线程)
    Dim 计时 = TickCount()
    Dim 超时次数 = 0
    Do
        Delay 脚本相关数据["长延时"]
        If TickCount() – 计时 > 脚本相关数据["超时时间"]*1000 Then 
            Thread.Stop (线程ID)
            超时次数 = 超时次数+1
            Call 超时处理()
            Exit Do
        End If
        脚本相关数据 = 获取全局变量("脚本相关数据")
        If 脚本相关数据["任务计时重置"] = True Then 
        TracePrint "任务稳定进行,重置超时"
        脚本相关数据["任务计时重置"] = false
        设置全局变量 "脚本相关数据", 脚本相关数据
        计时 = TickCount()                      //重置计时
        End If
        脚本相关数据 = 获取全局变量("脚本相关数据")
        If 脚本相关数据["任务结束标志"] = True Then 
        TracePrint "等待重新分发任务"
        脚本相关数据["任务结束标志"] = false
        设置全局变量 "脚本相关数据", 脚本相关数据
        Exit Do
        End If
        Delay 脚本相关数据["长延时"]
    Loop
End Function
 
Function 附近的人打招呼线程()
Dim 当前界面配置 = 判定界面()
Dim 坐标列表
If 当前界面配置 = "未知界面" Then 
Call 回到首页()
坐标列表 = 点击发现_方法2()
Call 点击附近的人(坐标列表)
Call 开始打招呼()
ElseIf 当前界面配置 = "首页" Then
坐标列表 = 点击发现_方法2()
Call 点击附近的人(坐标列表)
Call 开始打招呼()
End If
End Function
 
 
Function 判定界面()
Dim 当前界面配置
当前界面配置 = ShanHai.GetUIXml()
If 当前界面配置 = "" Then 
判定界面 = "未知界面"
End If
    If ShanHai.CountStr(当前界面配置, "我") >= 1 and shanhai.CountStr(当前界面配置, "通讯录") >= 1 and shanhai.CountStr(当前界面配置, "发现") >=1 Then 
TracePrint "当前是首页"
判定界面 = "首页"
Exit Function
ElseIf Instr(1, 当前界面配置, "你拍的照片") > 0 Then
判定界面 = "你拍的照片"
Exit Function
ElseIf Instr(1, 当前界面配置, "退出此次编辑") > 0 Then
判定界面 = "退出此次编辑"
Exit Function
End If
End Function
 
 
Function 初始化数据()
    //用户数据
    Dim 用户数据 =_
{_
  "朋友圈发消息":{_
  "是否需要":ReadUIConfig("朋友圈发消息"),_
  "内容":ReadUIConfig("朋友圈发消息_内容"),_
"时间间隔":ReadUIConfig("朋友圈发消息_时间间隔"),_
"发送次数":ReadUIConfig("朋友圈发消息_发送次数"),_
"文件夹位置":ReadUIConfig("朋友圈发消息_文件夹位置"),_
"已完成次数":0,_
    "上一次发送时间":0_
    },_
    "附近的人打招呼":{_
    "是否需要":ReadUIConfig("附近的人打招呼"),_
    "打招呼人数":ReadUIConfig("附近的人打招呼_打招呼人数"),_
    "内容":ReadUIConfig("附近的人打招呼_内容")_
    }_
}
    Call 设置全局变量("用户数据", 用户数据)
 
    //应用的数据
    Dim 应用数据 =_
{_
  "应用名称":"微信",_
  "应用包名":"com.tencent.mm"_
}
    Call 设置全局变量("应用数据", 应用数据)
 
    //脚本相关的数据
    Dim 脚本相关数据 =_
{_
  "任务结束标志":false,_
  "任务计时重置":false,_
  "超时时间":15,_         
  "短延时":200,_          
  "长延时":1000_         
    }
    Call 设置全局变量("脚本相关数据", 脚本相关数据)
End Function
 
Function 初始化应用()
    Dim 应用数据 = 获取全局变量("应用数据")
    Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
 
    If Sys.AppIsFront(应用数据["应用包名"]) = True Then   //判断微信应用是否在前台
        TracePrint "应用在前台,无需处理"
    Else 
        RunApp 应用数据["应用包名"]
        Do
            Delay 脚本相关数据["长延时"]
            If Sys.AppIsFront(应用数据["应用包名"]) = True Then 
                TracePrint "启用应用成功"
                Delay 脚本相关数据["长延时"]
                Exit Do
            End If
            Delay 脚本相关数据["长延时"]
        Loop
    End If    
End Function
 
Function 任务管理()
    Dim 用户数据
    Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
    Dim 计时 = TickCount()
    Do
    用户数据 = 获取全局变量("用户数据")
    Delay 脚本相关数据["长延时"]
        Dim 任务名称, 任务属性
        For Each 任务名称, 任务属性 In 用户数据    //遍历用户任务
            If 任务属性["是否需要"] = true Then    //检测任务是否需要做
                If 任务自检(任务名称) = true Then   //任务本身自检是否可做
                任务分发 (任务名称)             //分发任务
                Delay 脚本相关数据["长延时"]
                Exit For
                End If
            End If
        Next
        Delay 脚本相关数据["长延时"]
        Dim 是否还有任务 = false
        For Each 任务名称, 任务属性 In 用户数据    //可以这样变量
            If 任务属性["是否需要"] = true Then 
               是否还有任务 = true
            End If
        Next
        If 是否还有任务 = false Then 
            TracePrint "所有任务完成,耗时"& TickCount()-计时&"毫秒"
            Exit Do
        End If
Delay 脚本相关数据["长延时"]
    Loop
End Function
 
Function 任务分发(任务名称)
    If 任务名称 = "朋友圈发消息" Then 
        Call 朋友圈发消息()
    ElseIf  任务名称 = "附近的人打招呼"
        Call 附近的人打招呼()
    End If
End Function
 
Function 任务自检(任务名称)
TracePrint "开始进行自检—"&任务名称&"—"
    Dim 用户数据 = 获取全局变量("用户数据")
    If 任务名称 = "朋友圈发消息" Then 
        If 用户数据["朋友圈发消息"]["上一次发送时间"] <> 0 and (Time() – 用户数据["朋友圈发消息"]["上一次发送时间"]) < 用户数据["朋友圈发消息"]["时间间隔"] * 60 Then
        TracePrint "任务还未到应做时间,检测其他任务"
        任务自检 = false
        Else 
        TracePrint "任务可做,自检通过"
        任务自检 = true
        End If
    ElseIf 任务名称 = "附近的人打招呼" Then
    TracePrint "附近的人打招呼无需自检"
    任务自检 = true
    End If
End Function
 
Function 超时处理()    //主要处理一些导致游戏无法回到首页的弹窗或者闪退
    Dim 应用数据 = 获取全局变量("应用数据")
    Dim 脚本相关数据 = 获取全局变量("脚本相关数据")
    If Sys.AppIsFront(应用数据["应用包名"]) = True Then   //判断微信应用是否在前台
        TracePrint "应用在前台,无需处理" 
        Dim 当前界面配置 = 判定界面()
        If 当前界面配置 = "你拍的照片" Then 
        Tap 423, 126
        Delay 脚本相关数据["长延时"]
        ElseIf 当前界面配置 = "退出此次编辑" Then 
        Tap 542,761
        Delay 脚本相关数据["长延时"]
        End If
        
    Else
    TracePrint "应用可能闪退了,重启应用"
        RunApp 应用数据["应用包名"]
        Do
            Delay 脚本相关数据["长延时"]
            If Sys.AppIsFront(应用数据["应用包名"]) = True Then 
                TracePrint "启用应用成功,恢复任务"
                Delay 脚本相关数据["长延时"]
                Exit Do
            End If
            Delay 脚本相关数据["长延时"]
        Loop
    End If
 
End Function
 
Function 主函数()
    Call 初始化数据()
    Call 初始化应用()
    Call 任务管理()
End Function
 
Call 主函数()
 
 
 
 
//中文化
Function 设置全局变量(key, value)
    Thread.SetShareVar(key,value)
End Function
 
Function 获取全局变量(key)
    获取全局变量 = Thread.GetShareVar(key)
End Function
 
Function BGR2HSV(bgrvalue)
// 补位
If len(bgrvalue) < 6 Then 
bgrvalue = "000000"
End If
// 获取三原色分量
Dim b = left(right(bgrvalue, 6), 2)
Dim g = left(right(bgrvalue, 4), 2)
Dim r = right(bgrvalue, 2)
 
r = CLng("0x"&r)
g = CLng("0x"&g)
b = CLng("0x"&b)
TracePrint r
TracePrint g
TracePrint b
 
// 取最大值和最小值
Dim max = r
Dim min = r
If max < g Then 
max = g
End If
If max < b Then 
max = b
End If
If min > g Then 
min = g
End If
If min > b Then 
min = b
End If
// 计算 hue
Dim h
If r = max Then 
If g – b = 0 and max – min = 0 Then 
h = 0
Else 
h = (g – b) / (max – min)
End If
ElseIf g = max Then 
h = 2 + (B – R) / (max – min)
ElseIf b = max Then 
h = 4 + (R – G) / (max – min)
End If
h = h * 60
If h < 0 Then
h = h + 360
End If
h = Round(h)
// 计算 saturation
Dim s = (max – min) / max
s = s * 100
s = Round(s)
// 计算 value
Dim v = (max / 255) * 100
v = Round(v)
// 组合返回
BGR2HSV = h & "." & s & "." & v
End Function
 
赞 (0)