windows C++ 获取CPU ID

网上找到了相关代码,但是其中用了嵌入式汇编,只能在win32位下编译运行,根据其他网络资料进行了修改,可以在x64下编译运行。
原版资料见链接:
链接: link
修改后的代码为:

#include "stdafx.h"
#include "GetCPUId.h"

CGetCPUId::CGetCPUId()
{
}

CGetCPUId::~CGetCPUId()
{

}

std::string CGetCPUId::GetId()
{
	std::string strCPUId;

	unsigned long s1, s2;
	char buf[32] = { 0 };
	INT32 Infobuf[4];
	#if defined(_WIN64)
		// 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
		__cpuid(Infobuf, 1);
		s1 = Infobuf[3];
		s2 = Infobuf[0];
	#else
		__asm
		{
			mov eax, 01h
				xor ecx, ecx
				xor edx, edx
				cpuid
				mov s1, edx
				mov s2, ecx
		}
	#endif
	if (s1)
	{
		memset(buf, 0, 32);
		sprintf_s(buf, 32, "%08X", s1);
		strCPUId += buf;
	}

	if (s2)
	{
		memset(buf, 0, 32);
		sprintf_s(buf, 32, "%08X", s2);
		strCPUId += buf;
	}


	#if defined(_WIN64)
		// 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
		__cpuid(Infobuf, 3);
		s1 = Infobuf[3];
		s2 = Infobuf[0];
	#else
		__asm
		{
			mov eax, 03h
				xor ecx, ecx
				xor edx, edx
				cpuid
				mov s1, edx
				mov s2, ecx
		}
	#endif
	if (s1)
	{
		memset(buf, 0, 32);
		sprintf_s(buf, 32, "%08X", s1);
		strCPUId += buf;
	}

	if (s2)
	{
		memset(buf, 0, 32);
		sprintf_s(buf, 32, "%08X", s2);
		strCPUId += buf;
	}

	return strCPUId;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值