共享软件一般都要有一个机器码来防止盗版,我一直是用下面的Win32 API函数取硬盘序列号来生成机器码:
GetVolumeInformation
比如说C盘:
GetVolumeInformation('C:\\',nil,0,#SerialNum,NotUsed,VolumeFlags,nil,0)
但是总有用户反映说重装系统后硬盘序就变了,不得不重给注册码。不知这个问题怎么解决?2、听说有用网卡的序列号做机器码的,我有疑问:那么如果用户不用网卡或没装网卡怎么办?或者用户有多块网卡怎么办?比如说用户用普通网卡上内网,WLAN网卡上外网?3、其它有什么办法来得到一个相对“稳定”的机器码吗?

解决方案 »

  1.   

    你那是用的逻辑分区的序列号。要用硬盘的物理序列号。物理序列号是出厂时设定的,高级格式化不会消失。网上搜一下“delphi获得硬盘物理序列号”,有很多地方介绍这样的函数。
      

  2.   

    找到一个,但看上去好象是IDE硬盘的,如果用户是SCSII硬盘可用吗(我的机器是IDE硬盘),不好测试?
    ------------------------------------------------------------------------
    读取硬盘的物理序列号//获得硬盘序列号
    function GetIdeSerialNumber() : PChar; stdcall;
    const
      IDENTIFY_BUFFER_SIZE = 512;
    type
      

  3.   

    你可以采用“硬盘序列号 + 主板序列号 + CPU序列号 + 网卡序列号”生成验证码。这样即使某个硬件没有序列号,也不影响。