CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  数据库(包含打印,安装,报表)

系统注册窗体的问题???

楼主xxd88(快乐的茄子)2006-02-14 21:17:15 在 VB / 数据库(包含打印,安装,报表) 提问

实现目标:提供软件试用功能,用户可试用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   Sub  
   
  Private   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 问题点数:100、回复次数:3Top

1 楼yulin70(唐钰小宝)回复于 2006-02-14 22:11:46 得分 0

你的注册限制次数没有那么麻烦  
  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",   RemainDayTop

2 楼yulin70(唐钰小宝)回复于 2006-02-14 22:12:41 得分 0

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

3 楼yulin70(唐钰小宝)回复于 2006-02-14 22:17:10 得分 100

对于取硬盘号做注册是一种常用的技术,我通常与数据库配合使用,先校验数据库中的号码是否为空,不空与硬盘序列号的生成算法的值判断时候一致,如果一致那么不提示,如果不一致要给提示。当然数据库中保存的值是一定要进行加密的了。Top

相关问题

  • 窗体注册的问题!
  • 各位高手: 如何将系统窗体变成MDI的子窗体
  • 怎么让系统里某处窗体里的按钮执行系统主窗体中某菜单:即打开一个窗体?
  • 怎么在任务栏里注册子窗体(巨难)
  • 入门级的程序,注册窗体失败了.
  • 这样替换窗体默认的系统菜单,急急急
  • 当把系统条隐藏后如何移动一个窗体?
  • 无窗体的程序使用系统托盘的问题
  • 如何在窗体里面捕捉到系统的异常?
  • 窗体的位置和窗体属性在2000和XP系统下会发生变化,怎样解决?

关键词

  • 注册
  • 序列号
  • 用户
  • 代码
  • 数据库
  • remainday
  • 试用
  • savesetting
  • 次数
  • 生成

得分解答快速导航

  • 帖主:xxd88
  • yulin70

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo