在编写应用软件时,经常遇到软件注册问题,比较好的方法是利用硬盘的序列号作为一个产生注册码的依据。但VB不易对系统底层操作,不知有什么简单的方法能用用VB讲读取硬盘序列号。

解决方案 »

  1.   

    网上有人放出了全编程语言的dll调用文件和相应的dll文件,下载后就可以用了,我下过,很好用以下地址是参考,不一定有
    http://www.21tx.com/src/vb/
      

  2.   

    如果如楼上所言,那他必定又是使用getvolumninformation,我也不用去看了。
      

  3.   

    详细介绍:
    在这里,作者提供了获得CPU序列号和网卡Mac地址的方法。
    1.Delphi中可这个控件或这个动态库。控件提供了两个属性,MacAddress和CPUSerialNumber。
    2.Delphi外的语言,请使用这个动态库。动态库提供了两个函数,GetCPUSerialNumber和GetMacAddress
    这些函数和控件,在win2000和winXP中测试通过,在多CPU、多硬盘、使用了并列存储技术的大型服务器上,也测试通过。
    在软件保护中,我们常常要用到机器的标识。根据作者的经验,在好些服务器上无法取得硬盘序列号。特别是在那些使用了并列存储技术或做了镜象的硬盘。网卡也容易更换,因此作者建议使用CPU序列号。
    在同一个压缩包里,还有一个注册码例子程序,演示如何用注册码对软件进行保护!(含delphi源程序)下载的地址是:http://www.herozhan.com/down.asp?id=468&no=1
      

  4.   

    引自陈建华
    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 LongPublic Type SerHdInfo
           strLabel As String
           strType As String
           serNum As String
    End TypePublic Function GetSerialNumber(sRoot As String) As SerHdInfo
        Dim lSerialNum As Long
        Dim R As Long
        Dim RevVal As SerHdInfo
        
        
        RevVal.strLabel = String$(255, Chr$(0))
      '  磁盘卷标
        RevVal.strType = String$(255, Chr$(0))
      ' 文件系统类型
        R = GetVolumeInformation(sRoot, strLabel, Len(strLabel), lSerialNum, 0, 0, strType, Len(strType))
        RevVal.serNum = lSerialNum  '序列号
        GetSerialNumber = RevVal
    End Function