如何获取CPU的序列号?(50分)

dudu8686 2002-07-30 08:46:09
如何获取CPU的序列号?(50分)
...全文
38 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
d983074 2002-07-30
  • 打赏
  • 举报
回复
好啊
adminis 2002-07-30
  • 打赏
  • 举报
回复
Function REGISTER_POS_CREATE(T_REG_NAME:STRING):BOOLEAN; //----把CPU的
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey(T_Reg_Name,True) then
begin
Reg.WriteDate('Run_First_date',date);
Reg.WriteInteger('Cpu_id_Fourth',GetCpuId[4]);//----将CPU第四组号码存入注册表!
Reg.WriteString('Sf_Id', '');
Result:=True;
end
else
Result:=False;
Finally
Reg.CloseKey;
Reg.Free;
end;
end;
hjd_cw 2002-07-30
  • 打赏
  • 举报
回复
////////////////////////////cpuid.dpr:
program CpuId;

uses
Forms,
Main in 'Main.pas' {DemoForm};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TDemoForm, DemoForm);
Application.Run;
end.
////////////////////////////main.pas
unit Main;


interface

uses
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
ExtCtrls,
StdCtrls,
Buttons;

type
TDemoForm = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
GetButton: TBitBtn;
CloseButton: TBitBtn;
Bevel1: TBevel;
Label5: TLabel;
FLabel: TLabel;
MLabel: TLabel;
PLabel: TLabel;
SLabel: TLabel;
PValue: TLabel;
FValue: TLabel;
MValue: TLabel;
SValue: TLabel;
procedure GetButtonClick(Sender: TObject);
end;

var
DemoForm: TDemoForm;

implementation

{$R *.DFM}

const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;

function IsCPUID_Available : Boolean; register;
asm
PUSHFD {direct access to flags no possible, only via stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, with not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check if ID bit affected}
JZ @exit {no, CPUID not availavle}
MOV AL,True {Result=True}
@exit:
end;

function GetCPUID : TCPUID; assembler; register;
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;

function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {Restore registers}
POP EBX
end;

procedure TDemoForm.GetButtonClick(Sender: TObject);
var
CPUID : TCPUID;
I : Integer;
S : TVendor;
begin
for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1;
if IsCPUID_Available then begin
CPUID := GetCPUID;
Label1.Caption := 'CPUID[1] = ' + IntToHex(CPUID[1],8);
Label2.Caption := 'CPUID[2] = ' + IntToHex(CPUID[2],8);
Label3.Caption := 'CPUID[3] = ' + IntToHex(CPUID[3],8);
Label4.Caption := 'CPUID[4] = ' + IntToHex(CPUID[4],8);
PValue.Caption := IntToStr(CPUID[1] shr 12 and 3);
FValue.Caption := IntToStr(CPUID[1] shr 8 and $f);
MValue.Caption := IntToStr(CPUID[1] shr 4 and $f);
SValue.Caption := IntToStr(CPUID[1] and $f);
S := GetCPUVendor;
Label5.Caption := 'Vendor: ' + S; end
else begin
Label5.Caption := 'CPUID not available';
end;
end;

end.
///////////////////////main.dfm:
object DemoForm: TDemoForm
Left = 392
Top = 259
Width = 312
Height = 222
ActiveControl = GetButton
BorderIcons = [biSystemMenu]
Caption = 'CPUID - DemoForm'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poScreenCenter
PixelsPerInch = 96
TextHeight = 13
object Bevel1: TBevel
Left = 8
Top = 8
Width = 289
Height = 137
end
object Label1: TLabel
Left = 24
Top = 24
Width = 125
Height = 13
Caption = 'CPUID[1] = FFFFFFFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label2: TLabel
Left = 24
Top = 48
Width = 125
Height = 13
Caption = 'CPUID[2] = FFFFFFFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 24
Top = 72
Width = 125
Height = 13
Caption = 'CPUID[3] = FFFFFFFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 24
Top = 96
Width = 125
Height = 13
Caption = 'CPUID[4] = FFFFFFFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 16
Top = 120
Width = 273
Height = 13
Alignment = taCenter
AutoSize = False
Caption = 'Vendor'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object FLabel: TLabel
Left = 221
Top = 48
Width = 51
Height = 13
Alignment = taRightJustify
Caption = 'Family = '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object MLabel: TLabel
Left = 222
Top = 72
Width = 50
Height = 13
Alignment = taRightJustify
Caption = 'Model = '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object PLabel: TLabel
Left = 168
Top = 24
Width = 104
Height = 13
Alignment = taRightJustify
Caption = 'Processor Type = '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object SLabel: TLabel
Left = 206
Top = 96
Width = 66
Height = 13
Alignment = taRightJustify
Caption = 'Stepping = '
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsBold]
ParentFont = False
end
object PValue: TLabel
Left = 272
Top = 24
Width = 12
Height = 13
Caption = '??'
end
object FValue: TLabel
Left = 272
Top = 48
Width = 12
Height = 13
Caption = '??'
end
object MValue: TLabel
Left = 272
Top = 72
Width = 12
Height = 13
Caption = '??'
end
object SValue: TLabel
Left = 272
Top = 96
Width = 12
Height = 13
Caption = '??'
end
object GetButton: TBitBtn
Left = 8
Top = 160
Width = 137
Height = 25
Caption = 'CPUID'
TabOrder = 0
OnClick = GetButtonClick
Kind = bkHelp
end
object CloseButton: TBitBtn
Left = 160
Top = 160
Width = 137
Height = 25
TabOrder = 1
Kind = bkClose
end
end
westfly 2002-07-30
  • 打赏
  • 举报
回复
//intel网站上有该指令的技术文档
procedure GetCpuInfo;
var R: array[0..19] of Char;
var CpuID: Integer;
begin
FillChar(R, 20, 0);
asm
mov eax, 0
db 0fh, 0a2h // 其实就是cpuid汇编指令
mov dword ptr R[0], ebx
mov dword ptr R[4], edx
mov dword ptr R[8], ecx
mov eax, 1
db 0fh, 0a2h // cpuid
mov CpuID, edx
end;
ShowMessage('CPU制造商为:' + R);
ShowMessage('序列号为:' + IntToStr(CpuID));
end;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧