String __fastcall GetCPUID()
{
#define CPUID dw 0xa20f
DWORD dwCPUName, dwCPUReserved1, dwCPUReserved2, dwCPUID;
String strCPUID;
asm
{
PUSHAD
MOV EAX, 1
CPUID
MOV dwCPUName, EAX
MOV dwCPUReserved1, EBX
MOV dwCPUReserved2, ECX
MOV dwCPUID, EDX
POPAD
}
strCPUID.sprintf( "%.8X ", dwCPUID);
return strCPUID;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(GetCPUID());
}
String GetCPUID()//取CPUID。{ #define CPUID dw 0xa20f //定义端口初始化值(将这个数据发向CPU) //用于输出 CPU的名称、CPU的Reserved1、CPU的Reserved2、CPU的ID DWORD dwCPUName, dwCPUReserved1,dwCPUReserved2,dwCPUID; String strCPUID; asm { PUSHAD//压栈(把前面进行的东西的信息先收集起来) MOV EAX, 1//这两行是规定用法,是Intel的CPU的标准取CPUID的命令,没什么可说。 CPUID//这两行用完后,EAX、EBX、ECX、EDX中就有你想要的信息了。 MOV dwCPUName, EAX//将EAX中的值放到dwCPUName中 MOV dwCPUReserved1, EBX//将EBX中的值放到dwCPUName中 MOV dwCPUReserved2, ECX//将ECX中的值放到dwCPUName中 MOV dwCPUID, EDX//将EDX中的值放到dwCPUName中 POPAD//出栈//(把前面进行的东西的信息释放出来) } strCPUID.sprintf("%08X-%08X-%08X", dwCPUID,dwCPUName,dwCPUReserved2);//dwCPUReserved1不用 这是标准的C语言的输出 return strCPUID;}