获取CPUID急救!!!
如题
要支持builder 5 的,能测出CPU速度大于2G的CPUID;
给下源代码,
给个相关接口也行。
谢谢了
[解决办法]
- C/C++ code
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;}
[解决办法]
一、网上流行的这段代码不能取出CPU的唯一值。
二、Intel原来曾经想搞出CPU的唯一值来着,但是受到多个国家,包括中国的反对。就算有唯一值的CPU,也有很多的主板上有这样一项开关:“是否允许CPU ID被获取”。该事件大约是在P3刚出时。
三、ccrun给出的这段代码可以加以完善一些,可以更好地区分出CPU,修改如下:
- C/C++ code
String GetCPUID()//取CPUID。
{
#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("%08X-%08X-%08X", dwCPUID,dwCPUName,dwCPUReserved2);//dwCPUReserved1不用
return strCPUID;
}
特别说明:dwCPUReserved1在多核、多CPU电脑中因为处理这段代码的CPU的核心不同,会返回不同值。也许如果你想知道这台电脑是否是多核,你可以多次取它的返回值。如果只是想取机器的特征,dwCPUReserved1还是忽略的好。
四、同型号,同一批次的CPU,特别是比如某单位同一批进的同型号的电脑,使用上面的代码,返回的值十之八九相同。