c++读取CPU序列号

注:亲测CPU序列号有重复的

一命令行方式、

打开命令提示符界面(cmd)输入wmic CPU get ProcessorID即可得到CPU序列号


二代码、

#include <iostream>

#include <intrin.h>
#include <string>
using namespace std;


void getcpuid(unsigned int CPUInfo[4], unsigned int InfoType);  
void getcpuidex(unsigned int CPUInfo[4], unsigned int InfoType, unsigned int ECXValue);  
char * get_cpuId();  


void main(void)
{
char pCpuId[32] = "";
get_cpuId(pCpuId);
cout<<pCpuId<<endl;
system("pause");
return;
}
void get_cpuId(char *pCpuId)  
{  

int dwBuf[4];  
getcpuid((unsigned int *)dwBuf, 1);  
sprintf(pCpuId,"%08X",dwBuf[3]);
sprintf(pCpuId + 8, "%08X", dwBuf[0]);
return pCpuId;  
}  
void getcpuid(unsigned int *CPUInfo, unsigned int InfoType)  
{  
#if defined(__GNUC__)// GCC  
__cpuid(InfoType, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);  
#elif defined(_MSC_VER)// MSVC  
#if _MSC_VER >= 1400 //VC2005才支持__cpuid  
__cpuid((int*)(void*)CPUInfo, (int)(InfoType));  
#else //其他使用getcpuidex  
getcpuidex(CPUInfo, InfoType, 0);  
#endif  
#endif  
}  
void getcpuidex(unsigned int *CPUInfo, unsigned int InfoType, unsigned int ECXValue)  
{  
#if defined(_MSC_VER) // MSVC  
#if defined(_WIN64) // 64位下不支持内联汇编. 1600: VS2010, 据说VC2008 SP1之后才支持__cpuidex.  
__cpuidex((int*)(void*)CPUInfo, (int)InfoType, (int)ECXValue);  
#else  
if (NULL==CPUInfo)  
return;  
_asm{  
// load. 读取参数到寄存器.  
mov edi, CPUInfo;  
mov eax, InfoType;  
mov ecx, ECXValue;  
// CPUID  
cpuid;  
// save. 将寄存器保存到CPUInfo  
mov [edi], eax;  
mov [edi+4], ebx;  
mov [edi+8], ecx;  
mov [edi+12], edx;  
}  
#endif  
#endif  
}  

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值