实现目标:提供软件试用功能,用户可试用5次.试用到期后,提示用户注册,并不再允许用户使用.生成C盘序列号,通过编译序列号生成注册号,用户凭注册号注册,注册成功后成为正式用户.对于注册成功的用户下次启动软件时将直接进入系统登陆.
代码写完了!但是就算注册成功了,每次启动还显示要注册的窗口,点试用超过试用次数还可以试用,不知道是哪里出了问题,高手帮忙看下代码?不胜感激!!
代码:
Const REG_SZ = 1
Const REG_DWORD = 4
Const HKEY_CURRENT_USER = &H80000001
Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _
    "GetVolumeInformationA" (ByVal lpRootPathName As String, _
    ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _
    lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
    lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
    ByVal nFileSystemNameSize As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias _
   "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias _
   "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
   ByVal cbData As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
   "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
   ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
   "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
   ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Dim fso, txtfile
Dim mySerial As Long
Dim mylong As Long
Private Sub SNumber()
  mystr = String$(255, Chr$(0))
  mytype = String$(255, Chr$(0))
  mylong = GetVolumeInformation("c:\", mystr, Len(mystr), mySerial, 0, 0, mytype, Len(mytype))
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set txtfile = fso.CreateTextFile(App.Path & "\注册.txt", True)
  txtfile.Write (mySerial)
  txtfile.Close
End Sub
Private Sub Form_Load()
  Call SNumber
  Dim user1 As String
  Dim reg1 As String
  Dim ret1, ret2, lendata1, lendata2 As Long
  ret1 = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\毕业生就业管理系统\user", 0, 0, hKey1)
  ret2 = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\毕业生就业管理系统\reg", 0, 0, hKey2)
  ret1 = RegQueryValueEx(hKey1, "用户名", 0, REG_SZ, ByVal vbNullString, lendata1)
  ret2 = RegQueryValueEx(hKey2, "注册号", 0, REG_SZ, ByVal vbNullString, lendata2)
  user1 = String(lendata1, Chr(0))
  reg1 = String(lendata2, Chr(0))
  RegQueryValueEx hKey1, "用户名", 0, REG_SZ, ByVal user1, lendata1
  RegQueryValueEx hKey2, "注册号", 0, REG_SZ, ByVal reg1, lendata2
  If Len(user1) > 1 And Len(reg1) > 1 Then
     Load main_mm
     main_mm.Show
     Unload Me
  End If
End SubPrivate Sub Command1_Click()
  Dim hKey As Long
  Dim time1 As Long
  Dim lendata As Long
  Dim ret As Long
  ret = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\毕业生就业管理系统\time", 0, 0, hKey)
  ret = RegQueryValueEx(hKey, "使用次数", 0, REG_DWORD, 0, lendata)
  RegQueryValueEx hKey, "使用次数", 0, REG_DWORD, time1, lendata
  RegCreateKey HKEY_CURRENT_USER, "Software\毕业生就业管理系统\time", hKey
  If time1 < 2 Then
     RegSetValueEx hKey, "使用次数", 0, REG_DWORD, time1 + 1, 4
     Load main_mm
     main_mm.Show
     Unload Me
  Else
     MsgBox "软件试用到期,请注册!"
     End
  End If
End Sub
Private Sub Command2_Click()
  Call SNumber
  If Text1.text = "" Then
     MsgBox "系统不允许用户名为空!"
     Exit Sub
  End If
  If Text2.text = Hex(Val(mySerial)) Then
     MsgBox "注册成功!您的注册码为" & Text2.text
     RegCreateKey HKEY_CURRENT_USER, "Software\毕业生就业管理系统\user", hKey1
     RegCreateKey HKEY_CURRENT_USER, "Software\毕业生就业管理系统\reg", hKey2
     RegSetValueEx hKey1, "用户名", 0, REG_SZ, ByVal Text1.text, 10
     RegSetValueEx hKey2, "注册号", 0, REG_SZ, ByVal Text2.text, 20
     Load main_mm
     main_mm.Show
     Unload Me
  Else
     MsgBox "注册号不正确,请重新注册!"
  End If
End Sub
Private Sub Command3_Click()
  End
End Sub

解决方案 »

  1.   

    你的注册限制次数没有那么麻烦
    form_load 中
    Dim RemainDay As Long
    RemainDay = GetSetting("MyApp", "set", "times", 0)
    If RemainDay >= 50 Then
    MsgBox "试用次数已满,请注册"
    Unload Me
    End If
    MsgBox "现在剩下:" & 50 - RemainDay & "试用次数!"
    RemainDay = RemainDay + 1
    SaveSetting "MyApp", "set", "times", RemainDay
      

  2.   

    如果你要把次数清零只要把SaveSetting "MyApp", "set", "times", RemainDay改成
    SaveSetting "MyApp", "set", "times", 0 就可以