C++检测电脑配置信息.docx

上传人:b****2 文档编号:17266097 上传时间:2023-07-23 格式:DOCX 页数:20 大小:20.63KB
下载 相关 举报
C++检测电脑配置信息.docx_第1页
第1页 / 共20页
C++检测电脑配置信息.docx_第2页
第2页 / 共20页
C++检测电脑配置信息.docx_第3页
第3页 / 共20页
C++检测电脑配置信息.docx_第4页
第4页 / 共20页
C++检测电脑配置信息.docx_第5页
第5页 / 共20页
C++检测电脑配置信息.docx_第6页
第6页 / 共20页
C++检测电脑配置信息.docx_第7页
第7页 / 共20页
C++检测电脑配置信息.docx_第8页
第8页 / 共20页
C++检测电脑配置信息.docx_第9页
第9页 / 共20页
C++检测电脑配置信息.docx_第10页
第10页 / 共20页
C++检测电脑配置信息.docx_第11页
第11页 / 共20页
C++检测电脑配置信息.docx_第12页
第12页 / 共20页
C++检测电脑配置信息.docx_第13页
第13页 / 共20页
C++检测电脑配置信息.docx_第14页
第14页 / 共20页
C++检测电脑配置信息.docx_第15页
第15页 / 共20页
C++检测电脑配置信息.docx_第16页
第16页 / 共20页
C++检测电脑配置信息.docx_第17页
第17页 / 共20页
C++检测电脑配置信息.docx_第18页
第18页 / 共20页
C++检测电脑配置信息.docx_第19页
第19页 / 共20页
C++检测电脑配置信息.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C++检测电脑配置信息.docx

《C++检测电脑配置信息.docx》由会员分享,可在线阅读,更多相关《C++检测电脑配置信息.docx(20页珍藏版)》请在冰点文库上搜索。

C++检测电脑配置信息.docx

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//#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;//保存所有网卡的名字

CListBandwidths;//各网卡的带宽

CListTotalTraffics;//各网卡的总流量

/***********获取网卡数目和名字***********/

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模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2