以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  软件注册还是不懂!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=150595)

--  作者:禾成
--  发布时间:2020/6/2 20:08:00
--  软件注册还是不懂!
这段代码按理来说应该是正确的,
但就是达不到效果:
如果注册码正确执行完绿色的代码是不是应该停止了?不再执行后面 If n > 30 Then判断了
另外我注册表项改成了cncgl,有影响吗?
请老师指点一下

Dim n As Integer = Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Count",0)
Dim Code As String =Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskID,"")
Registry.SetValue("HKEY_CURRENT_USER\\Software\\cncgl","Count", n+1)
Dim Ok As Boolean
If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
    OK = True
这里是不是应该加个停止执行的代码?加Return 不起作用,应该怎么写?
Else
    If n > 30 Then
        Forms("注册").Open()
        Code = Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskID,"")
        If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
            OK = True
        End If
    End If
Return  加上这个代码后面的不再执行了
    If n > 60 AndAlso Ok = False Then
        Messagebox.Show("您正在使用的产品已经超出试用次数!")
        Syscmd.Project.Exit()
    End If
End If

[此贴子已经被作者于2020/6/2 20:26:50编辑过]

--  作者:有点蓝
--  发布时间:2020/6/2 20:41:00
--  
不需要加什么return,完全多余,if语句的说明好好看看:http://www.foxtable.com/webhelp/topics/0223.htm

Dim n As Integer = Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Count",0)
Dim Code As String =Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskID,"")
Registry.SetValue("HKEY_CURRENT_USER\\Software\\cncgl","Count", n+1)
Dim Ok As Boolean
If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
    OK = True
Else
    If n > 30 Then
        Forms("注册").Open()
        Code = Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskID,"")
        If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
            OK = True
        End If
    End If
    If n > 60 AndAlso Ok = False Then
        Messagebox.Show("您正在使用的产品已经超出试用次数!")
        Syscmd.Project.Exit()
    End If
End If


--  作者:禾成
--  发布时间:2020/6/3 9:26:00
--  
下面这个条件是满足了的,已经输入正确的注册码
If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
    OK = True

我的注册码提交代码是这样的
If e.Form.Controls("textbox2").Text = EncryptText(e.Form.Controls("textbox1").Text, "abc", "abc") Then    \'判断注册码是否正确
Registry.SetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskId, e.Form.Controls("textbox2").Value)   \'如果正确则写入注册表
MessageBox.show("注册成功,感谢您的使用!")
e.Form.Close()
Else
MessageBox.show("无效的注册码,请重新输入")
End If


为什么还会执行下面的
else
If n > 30 Then
        Forms("注册").Open()


请老师解惑!
你让我看的教程我也看了
这是双分支形式里包含单分支
还有就是声明了一个逻辑变量“OK”感觉这个好像没什么用

--  作者:有点蓝
--  发布时间:2020/6/3 9:45:00
--  
第一个OK赋值确实没有什么用。但是不影响整体逻辑的处理。

如果是第一个if符合条件,不可能会执行else里面的代码的。既然能够进入注册窗口,说明第一个if条件肯定不成立

--  作者:禾成
--  发布时间:2020/6/3 10:03:00
--  

Registry.SetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskId, e.Form.Controls("textbox2").Value)   \'如果正确则写入注册表


上面注册码写入的是红色这个值    SetValue(keyName ,valueName ,value)

下面判断注册码是否正确判断的是蓝色这个值  SetValue(keyName ,valueName ,value)
是这里的问题吗?
这写入的是注册码,判断的是硬盘序号,我总觉得不对
?????

If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
    OK = True

--  作者:有点蓝
--  发布时间:2020/6/3 10:36:00
--  
valueName 是键,GetValue通过这个键取得的也是value的值,不会有问题

自己调试一下
注册码提交代码是这样的
msgbox(e.Form.Controls("textbox1").Text)
msgbox(EncryptText(e.Form.Controls("textbox1").Text, "abc", "abc"))
If e.Form.Controls("textbox2").Text = EncryptText(e.Form.Controls("textbox1").Text, "abc", "abc") Then    \'判断注册码是否正确
msgbox(e.Form.Controls("textbox2").Text)
Registry.SetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskId, e.Form.Controls("textbox2").Text)   \'如果正确则写入注册表
MessageBox.show("注册成功,感谢您的使用!")
e.Form.Close()
Else
MessageBox.show("无效的注册码,请重新输入")
End If

……
    If n > 30 Then
        Forms("注册").Open()
        Code = Registry.GetValue("HKEY_CURRENT_USER\\Software\\cncgl","Register" & HardDiskID,"")
msgbox(Code)
msgbox(HardDiskID )
        If Code > "" AndAlso DecryptText(Code,"abc","abc") = HardDiskID  Then \'如果注册码正确
            OK = True
        End If
    End If
    If n > 60 AndAlso Ok = False Then
        Messagebox.Show("您正在使用的产品已经超出试用次数!")
        Syscmd.Project.Exit()
    End If
……

--  作者:禾成
--  发布时间:2020/6/3 12:46:00
--  
e.Form.Controls("textbox2").Text
搞了那么久原来问题出在这里,
谢谢有点蓝老师
感谢学习路上有你