请问各位高手,有什么办法使VB的程序只能规定一台机子使用,防止人家拷贝
听说要用到硬盘卷标什么的,望知道的告诉我一声,参与者有分

解决方案 »

  1.   

    可以读取硬件的唯一标示号,比如网卡,硬盘,CPU等等GetVolumeInformation VB声明 
    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 
    说明 
    获取与一个磁盘卷有关的信息 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    lpRootPathName String,欲获取信息的那个卷的根路径 
    lpVolumeNameBuffer String,用于装载卷名(卷标)的一个字串 
    nVolumeNameSize Long,lpVolumeNameBuffer字串的长度 
    lpVolumeSerialNumber Long,用于装载磁盘卷序列号的变量 
    lpMaximumComponentLength Long,指定一个变量,用于装载文件名每一部分的长度。例如,在“c:\component1\component2.ext”的情况下,它就代表component1或component2名称的长度 
    lpFileSystemFlags Long,用于装载一个或多个二进制位标志的变量。对这些标志位的解释如下: 
    FS_CASE_IS_PRESERVED 文件名的大小写记录于文件系统 
    FS_CASE_SENSITIVE 文件名要区分大小写 
    FS_UNICODE_STORED_ON_DISK 文件名保存为Unicode格式 
    FS_PERSISTANT_ACLS 文件系统支持文件的访问控制列表(ACL)安全机制 
    FS_FILE_COMPRESSION 文件系统支持逐文件的进行文件压缩 
    FS_VOL_IS_COMPRESSED 整个磁盘卷都是压缩的 
    lpFileSystemNameBuffer String,指定一个缓冲区,用于装载文件系统的名称(如FAT,NTFS以及其他) 
    nFileSystemNameSize Long,lpFileSystemNameBuffer字串的长度 
      

  2.   

    做一注册程序。用于在安装时“读取硬件的唯一标示号,比如网卡,硬盘,CPU等等” 并将这些信息加密后写到应用程序的某一文件中(最好是写到主程序中,方法如下),在程序加载时检查此信息合法性。在写主程序时定义一全局变量 string 型,初值设为特殊一点的字符。安装时用注册程序找到这字串改为加密后的机器硬件信息其实不是一定要用 string 型,其它类型也可以,只要能保证注册程序可以找得到就可以。
      

  3.   

    买一个USB加密狗(25元左右),然后用它提供的接口(.DLL)直接读写加密狗可能比较好一点.
      

  4.   

    我们公司一直用epass电子钥匙实现软件防拷贝,程序中记录可以使用该软件的钥匙的钥匙号,钥匙中记录这把钥匙使用者的用户名,可以操作的软件(在卖给用户的时候写好),然后在程序运行时判断用户输入的用户名,可以用计时器循环判断,只要用户把了钥匙程序就退出;你要愿意也可以在程序第一次运行的时候读取一个硬件标识写到钥匙中,再次运行时判断。epass的读写开发很简单,我们曾经在里面写入数字证书和私钥文件,用来进行文件加密,授权解密等等。
      

  5.   

    用CPU号吧,
    先获得用户的CPU号,
    再根据你规定的算法生成一个注册号。
      

  6.   

    如果还有什么疑问,建议访问http://www.pediy.com/