现在好多软件注册方法都是通过获得cpu序列号后,进行加密注册的,而且网上都有现成的代码,但是如果客户的电脑是超线程,两个和多个cpu的话,这种注册方法就有问题了,我想请问大家用delphi如何判断电脑中是一个cpu,还是多个cpu,希望大家帮帮忙,最好有代码和资料的连接,谢谢!

解决方案 »

  1.   

    CPU的序列号
    用CPUID指令可以取到CPU的序列号,首先你可以确定你用的CPU是Intel的,而且只有PIII和PIII以上的才支持。
    然后执行:
        MOV EAX,01H
        CPUID
    如果返回的EDX中,低18位为1,那么这个CPU就是支持序列号的。
    此时EAX就是序列号的高32位。这32位对同一型号的CPU是一样的。
    再执行:
        MOV EAX,03H
        CPUID
    此时的EDX:ECX就是序列号的第64位。要想关闭这个ID,可执行下列代码:    MOV ECX,119H
        RDMSR
        OR EAX,00200000H
        WRMSR不过,一旦执行上述代码,cpu将一直不能取id,直到下次reset。 
      

  2.   

    var SysInfo:TSystemInfo;
    begin
    GetSystemInfo(SysInfo);
    ShowMessage('该机器有:[ '+ inttostr(SysInfo.dwNumberOfProcessors)+' ] 个cpu');
    //关于用delphi获取cpu信息的文章请看
    http://spaces.msn.com/members/sxfzero/Blog/cns!1pWx-PKHCk_IRK_uSH_QbSWA!146.entry