procedure TForm1.Button1Click(Sender: TObject);
var
        systeminfo: SYSTEM_INFO;
begin
        Memo1.Lines.Clear();
        //获得CPU型号
        GetSystemInfo(systeminfo);
        Memo1.Lines.Add('您的CPU类型是:' + inttostr(systeminfo.dwProcessorType));
end;
 

解决方案 »

  1.   

    不是CPU类型,是ID,是ID,是ID!
      

  2.   

    抱歉!刚才没看清楚,下面这个例程我也没试过,也是资料上的,试一下对不对,对的话,吭一声!不对话,改对为止,然后给我一份。谢谢先!
    procedure TForm1.Button1Click(Sender: TObject);
    var rebx,recx,redx:dword;
        str1:string;
    begin
    asm
      mov eax,0
      db 0fh,0a2h // cpuid
      mov rebx,ebx
      mov recx,ecx
      mov redx,edx
    end;
    str1:=chr(rebx mod $100)+chr((rebx div $100) mod $100)+chr((rebx div
    $10000) mod $100)+chr((rebx div $1000000) mod $100);
    str1:=str1+chr(redx mod $100)+chr((redx div $100) mod $100)+chr((redx div
    $10000) mod $100)+chr((redx div $1000000) mod $100);
    str1:=str1+chr(recx mod $100)+chr((recx div $100) mod $100)+chr((recx div
    $10000) mod $100)+chr((recx div $1000000) mod $100);edit1.text:=str1; {一执行此句就出错}
    end;end.
    eax, ebx都是比较重要的寄存器,建议你用它们之前先将其入栈(最好将所有寄存器入
    栈比较保险:pushad/popad),在用完后弹出栈。
      

  3.   

    第一个函数我试过,可以得到CPU序列号
    没有问题,你可以用一用,是别人给我的。
    得CPU ID:
    type
      TCPUID  = array[1..4] of Longint;
    ...
    function GetCPUID : TCPUID; assembler; register;
    asm
      PUSH    EBX
      PUSH    EDI
      MOV    EDI,EAX
      MOV    EAX,1
      DW      $A20F
      STOSD
      MOV    EAX,EBX
      STOSD
      MOV    EAX,ECX
      STOSD
      MOV    EAX,EDX
      STOSD
      POP    EDI
      POP    EBX
    end;function GetCPUSpeed: Double;
    const DelayTime = 100;
    var
      TimerHi, TimerLo: DWORD;
      PriorityClass, Priority: Integer;
    begin
      PriorityClass := GetPriorityClass(GetCurrentProcess);
      Priority := GetThreadPriority(GetCurrentThread);
      SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
      SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
      Sleep(DelayTime);
      asm
        DW  310FH
        MOV TimerLo, EAX
        MOV TimerHi, EDX
      end;
      Sleep(DelayTime);
      asm
        DW  310FH
        SUB EAX, TimerLo
        SBB EDX, TimerHi
        MOV TimerLo, EAX
        MOV TimerHi, EDX
      end;
      SetThreadPriority(GetCurrentThread, Priority);
      SetPriorityClass(GetCurrentProcess, PriorityClass);
      Result := TimerLo / (1000.0 * DelayTime);
    end;