unsigned long s1,s2;   
unsigned char vendor_id[]="------------";//CPU提供商ID    
CString str1,str2,str3;   
// 以下为获得CPU ID的汇编语言指令    
_asm    // 得到CPU提供商信息     
{     
xor eax,eax   // 将eax清0    
cpuid         // 获取CPUID的指令    
mov dword ptr vendor_id,ebx   
mov dword ptr vendor_id[+4],edx   
mov dword ptr vendor_id[+8],ecx     
}   
str1.Format("%s",vendor_id);   
    
_asm    // 得到CPU ID的高32位     
{    
mov eax,01h       
xor edx,edx   
cpuid   
mov s1,edx
mov s2,eax   
}   
str2.Format("%08X-%08X\n",s1, s2);

_asm    // 得到CPU ID的低64位    
{    
mov eax,03h   
xor ecx,ecx   
xor edx,edx   
cpuid   
mov s1,edx   
mov s2,ecx   
}   
str3.Format("%08X-%08X\n",s1,s2);   

str2=str2+str3;  str1+="\r\n";
str1+=str2; MessageBox(str1); 我在获取CPU 序列号时,使用了如下从网上找的程序,但只能输出 str2。 str3输出全为零,GenuineIntel
BFEBFBFF-0001067A
00000000-00000000
不能准确获取
我用网上下的一个工具却能全部得到此序列号。
BFEBFBFF-0001067A  01020800 0400E33BD
不知什么原因,得不到完整序列号,或者看看有没有其它办法等到CPU 序列号。特别感谢!

解决方案 »

  1.   

    Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
        For Each objItem In colItems
            objItem.ProcessorId//就是
        Exit For
      

  2.   

    谢谢 TR0J4N 我想需要一个 VC 的程序,这个VBScrip的我不好用。
      

  3.   

    你看我像是那种胡乱答题的人吗?我给你的VBS是关键,写明了名称空间和属性,你改成C++调用WMI就可以了。具体怎么改,请参考我的这篇文章 
    http://blog.csdn.net/Tr0j4n/archive/2010/01/19/5214384.aspx
      

  4.   

    http://topic.csdn.net/t/20041130/11/3601088.html楼主先看看这个,如果你是为了取得唯一的序列号,那基本上不可能的,wmi的方式只能获取cpu厂商有关的id,很多机器会重复的
      

  5.   

    谢谢 TR0J4N ,我没有认为你随便回答问题,主要是我不懂VBS WMI,今天是第一次听说。所以对你说的我没有想到那么多,就没有想到和VC有联系,实在不好意思,知道的太少。
      

  6.   

    cpu 序列号除非bios中设置可以得到,才能获取。主板可以通过硬件屏蔽掉。
      

  7.   

    谢谢各位,我最后选择了硬盘序列号的获取。CPU的没有搞出来,再次谢谢个位。