function CPUIDAvail: Boolean; assembler;
asm
pushfd
pop eax
mov edx,eax
xor eax, 0200000h
push eax
popfd
pushfd
pop eax
xor eax,edx
and eax, 0200000h
shr eax, 21
end;
FillChar(s, sizeof(s), 0);
if CPUIDAvail then begin
asm
//save regs
push ebx
push ecx
push edx
//check if necessary extended CPUID calls are
//supported, if not return null string
mov eax,080000000h
{dw} CPUID
cmp eax,080000004h
jb @@endbrandstr
//get first name part
mov eax,080000002h
{dw} CPUID
mov longword(s[0]),eax
mov longword(s[4]),ebx
mov longword(s[8]),ecx
mov longword(s[12]),edx
//get second name part
mov eax,080000003h
{dw} CPUID
mov longword(s[16]),eax
mov longword(s[20]),ebx
mov longword(s[24]),ecx
mov longword(s[28]),edx
//get third name part
mov eax,080000004h
{dw} CPUID
mov longword(s[32]),eax
mov longword(s[36]),ebx
mov longword(s[40]),ecx
mov longword(s[44]),edx
@@endbrandstr:
//restore regs
pop edx
pop ecx
pop ebx
end;
end;
Result:=StrPas(s);
Reg: TRegistry;
sList: TStringList;
sList:=TStringList.Create;
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKeyReadOnly('Hardware\Description\System\CentralProcessor');
Reg.GetKeyNames(sList);
Reg.OpenKeyReadOnly(sList[0]);
Result:=IntToStr(sList.Count);
finally
Reg.CloseKey;
if Assigned(Reg) then FreeAndNil(Reg);
if Assigned(sList) then FreeAndNil(sList);
end;
Reg: TRegistry;
sList: TStringList;
sList:=TStringList.Create;
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKeyReadOnly('Hardware\Description\System\CentralProcessor');
Reg.GetKeyNames(sList);
Reg.OpenKeyReadOnly(sList[0]);
Result:=FloatToStr(Reg.ReadInteger('~MHz')/1000)+' GHz';
finally
Reg.CloseKey;
if Assigned(Reg) then FreeAndNil(Reg);
if Assigned(sList) then FreeAndNil(sList);
end;
'Delphi' 카테고리의 다른 글
[Delphi] Application.Components[i] (0) | 2009.04.18 |
---|---|
[Delphi] 함수의 이름으로 메소드 호출하기 (0) | 2009.04.18 |
[Delphi] RAM 용량 알아내기 (0) | 2009.04.18 |
[Delphi] 그래픽카드의 이름을 반환하는 함수 (0) | 2009.04.18 |
[BDS] 찾기 기능 Ctrl + Shift + Enter (0) | 2009.04.18 |