//用来存储信息
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\nCPU 制造商: %S\nCPU 型 号:%S\n",hz,bb,aa);
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
CString str;
str.Format(L"处理器掩码: %d\n处理器个数: %d\n处理器分页大小:%d\n处理器类型: %d\n处理器等级: %d\n处理器版本: %d",
systemInfo.dwActiveProcessorMask,
systemInfo.dwNumberOfProcessors,
systemInfo.dwPageSize,
systemInfo.dwProcessorType,
systemInfo.wProcessorLevel ,
systemInfo.wProcessorRevision);
MessageBox(str,L"DriveTest");
//CString str;
str.Format(L"CPU 主 频: %d\nCPU 制造商: %s\nCPU 型 号:%s\n",GetCPUFreq(),GetManID().c_str(),GetCPUType.c_str());
MessageBox(str,L"DriveTest");