//用来存储信息 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");