高分 获取CPU序列号(200分)

  • 主题发起人 主题发起人 homliu
  • 开始时间 开始时间
H

homliu

Unregistered / Unconfirmed
GUEST, unregistred user!
我曾用delphi实现了获取cpuid号。
但现在需要用vc来实现。请各位大侠帮忙。由于不熟悉vc,希望能给出比较完整代码。
感激不尽!

delphi代码:
type
TCPUID = array[1..4] of Longint;
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 GetCpuId:String;
var
CPUID : TCPUID;
I : Integer;
S : TVendor;
begin
for I := Low(CPUID) to High(CPUID) do
CPUID := -1;
CPUID := GetCPUID;
result:=IntToHex(CPUID[1],4);//取cpuid[1]的后4位。
//IntToHex(CPUID[2],n);cpuid[2]的后n位。
//IntToHex(CPUID[2],n);cpuid[3]的后n位。
//IntToHex(CPUID[2],n);cpuid[4]的后n位。
end;
 
下面这个可以做到,而且得到的更多:
void CCpuDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString s,str;
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm {
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
s.Format("This CPU 's OEM String is:%s/r/n" ,OEMString);
_asm {
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
if(iEDXValue&0x800000)
s+= "This is MMX CPU/r/n";
else
s+="None MMX Support./r/n";
int iCPUFamily=(0xf00 &
iEAXValue) >>8;
s+= "CPU Family is:"+iCPUFamily+'/r/n';
/*_asm{
mov eax,2
CPUID
}*/
//if(_AL==1)
//s+="Pentium Pro or Pentium II Found/r/n";
str.Format("CPUID:%08x.%08x.%08x.%08x",iEAXValue,iEBXValue,iECXValue,iEDXValue);
UpdateData(true);
m_s=s;
m_str=str;
UpdateData(false);
//AfxMessageBox(s);
//AfxMessageBox(str);

}
 
zw84611:
非常感谢您的帮助。运行非常成功。
 
后退
顶部