获取CPU相关信息

//用来存储信息
DWORD deax;
DWORD debx;
DWORD decx;
DWORD dedx;

void ExeCPUID(DWORD veax)//初始化CPU
{
	__asm
	{
		mov eax,veax
			cpuid
			mov deax,eax
			mov debx,ebx
			mov decx,ecx
			mov dedx,edx
	}
}

long GetCPUFreq()//获取CPU频率,单位: MHZ
{
	int start1,start2;
	_asm rdtsc
	_asm mov start1,eax
	Sleep(50);
	_asm rdtsc
	_asm mov start2,eax
	return (start2-start1)/50000;
}

void GetManID(char * cpyt)//获取制造商信息
{
	char ID[25];//存储制造商信息
	memset(ID,0,sizeof(ID));//先清空数组 ID
	ExeCPUID(0);//初始化
	memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组
	memcpy(ID+4,&dedx,4);//中间四个
	memcpy(ID+8,&decx,4);//最后四个
	//如果返回 char * ,会出现乱码;故返回 string 值
	memcpy(cpyt,ID,strlen(ID));
	return ;
}

void GetCPUType(char * cpyt)
{
	const DWORD id = 0x80000002; //从0x80000002开始,到0x80000004结束
	char CPUType[49];//用来存储CPU型号信息
	memset(CPUType,0,sizeof(CPUType));//初始化数组

	for(DWORD t = 0 ; t < 3 ; t++ )
	{
		ExeCPUID(id+t);
		//每次循环结束,保存信息到数组
		memcpy(CPUType+16*t+ 0,&deax,4);
		memcpy(CPUType+16*t+ 4,&debx,4);
		memcpy(CPUType+16*t+ 8,&decx,4);
		memcpy(CPUType+16*t+12,&dedx,4);
	}
		memcpy(cpyt,CPUType,strlen(CPUType));
		return ;
	//return string(CPUType);
}

	char aa[50]={0};
	char bb[50]={0};
	GetCPUType(aa);
	GetManID(bb);
	long hz = GetCPUFreq();
	CString str;
	str.Format(L"CPU 主 频: %d
CPU 制造商: %S
CPU 型 号:%S
",hz,bb,aa);
	
	SYSTEM_INFO systemInfo;
	GetSystemInfo(&systemInfo);
	CString str;
	str.Format(L"处理器掩码: %d
处理器个数: %d
处理器分页大小:%d
处理器类型: %d
处理器等级: %d
处理器版本: %d",
		systemInfo.dwActiveProcessorMask,
		systemInfo.dwNumberOfProcessors,
		systemInfo.dwPageSize,
		systemInfo.dwProcessorType,
		systemInfo.wProcessorLevel ,
		systemInfo.wProcessorRevision);
	MessageBox(str,L"DriveTest");

	//CString str;
	str.Format(L"CPU 主 频: %d
CPU 制造商: %s
CPU 型 号:%s
",GetCPUFreq(),GetManID().c_str(),GetCPUType.c_str());
        MessageBox(str,L"DriveTest");

  

原文地址:https://www.cnblogs.com/qinsuixin/p/fe400c306127537250d7c88767e49c80.html