zoukankan      html  css  js  c++  java
  • 获取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");
    

      

  • 相关阅读:
    c语言判断最大数
    c语言复制字符
    C语言简单小问题
    c语言实现用指针遍历二维数组
    C语言有趣小程序
    C语言实现输入一个数,输出这个数的立方根
    C语言实现输入一个数,输出这个数的sin值
    c语言实现输出10000内所有素数,5个换一行
    输出10000内所有素数
    判断素数
  • 原文地址:https://www.cnblogs.com/qinsuixin/p/fe400c306127537250d7c88767e49c80.html
Copyright © 2011-2022 走看看