#include <windows.h>
#include <stdio.h>char * GetCpuCode()
{
char OEMString[13];       
int iEAXValue,iEBXValue,iECXValue,iEDXValue;       
_asm
{       
mov     eax,2       
CPUID       
}       
  
char szCPUID[122]={NULL};       
char szTmp[33]={NULL};       
unsigned long s1 = 0,s2=0;  

_asm       
{       
mov     eax,01h       
xor     edx,edx       
cpuid       
mov     s1,edx       
mov     s2,eax       
}       
sprintf(szTmp, "%08X%08X", s1, s2);       
strcpy(szCPUID, szTmp);       
_asm       
{       
mov     eax,03h       
xor     ecx,ecx       
xor     edx,edx       
cpuid       
mov     s1,edx       
mov     s2,ecx       
}       
sprintf(szTmp, "%08X%08X", s1, s2);       
strcat(szCPUID, szTmp);
//printf(szCPUID);
return szCPUID;
}void main()
{
char  *str;
str=GetCpuCode();
printf(str);
}
上面的代码无法获取CPU ID 而下面的却行
void main()
{
char OEMString[13];       
int iEAXValue,iEBXValue,iECXValue,iEDXValue;       
_asm
{       
mov     eax,2       
CPUID       
}       
  
char szCPUID[122]={NULL};       
char szTmp[33]={NULL};       
unsigned long s1 = 0,s2=0;  

_asm       
{       
mov     eax,01h       
xor     edx,edx       
cpuid       
mov     s1,edx       
mov     s2,eax       
}       
sprintf(szTmp, "%08X%08X", s1, s2);       
strcpy(szCPUID, szTmp);       
_asm       
{       
mov     eax,03h       
xor     ecx,ecx       
xor     edx,edx       
cpuid       
mov     s1,edx       
mov     s2,ecx       
}       
sprintf(szTmp, "%08X%08X", s1, s2);       
strcat(szCPUID, szTmp);
printf(szCPUID);
}
我觉得哪儿好像类型转换有问题,有知道的朋友希望能指点一下

解决方案 »

  1.   

    自己解决了 ,有时候遇到问题静静的思考下或许问题就解决了.int GetCpuID(char *CpuSerialNum)
    {
    //char OEMString[13];       
    //int iEAXValue,iEBXValue,iECXValue,iEDXValue;       
    _asm
    {       
    mov     eax,2       
    CPUID       
    }       
      
    char szCPUID[129]={NULL};       
    char szTmp[33]={NULL};       
    unsigned long s1 = 0,s2=0;  

    _asm       
    {       
    mov     eax,01h       
    xor     edx,edx       
    cpuid       
    mov     s1,edx       
    mov     s2,eax       
    }       
    sprintf(szTmp, "%08X%08X", s1, s2);       
    strcpy(szCPUID, szTmp);       
    _asm       
    {       
    mov     eax,03h       
    xor     ecx,ecx       
    xor     edx,edx       
    cpuid       
    mov     s1,edx       
    mov     s2,ecx       
    }       
    sprintf(szTmp, "%08X%08X", s1, s2);       
    strcat(szCPUID, szTmp);  
        strcpy(CpuSerialNum, szCPUID);
    return 0;
    }
      

  2.   

    上面获取的是同一类计算机的CPUID,不是唯一的。谁有唯一的CPUID的程序啊?网上已经有人做出CPUID的DLL文件,但不知道是如何实现的?望高手们指点一二!不胜感激!
      

  3.   

    是这样的吗?我也是用到了CPUID,但是没有发觉不是唯一的哟
      

  4.   

    BFEBFBFF000006FD0000000000000000这是我在公司三台电脑上试过后的结果,都是一样的,因为这三台电脑都是买进的都是DELL的330系列。跪求真正的求唯一CPUID的思路。网上的大都是一个代码粘来粘去的,没什么价值!
      

  5.   

    刚才试验了下,我也发觉了,确实同系列的是一样的。%>_<%啊
      

  6.   

    在查看INTEL的相关CPUID的技术文档发现,P3以后的处理器已经不支持序列号了。EAX=1时,返回给EDX的32个bit中的第18bit(PSN字段)等于0,说明当前测试的CPU不支持序列号
      

  7.   

    硬盘的和bios的系列号,网上修改二者信息的软件一大堆,一分钟就搞定了!