|
[引导][末尾有视频教程] |
|
[下载]:[相关接入文件下载] |
百宝云注册码系统_接入例子_精简版.Q
(893.64 KB, 下载次数: 1307)
|
百宝云注册码系统_接入例子_详细版.Q
(900.81 KB, 下载次数: 1332)
|
注:脚本文件(*.Q)附件中已包含相关插件文件,如果不在原例子上修改,记得释放出来带走。 |
|
[导入]:[命令库文件\插件文件] |
下载的文件 | 需要复制到按键根目录下 |
百宝云注册码系统_接入例子.Q | \按键精灵2014\QMScript |
或:直接把(*.Q)文件拖拽到按键精灵软件界面的脚本列表中放开也可以导入。 |
注:脚本文件(*.Q)附件中已包含相关插件文件,如果不在原例子上修改,记得释放出来带走。 |
|
|
|
[接入]:[接入代码使用介绍] |
|
如何查询云应用访问Token:http://bbs.91shenfan.com/thread-534-1-1.html |
关于心跳线程在验证系统中的作用:http://bbs.91shenfan.com/thread-824-1-1.html |
|
[代码]:[需要用到的命令与代码语句] |
初始化:对命令库中的变量进行赋值,登记注册码验证所需的必要信息。 |
- Call 执行注册插件()
- '插件版本获取
- TracePrint qsx.PluginVersion()
- '参数初始化
- 变量_token = "d8ecf56875e36cec76f0d729c387bd71"
- 变量_项目名称 = "测试项目"
- 变量_注册码 = Form1.输入框_注册码.Text//获取界面[注册码]输入框内容
- 变量_解绑密码 = "123456"
- //初始化
- ret = qsx.InitDll(变量_token, 变量_项目名称)
- TracePrint ret
- If ret = 1 then
- TracePrint "初始化成功"
- Else
- Call qsx.GetLastErrorInfo(errinfo)
- TracePrint "初始化失败,错误信息" & errinfo
- EndScript
- End If
- Sub 执行注册插件()
- '注册插件,以便调用百宝云命令功能
- Dim 插件路径, 插件名称
- 插件路径 = "C:\qsx"
- 插件名称 = "WebZCM_COM.dll"
- Call Plugin.File.CreateFolder(插件路径)'创建目录,把相关的文件都放这里,规范好。
- PutAttachment 插件路径, 插件名称'释放插件
- PutAttachment "plugin", "RegDll.dll"'释放RegDll.dll插件到按键官方插件目录中
- Call Plugin.RegDll.Reg(插件路径 & "" & 插件名称)'注册插件
- '创建对象
- Set qsx = CreateObject("qsx.regcode")
- '判断类型确认是否注册插件成功,9=Automation 对象
- If VarType(qsx) <> 9 Then
- Set ws = createobject("Wscript.Shell")
- RunApp "regsvr32 " & 插件路径 & "" & 插件名称 & " /s"
- Delay 1500
- // 再判断插件是否注册成功
- Set qsx = CreateObject("qsx.regcode")
- If VarType(qsx) <> 9 Then
- // 这时,已经确认插件注册失败了。 弹出一些调试信息,以供分析.
- MessageBox "百宝云插件注册失败,当前类型:" & VarType(qsx)
- EndScript
- End If
- End If
- End Sub
复制代码 |
名称 | 是什么,用于什么 |
变量_Token | 应用通讯密钥,用于确认通讯的应用身份标识。[如何查询云应用访问Token] |
变量_项目名称 | 应用项目名称,用于确认通讯的应用中指向哪个项目。 |
变量_注册码 | 登录授权密钥,用于确认登录用户的使用权限与期限。 |
Form1.输入框_注册码.Text | 按键命令,读取界面配置,正式发布“注册码”是从界面上的输入框获取。 |
变量_解绑密码 | 注册解绑密码,用于解绑操作提交参数,在绑定机器码模式下解绑后才可更换机器重新使用。
解绑规则:留空,则验证机器码,通过则本机解绑;而异地解绑必须要有解绑密码。 |
|
注册登录:在执行以上必要参数赋值后,即可执行“ret = qsx.LoginRegCode(注册码)” |
- //注册登录
- ret = qsx.LoginRegCode(变量_注册码)
- TracePrint ret
- If ret = 1 then
- TracePrint "登陆成功"
- Else
- Call qsx.GetLastErrorInfo(errinfo)
- TracePrint "登陆失败,错误信息" & errinfo
- EndScript
- End If
- //获取注册码详细信息
- Call qsx.CheckRegCode(result)
- TracePrint result
复制代码 |
名称 | 是什么,用于什么 |
ret = qsx.LoginRegCode(变量_注册码) | 插件命令名称,注册码登录命令,用于执行获取登录用户的使用授权与期限。
返回值:成功:1,失败:0 |
Call qsx.GetLastErrorInfo(errinfo)
TracePrint "登陆失败,错误信息" & errinfo | 插件命令名称,用于赋值记录通讯请求失败后的错误信息,以便知晓失败原因。 |
Call qsx.CheckRegCode(result)
TracePrint result | 插件命令名称,用于获取注册码详细信息。
返回值:字符串类型
成功:激活时间|到期时间|登陆时间|验证时间
失败:操作失败:xxxxx |
|
开启心跳线程:在“注册登录”成功后,需要“函数_执行心跳检测”。[心跳的作用] |
- //启动心跳线程
- //启动心跳线程
- //启动心跳线程,重要事情说三遍
- //用来检查是否到期,以及是否异地登录被顶号。(参数必须是常量)
- 线程ID = BeginThread(函数_执行心跳检测(600))//间隔600秒心跳一次,10分钟。
复制代码 |
名称 | 是什么,用于什么 |
线程ID = BeginThread(函数_执行心跳检测(600)) | 多线程命令启动线程,用于间隔时间内获取一次注册码剩余时间,判断注册码状态。
函数为:执行心跳线程
传入参数:600,为心跳间隔,单位秒 |
补充:心跳线程内部会负责脚本运行期间的状态监测。
剩余时间判断,到期则停止脚本;
异地登录判断,确认则停止脚本;
网络异常判断,确认则停止脚本。 |
- Sub 函数_执行心跳检测(间隔)
- Set qsx = CreateObject("qsx.regcode")
- //主线脚本以子线程方式启动一个Sub,由这个Sub里调用 函数_执行心跳检测。
- //主线脚本以子线程方式启动一个Sub,由这个Sub里调用 函数_执行心跳检测。
- //主线脚本以子线程方式启动一个Sub,由这个Sub里调用 函数_执行心跳检测,重要事情说三遍。
- //必须开启一个单独线程,来监控是否到期,为了不影响主线循环,所以单独分出来
- //由 qsx.函数_获取共享变量剩余分钟() 变量值来给主线判定是否到期
- //约束间隔范围,不可低于10分钟,不可高于30分钟。
- //验证心跳间隔参数
- If not IsNumeric(间隔) Then
- 间隔 = 600
- Else
- 间隔 = Int(间隔)
- End If
- If CInt(间隔) > 1800 Then
- 间隔 = 1800
- ElseIf CInt(间隔) < 600 Then
- 间隔 = 600
- End If
- Dim 局部_允许失败次数, 局部_失败重试间隔, 局部_首次通讯
- 局部_允许失败次数 = 30
- 局部_失败重试间隔
- 局部_首次通讯 = True
- Dim 局部_等待时间, 局部_剩余分钟
- Do
- 局部_失败重试间隔 = 间隔 \ 2
- //建议间隔10-30分钟,访问一次服务器,原因例子中已写明,没看的请返回看
- If 局部_首次通讯 Then
- 局部_等待时间 = DateAdd("s", 180, Now())//首次3分钟间隔,以此检测一次是否存在重复登录行为
- Else
- 局部_等待时间 = DateAdd("s", 间隔, Now())//单位:秒
- End If
- Do
- Delay 3000
- Loop Until DateDiff("s", 局部_等待时间, Now()) > 0
- //与服务器通讯,获取剩余时间或状态
- For i = 0 To 局部_允许失败次数
- 局部_剩余分钟 = qsx.GetRegCodeTime()
- TracePrint "子线程获取剩余分钟:" & 局部_剩余分钟
- If not IsNumeric(局部_剩余分钟) Then //剩余时间非数字
- TracePrint "错误信息:" & qsx.GetLastErrorInfo()
- Else
- 局部_剩余分钟 = Int(局部_剩余分钟)//类型转换
- If 局部_剩余分钟 = 0 Then
- TracePrint "注册码到期"
- //注册码到期,完全结束脚本
- ExitScript//全部结束,包括子线程
- ElseIf 局部_剩余分钟 < 0 Then
- //剩余时间异常
- TracePrint "错误信息:" & qsx.GetLastErrorInfo()
- ElseIf 局部_剩余分钟 > 0 Then
- //正常,未到期
- Exit For//离开for循环,开始正常等待
- End If
- End If
- //通讯异常,服务器繁忙,并发数占满导致请求超时:等待短暂时间后重试
- TracePrint "通讯异常"
- TracePrint 变量_错误信息
- //次数超出,离开尝试通讯
- If i = 局部_允许失败次数 Then
- TracePrint "通讯失败次数超出"
- ExitScript//尝试次数超出,停止
- End If
- //通讯失败,等待,再尝试
- For i1 = 0 To 局部_失败重试间隔
- Delay 1000
- Next
- 局部_失败重试间隔 = 局部_失败重试间隔 \ 2
- If 局部_失败重试间隔 < 60 Then 局部_失败重试间隔 = 60//间隔不可小于60秒
- Next
- Loop
- End Sub
复制代码 |
|
[工具]:[百宝云_注册码_调试工具.exe] |
|
百宝云注册码系统[调试工具]:http://bbs.91shenfan.com/thread-723-1-1.html |
|
[视频][建议预览图文教程后再看视频] |
|
|