C++检测电脑配置信息.docx
- 文档编号:17266097
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:20
- 大小:20.63KB
C++检测电脑配置信息.docx
《C++检测电脑配置信息.docx》由会员分享,可在线阅读,更多相关《C++检测电脑配置信息.docx(20页珍藏版)》请在冰点文库上搜索。
C++检测电脑配置信息
C++检测电脑配置信息
1、检测内存空间
/***获取物理内存和虚拟内存大小***/
VoidGetMemoryInfo(CString&dwTotalPhys,CString&dwTotalVirtual);
{
//TODO:
Addextrainitializationhere
MEMORYSTATUSMem;
//getthememorystatus
GlobalMemoryStatus(&Mem);
DWORDdwSize=(DWORD)Mem.dwTotalPhys/(1024*1024);
DWORDdwVirtSize=(DWORD)Mem.dwTotalVirtual/(1024*1024);
dwTotalPhys.Format(_T("物理内存:
%ldMB"),dwSize);
dwTotalVirtual.Format(_T("虚拟内存:
%ldMB"),dwVirtSize);
}
2、检测CPU型号
/****获取CPU名称、内核数目、主频*******/
VoidGetCpuInfo(CString&chProcessorName,CString&chProcessorType,DWORD&dwNum,DWORD&dwMaxClockSpeed)
{
CStringstrPath=_T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");//注册表子键路径
CRegKeyregkey;//定义注册表类对象
LONGlResult;//LONG型变量-反应结果
lResult=regkey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);//打开注册表键
if(lResult!
=ERROR_SUCCESS)
{
return;
}
WCHARchCPUName[50]={0};
DWORDdwSize=50;
//获取ProcessorNameString字段值
if(ERROR_SUCCESS==regkey.QueryStringValue(_T("ProcessorNameString"),chCPUName,&dwSize))
{
chProcessorName=chCPUName;
}
//查询CPU主频
DWORDdwValue;
if(ERROR_SUCCESS==regkey.QueryDWORDValue(_T("~MHz"),dwValue))
{
dwMaxClockSpeed=dwValue;
}
regkey.Close();//关闭注册表
//UpdateData(FALSE);
//获取CPU核心数目
SYSTEM_INFOsi;
memset(&si,0,sizeof(SYSTEM_INFO));
GetSystemInfo(&si);
dwNum=si.dwNumberOfProcessors;
switch(si.dwProcessorType)
{
casePROCESSOR_INTEL_386:
{
chProcessorType.Format(_T("Intel386processor"));
}
break;
casePROCESSOR_INTEL_486:
{
chProcessorType.Format(_T("Intel486Processor"));
}
break;
casePROCESSOR_INTEL_PENTIUM:
{
chProcessorType.Format(_T("IntelPentiumProcessor"));
}
break;
casePROCESSOR_INTEL_IA64:
{
chProcessorType.Format(_T("IntelIA64Processor"));
}
break;
casePROCESSOR_AMD_X8664:
{
chProcessorType.Format(_T("AMDX8664Processor"));
}
break;
default:
chProcessorType.Format(_T("未知"));
break;
}
}
3、检测硬盘信息
/****获取硬盘信息****/
voidGetDiskInfo(DWORD&dwNum,CStringchDriveInfo[])
{
DWORDDiskCount=0;
//利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个位无符号整型数据。
DWORDDiskInfo=GetLogicalDrives();
//通过循环操作查看每一位数据是否为,如果为则磁盘为真,如果为则磁盘不存在。
while(DiskInfo)
{
//通过位运算的逻辑与操作,判断是否为
Sleep(10);
if(DiskInfo&1)
{
DiskCount++;
}
DiskInfo=DiskInfo>>1;//通过位运算的右移操作保证每循环一次所检查的位置向右移动一位。
*/
}
if(dwNum { return;//实际的磁盘数目大于dwNum } dwNum=DiskCount;//将磁盘分区数量保存 //-------------------------------------------------------------------// //通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度 intDSLength=GetLogicalDriveStrings(0,NULL); WCHAR*DStr=newWCHAR[DSLength]; memset(DStr,0,DSLength); //通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。 GetLogicalDriveStrings(DSLength,DStr); intDType; intsi=0; BOOLfResult; unsigned_int64i64FreeBytesToCaller; unsigned_int64i64TotalBytes; unsigned_int64i64FreeBytes; //读取各驱动器信息,由于DStr内部数据格式是A: \NULLB: \NULLC: \NULL,所以DSLength/4可以获得具体大循环范围 for(inti=0;i { Sleep(10); CStringstrdriver=DStr+i*4; CStringstrTmp,strTotalBytes,strFreeBytes; DType=GetDriveType(strdriver);//GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录 switch(DType) { caseDRIVE_FIXED: { strTmp.Format(_T("本地磁盘")); } break; caseDRIVE_CDROM: { strTmp.Format(_T("DVD驱动器")); } break; caseDRIVE_REMOVABLE: { strTmp.Format(_T("可移动磁盘")); } break; caseDRIVE_REMOTE: { strTmp.Format(_T("网络磁盘")); } break; caseDRIVE_RAMDISK: { strTmp.Format(_T("虚拟RAM磁盘")); } break; caseDRIVE_UNKNOWN: { strTmp.Format(_T("虚拟RAM未知设备")); } break; default: strTmp.Format(_T("未知设备")); break; } //GetDiskFreeSpaceEx函数,可以获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据 fResult=GetDiskFreeSpaceEx(strdriver, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); if(fResult) { strTotalBytes.Format(_T("磁盘总容量%fMB"),(float)i64TotalBytes/1024/1024); strFreeBytes.Format(_T("磁盘剩余空间%fMB"),(float)i64FreeBytesToCaller/1024/1024); } else { strTotalBytes.Format(_T("")); strFreeBytes.Format(_T("")); } chDriveInfo[i]=strTmp+_T("(")+strdriver+_T("): ")+strTotalBytes+strFreeBytes; si+=4; } } 4、检测显卡信息 /****获取显卡信息*****/ voidGetDisplayCardInfo(DWORD&dwNum,CStringchCardName[]) { HKEYkeyServ; HKEYkeyEnum; HKEYkey; HKEYkey2; LONGlResult;//LONG型变量-保存函数返回值 //查询"SYSTEM\\CurrentControlSet\\Services"下的所有子键保存到keyServ lResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\CurrentControlSet\\Services"),0,KEY_READ,&keyServ); if(ERROR_SUCCESS! =lResult) return; //查询"SYSTEM\\CurrentControlSet\\Enum"下的所有子键保存到keyEnum lResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\CurrentControlSet\\Enum"),0,KEY_READ,&keyEnum); if(ERROR_SUCCESS! =lResult) return; inti=0,count=0; DWORDsize=0,type=0; for(;;++i) { Sleep(5); size=512; TCHARname[512]={0};//保存keyServ下各子项的字段名称 //逐个枚举keyServ下的各子项字段保存到name中 lResult=RegEnumKeyEx(keyServ,i,name,&size,NULL,NULL,NULL,NULL); //要读取的子项不存在,即keyServ的子项全部遍历完时跳出循环 if(lResult==ERROR_NO_MORE_ITEMS) break; //打开keyServ的子项字段为name所标识的字段的值保存到key lResult=RegOpenKeyEx(keyServ,name,0,KEY_READ,&key); if(lResult! =ERROR_SUCCESS) { RegCloseKey(keyServ); return; } size=512; //查询key下的字段为Group的子键字段名保存到name lResult=RegQueryValueEx(key,TEXT("Group"),0,&type,(LPBYTE)name,&size); if(lResult==ERROR_FILE_NOT_FOUND) { //键不存在 RegCloseKey(key); continue; }; //如果查询到的name不是Video则说明该键不是显卡驱动项 if(_tcscmp(TEXT("Video"),name)! =0) { RegCloseKey(key); continue;//返回for循环 }; //如果程序继续往下执行的话说明已经查到了有关显卡的信息,所以在下面的代码执行完之后要break第一个for循环,函数返回 lResult=RegOpenKeyEx(key,TEXT("Enum"),0,KEY_READ,&key2); RegCloseKey(key); key=key2; size=sizeof(count); lResult=RegQueryValueEx(key,TEXT("Count"),0,&type,(LPBYTE)&count,&size);//查询Count字段(显卡数目) dwNum=count;//保存显卡数目 for(intj=0;j { TCHARsz[512]={0}; TCHARname[64]={0}; wsprintf(name,TEXT("%d"),j); size=sizeof(sz); lResult=RegQueryValueEx(key,name,0,&type,(LPBYTE)sz,&size); lResult=RegOpenKeyEx(keyEnum,sz,0,KEY_READ,&key2); if(ERROR_SUCCESS) { RegCloseKey(keyEnum); return; } size=sizeof(sz); lResult=RegQueryValueEx(key2,TEXT("FriendlyName"),0,&type,(LPBYTE)sz,&size); if(lResult==ERROR_FILE_NOT_FOUND) { size=sizeof(sz); lResult=RegQueryValueEx(key2,TEXT("DeviceDesc"),0,&type,(LPBYTE)sz,&size); chCardName[j]=sz;//保存显卡名称 }; RegCloseKey(key2); key2=NULL; }; RegCloseKey(key); key=NULL; break; } } 5、检测声卡信息 /****添加头文件信息*****/ #include #pragmacomment(lib,"winmm.lib") /****获取声卡信息*****/ voidGetSoundDevice(DWORD&dwNum,CStringchCardName[]) { //检测声卡 intwavedevice/*,mididevice*/; WAVEOUTCAPSwavecap; /*MIDIOUTCAPSmidicap;*/ wavedevice=(int)waveOutGetNumDevs();//波形设备信息 //mididevice=(int)midiOutGetNumDevs();//MIDI设备信息 if(wavedevice>0) { for(inti=0;i { waveOutGetDevCaps(i,&wavecap,sizeof(WAVEOUTCAPS)); /*OutputDebugString(wavecap.szPname); OutputDebugString(_T("\n"));*/ chCardName[i]=wavecap.szPname; } } //if(mididevice>0) //{ //for(inti=0;i //{ //midiOutGetDevCaps(i,&midicap,sizeof(MIDIOUTCAPS)); //OutputDebugString(midicap.szPname); //OutputDebugString(_T("\n")); //chCardName[wavedevice+i]=midicap.szPname; //} //} dwNum=wavedevice/*+mididevice*/; return; } 系统文件mmsystem.h提供声卡(音频输出)读取接口,函数为waveOutGetNumDevs,另外音频输入接口函数为waveInGetNumDevs,详细了解mmsystem.h 小问题: Mmsystem.h文件 typedefstructtagWAVEOUTCAPSW{ WORDwMid;/*manufacturerID*/ WORDwPid;/*productID*/ MMVERSIONvDriverVersion;/*versionofthedriver*/ WCHARszPname[MAXERRORLENGTH];/*productname(NULLterminatedstring)*/ DWORDdwFormats;/*formatssupported*/ WORDwChannels;/*numberofsourcessupported*/ WORDwReserved1;/*packing*/ DWORDdwSupport;/*functionalitysupportedbydriver*/ }WAVEOUTCAPSW,*PWAVEOUTCAPSW,*NPWAVEOUTCAPSW,*LPWAVEOUTCAPSW; #ifdefUNICODE typedefWAVEOUTCAPSWWAVEOUTCAPS; ***szPname的取值较小,建议微软修改大小 /*generalconstants*/ #defineMAXPNAMELEN32/*maxproductnamelength(includingNULL)*/ #defineMAXERRORLENGTH256/*maxerrortextlength(includingNULL)*/ #defineMAX_JOYSTICKOEMVXDNAME260/*maxoemvxdnamelength(includingNULL)*/ 参考链接: http: //snailzhang-126- 6、检测网卡信息 /****声明变量*****/ private: CStringListInterfaces;//保存所有网卡的名字 CList CList /***********获取网卡数目和名字***********/ voidGetInterFace(DWORD&dwNum,CStringchCardName[]) { /*CGetNetDatapNet; DWORDpCount=pNet.GetNetworkInterfacesCount(); returnpCount;*/ try { #defineDEFAULT_BUFFER_SIZE40960L unsignedchar*data=(unsignedchar*)malloc(DEFAULT_BUFFER_SIZE); DWORDtype; DWORDsize=DEFAULT_BUFFER_SIZE; DWORDret; chars_key[4096]; sprintf_s(s_key,4096,"510"); //RegQueryValueEx的固定调用格式 CStringstr(s_key); //如果RegQueryValueEx函数执行失败则进入循环 while((ret=RegQueryValueEx(HKEY_PERFORMANCE_DATA,str,0,&type,data,&size))! =ERROR_SUCCESS) { Sleep(10); //如果RegQueryValueEx的返回值为ERROR_MORE_DATA(申请的内存区data太小,不能容纳RegQueryValueEx返回的数据) if(ret==ERROR_MORE_DATA) { Sleep(10); size+=DEFAULT_BUFFER_SIZE; d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 检测 电脑 配置 信息
![提示](https://static.bingdoc.com/images/bang_tan.gif)