按键精灵参考代码复制修改即可
Import "Cjson.lua"
Import "ShanHai.lua"
//请求地址
Thread.SetShareVar "请求地址", "https://api.yankami.cn/"
//卡密后台登录账号 获取自己项目的信息
Thread.SetShareVar "开发者账号", ""
//卡密后台项目的ID
Thread.SetShareVar "项目ID", 0
//如果当前版本与服务器返回的版本不一致则提示更新
Thread.SetShareVar "项目版本", 0
//卡密后台项目的项目秘钥
Thread.SetShareVar "项目秘钥",""
//卡密后台登录账号 用户输入:RTrim(ReadUIConfig("账号"))
Thread.SetShareVar "账号", ""
//获取界面输入的卡密 用户输入:RTrim(ReadUIConfig("卡密"))
Thread.SetShareVar "卡密", ""
//首次验证会保存到期时间,首次验证失败会停止!
Thread.SetShareVar "验证超时分钟", 1440//可调整
Thread.SetShareVar "验证心跳频秒", 10//可调整
Thread.SetShareVar "验证时间", False//变量需要 不要调整
Thread.SetShareVar "获取卡密到期时间", False//变量需要 不要调整
//得到当前设备的唯一编号
Thread.SetShareVar "设备编号", GetDeviceID()
获取项目信息()
获取卡密信息()
Function 获取项目信息()
Dim 验证码 = Time()
//发送请求
Dim 请求返回 = ""&URL.Get(Thread.GetShareVar("请求地址")&"xm?phone="&Thread.GetShareVar("开发者账号")&"&xmid="&Thread.GetShareVar("项目ID")&"&yzm="&验证码,1)
TracePrint "获取项目信息:"&请求返回
If InStr(1, 请求返回, "{") <> 1 or InStr(1, 请求返回, "code") = 0 Then
TracePrint "获取项目信息失败"
EndScript//停止辅助
Else
//JSON字符串转换为Table
Dim json = Cjson.Decode(请求返回)
If json["code"] = 201 Then
TracePrint "项目不存在!"
EndScript//停止辅助
ElseIf json["code"] <> 200 Then
TracePrint "获取项目信息失败!"
EndScript//停止辅助
Else
//验证码校验
If InStr(1, Encode.Md5(Thread.GetShareVar("项目秘钥")&ShanHai.Base64En(json["data"])&验证码), json["md5"]) <> 1 Then
TracePrint "非法的返回!"
//Dialog.MsgBox("\t\t\t\t\t\t\t\t提示:非法的返回!",0)
EndScript//停止辅助
Else
TracePrint "成功的返回!"
End If
//JSON字符串转换为Table
Dim data = Cjson.Decode(json["data"])
//项目状态 1启用 0停用
TracePrint "项目状态:"&data["xmzt"]
//版本状态 1启用 0停用
TracePrint "版本状态:"&data["bbzt"]
//项目版本
TracePrint "项目版本:"&data["xmbb"]
//下载地址
TracePrint "下载地址:"&data["xzdz"]
//最低状态 1启用 0停用
TracePrint "最低状态:"&data["zdzt"]
//最低版本
TracePrint "最低版本:"&data["zdbb"]
//更新地址
TracePrint "更新地址:"&data["gxdz"]
//公告状态 1启用 0停用
TracePrint "公告状态:"&data["ggzt"]
//项目公告
TracePrint "项目公告:"&data["xmgg"]
//试用状态 1启用 0停用
TracePrint "试用状态:"&data["syzt"]
//试用时长
TracePrint "试用时长:"&data["sysc"]
//获取项目信息提示用户(data)
End If
End If
End Function
Function 获取项目信息提示用户(data)
//提示公告
If data["ggzt"] = 1 Then
If data["xmgg"] <> Null and data["xmgg"] <> "" Then
Dialog.MsgBox(data["xmgg"],0)
End If
End If
//提示项目已停用
If data["xmzt"] = 0 Then
Dialog.MsgBox("\t\t\t\t\t\t\t 提示:项目已经停用!",0)
EndScript
End If
//提示版本有更新及前往下载
If data["bbzt"] = 1 Then
If data["xmbb"] <> Thread.GetShareVar("项目版本") Then
If Dialog.MsgBox("\t\t\t\t提示:辅助有更新是否前往下载!", 2) = 2 Then
//返回主页
KeyPress "Home"
Delay 1000
//打开下载地址
ShanHai.OpenWeb (data["xzdz"])
//停止辅助
EndScript
End If
End If
End If
End Function
Function 获取卡密信息()
Dim 验证码 = Time()
If not Thread.GetShareVar("获取卡密到期时间") or TickCount() - Thread.GetShareVar("验证时间") >= (Thread.GetShareVar("验证心跳频秒") * 1000) or Thread.GetShareVar("获取卡密到期时间") and 验证码 > Thread.GetShareVar("获取卡密到期时间") Then
If not Thread.GetShareVar("获取卡密到期时间") Then
If Len(Thread.GetShareVar("账号")&"") = 0 Then
Dialog.MsgBox("\t\t\t\t\t\t\t 提示:请输入账号!",0)
EndScript
End If
If Len(Thread.GetShareVar("账号")&"") <> 11 Then
Dialog.MsgBox("\t\t\t\t\t 提示:请输入正确的账号!",0)
EndScript
End If
If Len(Thread.GetShareVar("卡密")&"") = 0 Then
Dialog.MsgBox("\t\t\t\t\t\t\t 提示:请输入卡密!",0)
EndScript
End If
If Len(Thread.GetShareVar("卡密")&"") < 8 or Len(Thread.GetShareVar("卡密")&"") > 40 Then
Dialog.MsgBox("\t\t\t\t\t 提示:请输正确的卡密!",0)
EndScript
End If
If Len(Thread.GetShareVar("设备编号")&"") < 5 or Len(Thread.GetShareVar("设备编号")&"") > 50 Then
Dialog.MsgBox("\t\t\t\t\t\t\t\t\t 设备编号错误:"&Len(Thread.GetShareVar("设备编号")&""),0)
EndScript
End If
End If
//获取卡密信息
Dim 请求返回 = ""&URL.Get(Thread.GetShareVar("请求地址")&"km?phone="&Thread.GetShareVar("账号")&"&xmid="&Thread.GetShareVar("项目ID")&"&km="&Thread.GetShareVar("卡密")&"&jqm="&Thread.GetShareVar("设备编号")&"&yzm="&验证码,1)
TracePrint "获取卡密信息:"&请求返回
If InStr(1, 请求返回, "{") <> 1 or InStr(1, 请求返回, "code") = 0 Then
//如果是首次验证失败停止 或者 验证超时提示验证失败停止
If not Thread.GetShareVar("获取卡密到期时间") or TickCount() - Thread.GetShareVar("验证时间") >= Thread.GetShareVar("验证超时分钟") * (1000 * 60) Then
Dialog.MsgBox("\t\t\t\t\t\t\t验证失败,请重新运行!",0)
EndScript
End If
If 验证码 > Thread.GetShareVar("获取卡密到期时间") Then
TracePrint "卡密已经到期"
Dialog.MsgBox("\t\t\t\t\t\t\t 提示:卡密已经到期!",0)
EndScript
End If
Else
//JSON字符串转换为Table
Dim json = Cjson.Decode(请求返回)
If json["code"] = 201 Then
TracePrint "卡密不存在"
Dialog.MsgBox("\t\t\t\t\t\t\t\t提示:卡密不存在!",0)
EndScript
ElseIf json["code"] = 202 Then
TracePrint "项目已经停用"
Dialog.MsgBox("\t\t\t\t\t\t\t 提示:项目已经停用!",0)
EndScript
ElseIf json["code"] = 203 Then
TracePrint "卡密已经到期"
Dialog.MsgBox("\t\t\t\t\t\t\t 提示:卡密已经到期!",0)
EndScript
ElseIf json["code"] = 204 Then
TracePrint "已经绑定其他设备,提示用户是否换绑"
If Dialog.MsgBox("\t\t\t\t提示:卡密已绑定其他设备!\n\n\t\t\t\t换绑:是否换绑到当前设备使用!", 2) = 2 Then
//换绑机器码
请求返回 = URL.Get(Thread.GetShareVar("请求地址")&"jqm?phone="&Thread.GetShareVar("账号")&"&xmid="&Thread.GetShareVar("项目ID")&"&km="&Thread.GetShareVar("卡密")&"&jqm="&Thread.GetShareVar("设备编号"),1)
TracePrint "换绑机器码:"&请求返回
Dim code
If InStr(1, 请求返回, "code") <> 0 Then
code = Cjson.Decode(请求返回)
End If
If code And code["code"] = 200 Then
TracePrint "换绑成功"
Dialog.MsgBox("\t\t\t\t\t\t\t\t 提示:换绑成功!",0)
Else
TracePrint "换绑失败"
Dialog.MsgBox("\t\t\t\t\t\t\t\t 提示:换绑失败!",0)
End If
End If
//停止辅助
EndScript
ElseIf json["code"] <> 200 Then
Dialog.MsgBox("\t\t\t\t\t\t\t验证失败,请重新运行!",0)
EndScript
Else
//验证码校验
If InStr(1, Encode.Md5(Thread.GetShareVar("项目秘钥")&ShanHai.Base64En(json["data"])&验证码), json["md5"]) <> 1 Then
TracePrint "非法的返回!"
Dialog.MsgBox("\t\t\t\t\t\t\t\t提示:非法的返回!",0)
EndScript//停止辅助
Else
TracePrint "成功的返回!"
End If
//JSON字符串转换为Table
Dim data = Cjson.Decode(json["data"])
//首次验证提示
If not Thread.GetShareVar("获取卡密到期时间") Then
Dialog.MsgBox("\t\t\t卡密到期日期:"&DateTime.Format("%Y-%m-%d %H:%M:%S",data["dqsj"]),0)
End If
Thread.SetShareVar "验证时间", TickCount()
Thread.SetShareVar "获取卡密到期时间", data["dqsj"]
End If
End If
End If
End Function
//【主线程方式一】发送验证 等待返回 需要在主方法中循环调用来验证到期时间
Function 验证卡密()
获取卡密信息()
End Function
//【主线程方式二】在休眠时验证 参数:休眠毫秒 减去等待时间 需要在主方法中循环调用来验证到期时间
Function 休眠验证(s)
Dim 开始时间 = TickCount()
获取卡密信息()
Delay s + (开始时间-TickCount())
End Function
Do
验证卡密()
Delay 1000
Loop