我做了一个软件注册的小程序,运行时会弹出一个注册框,输入用户名,首先会生成一个硬盘序列号,
把这个硬盘序列号发送给我做的一个注册机,输入用户名,注册机会根据用户名和硬盘序列号生成一个
注册码,再回到注册框输入用户名和硬盘序列号和注册码就注册成功了,进入用户界面,硬盘序列号为:
1069347913
现在有几个问题:
代码:
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
'定义ini文件的文件变量
Dim n As Integer
Dim registry As String * 255
Dim inifilename As StringFunction GetSerialNumber(strDrive As String) As Long  '取得硬盘的序列号的函数
Dim SerialNum As Long '定义序列号
Dim Res As Long
Dim Temp1 As String
Dim Temp2 As String
Temp1 = String$(255, Chr$(0))
Temp2 = String$(255, Chr$(0))
'调用windows的API函数来获得硬盘序列号
Res = GetVolumeInformation(strDrive, Temp1, Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
GetSerialNumber = SerialNum
End FunctionPrivate Sub Command1_Click()
Dim text As New password  '定义新的加密类
Dim r_string As String
Dim temp As String
Dim registry_string As String
registry_string = Text3.text
' 操作读写ini文件的API函数
Call WritePrivateProfileString("mouselock", "registry", registry_string, password)
r_string = Text2.text
temp = text.crypt("D", registry_string, r_string)
If temp <> Text1.text Then '设置区分码
    MsgBox "注册不成功,请重新注册,共享软件凝聚着作者的血汗"
Else
    MsgBox "注册成功!谢谢使用本软件!"
    Dim registry_string1 As String
    registry_string1 = "registry" '加入注册的标记并保存于ini文件中,可以自己设定
    '调用Windows的API函数来读写ini文件
    Call WritePrivateProfileString("mouselock", "reg", registry_string1, password)
    'Form2.Show
    'Unload Me
End If
End Sub
Private Sub Command2_Click()
Unload Me
End SubPrivate Sub Command3_Click()
Text3.text = GetSerialNumber("c:\") '取C分区的硬盘序列号
End Sub
Option ExplicitFunction crypt(Action As String, Key As String, Src As String) As String
On Error GoTo err
Dim Count As Integer, KeyPos As Integer, KeyLen As Integer, SrcAsc As Integer, dest As String, offset As Integer, TmpSrcAsc, SrcPos
KeyLen = Len(Key)
If Action = "E" Then
Randomize
offset = (Rnd * 10000 Mod 255) + 1
dest = Hex$(offset)
If Len(dest) = 1 Then
dest = "0" + dest
End If
For SrcPos = 1 To Len(Src)
SrcAsc = (Asc(Mid$(Src, SrcPos, 1)) + offset) Mod 255
If KeyPos < KeyLen Then KeyPos = KeyPos + 1 Else KeyPos = 1
SrcAsc = SrcAsc Xor Asc(Mid$(Key, KeyPos, 1))
dest = dest + Format$(Hex$(SrcAsc), "@@")
offset = SrcAsc
Next
ElseIf Action = "D" Then
offset = Val("&H" + Left$(Src, 2))
For SrcPos = 3 To Len(Src) Step 2
SrcAsc = Val("&H" + Trim(Mid$(Src, SrcPos, 2)))
If KeyPos < KeyLen Then KeyPos = KeyPos + 1 Else KeyPos = 1
TmpSrcAsc = SrcAsc Xor Asc(Mid$(Key, KeyPos, 1))
If TmpSrcAsc <= offset Then
TmpSrcAsc = 255 + TmpSrcAsc - offset
Else
TmpSrcAsc = TmpSrcAsc - offset
End If
dest = dest + Chr(TmpSrcAsc)
offset = SrcAsc
Next
End If
crypt = dest
Exit Function
err:
    MsgBox "请输入正确的序列号"
End Function
现在有几个问题:
1,注册时输入1069347913时有效,106934791,10693479,1069347,106934,10693也都是有效的,
但是1069或10694或别的任何数字或字符就是无效的了。
2,注册时如果什么都不输入那么也是有效的。
3,怎么样能让程序在第一次注册成功之后,再使用该软件就不会弹出注册信息?
4,我的文件夹下没有INI文件,请问我的注册信息是保存在哪里面?保存在什么位置?
5,怎么样实现程序末注册限制如使用功能,使用次数的控制?