1.CPU的。
function GetCPUID: TCPUID; assembler;register;
begin
  asm
    PUSH    EBX          {Save affected register}
    PUSH    EDI
    MOV     EDI,EAX      {@Resukt}
    MOV     EAX,1
    DW      $A20F        {CPUID Command}
    STOSD         {CPUID[1]}
    MOV     EAX,EBX
    STOSD                {CPUID[2]}
    MOV     EAX,ECX
    STOSD                {CPUID[3]}
    MOV     EAX,EDX
    STOSD                {CPUID[4]}
    POP     EDI {Restore registers}
    POP     EBX
  end;
end;
这样应用:
    MyCPUID: TCPUID;
    str: string;
begin
    MyCPUID := GetCPUID;
    str := IntToStr(MyCPUID[1])
      + IntToStr(MyCPUID[2])
      + IntToStr(MyCPUID[3])
      + IntToStr(MyCPUID[4]);
str即为得到的CPUID。
上面这一段程序,我怎么运行都不行,不知道是不是要引用什么单元文件,请知道的大大指教啊。救命啊~~~

解决方案 »

  1.   

    我有例子,上面就可以的亚,要不我直接给你我的例子?[email protected]
      

  2.   

    type
      TCPUID = Array [0..4] of Integer;加上这个。在最前面
      

  3.   

    添加以下代码:
    type
       TCPUID  = array[1..4] of Longint;
      

  4.   

    自己定义一下TCPUID:
    type 
      tcpuid = array[1..4] of longint;
      

  5.   

    我加进去了,一直都显示“=”NOT FOUND ,什么意思啊?
    能不能给我一个完整的单元文件呢?
      

  6.   

    晕unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    type
       TCPUID  = array[1..4] of Longint;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Edit7: TEdit;
        Edit8: TEdit;
        Edit9: TEdit;
        Edit10: TEdit;
        Button2: TButton;
        Button3: TButton;
        Image1: TImage;
        Image2: TImage;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      i:integer;
    implementation{$R *.dfm}
    function GetCPUID: TCPUID; assembler;register;
    begin
      asm
        PUSH    EBX          {Save affected register}
        PUSH    EDI
        MOV     EDI,EAX      {@Resukt}
        MOV     EAX,1
        DW      $A20F        {CPUID Command}
        STOSD         {CPUID[1]}
        MOV     EAX,EBX
        STOSD                {CPUID[2]}
        MOV     EAX,ECX
        STOSD                {CPUID[3]}
        MOV     EAX,EDX
        STOSD                {CPUID[4]}
        POP     EDI {Restore registers}
        POP     EBX
      end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var  MyCPUID: TCPUID;
        str: string;
    begin
        MyCPUID := GetCPUID;
        str := IntToStr(MyCPUID[1])
          + IntToStr(MyCPUID[2])
          + IntToStr(MyCPUID[3])
          + IntToStr(MyCPUID[4]);
          edit1.Text:=str;
          end;
    end.
      

  7.   

    谢谢刘大大,我解决了。原来我一直多添加了一个FUNCTION,让您见笑了
    我主要是在做注册,用CPU序列号安全吗?能不能指点一下呢?
      

  8.   

    没有意义,CPUID不是SN!
    同一系列的CPU其ID是一样的http://lysoft.7u7.net
      

  9.   

    有个问题,为什么我不同的机子获得的数值是一样的?CPU序列号会重复吗?谁能告诉我下呢?
      

  10.   

    x86系列中只有PIII才支持CPU序列号。