




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+檢測(cè)電腦配置信息1、檢測(cè)內(nèi)存空間/*獲取物理內(nèi)存和虛擬內(nèi)存大小*/ Void GetMemoryInfo(CString &dwTotalPhys,CString &dwTotalVirtual); / TODO: Add extra initialization here MEMORYSTATUS Mem; / get the memory status GlobalMemoryStatus(&Mem); DWORD dwSize = (DWORD)Mem.dwTotalPhys/(1024*1024); DWORD dwVirtSize = (DWORD)Mem
2、.dwTotalVirtual/(1024*1024); dwTotalPhys.Format(_T("物理內(nèi)存:%ld MB"),dwSize); dwTotalVirtual.Format(_T("虛擬內(nèi)存:%ld MB"),dwVirtSize); 2、檢測(cè)CPU型號(hào)/*獲取CPU名稱、內(nèi)核數(shù)目、主頻*/ Void GetCpuInfo(CString& chProcessorName,CString& chProcessorType,DWORD &dwNum,DWORD &dwMaxClockSpeed)CStri
3、ng strPath=_T("HARDWAREDESCRIPTIONSystemCentralProcessor0");/注冊(cè)表子鍵路徑 CRegKey regkey;/定義注冊(cè)表類對(duì)象 LONG lResult;/LONG型變量反應(yīng)結(jié)果 lResult=regkey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS); /打開注冊(cè)表鍵 if (lResult!=ERROR_SUCCESS) return; WCHAR chCPUName50 = 0; DWORD dwSize=50; /獲取ProcessorN
4、ameString字段值 if (ERROR_SUCCESS = regkey.QueryStringValue(_T("ProcessorNameString"),chCPUName,&dwSize) chProcessorName = chCPUName; /查詢CPU主頻 DWORD dwValue; if (ERROR_SUCCESS = regkey.QueryDWORDValue(_T("MHz"),dwValue) dwMaxClockSpeed = dwValue; regkey.Close();/關(guān)閉注冊(cè)表 /UpdateDat
5、a(FALSE); /獲取CPU核心數(shù)目 SYSTEM_INFO si; memset(&si,0,sizeof(SYSTEM_INFO); GetSystemInfo(&si); dwNum = si.dwNumberOfProcessors; switch (si.dwProcessorType) case PROCESSOR_INTEL_386: chProcessorType.Format(_T("Intel 386 processor"); break; case PROCESSOR_INTEL_486: chProcessorType.Forma
6、t(_T("Intel 486 Processor"); break; case PROCESSOR_INTEL_PENTIUM: chProcessorType.Format(_T("Intel Pentium Processor"); break; case PROCESSOR_INTEL_IA64: chProcessorType.Format(_T("Intel IA64 Processor"); break; case PROCESSOR_AMD_X8664: chProcessorType.Format(_T("
7、AMD X8664 Processor"); break; default: chProcessorType.Format(_T("未知"); break; 3、檢測(cè)硬盤信息/*獲取硬盤信息*/ void GetDiskInfo(DWORD &dwNum,CString chDriveInfo)DWORD DiskCount = 0; /利用GetLogicalDrives()函數(shù)可以獲取系統(tǒng)中邏輯驅(qū)動(dòng)器的數(shù)量,函數(shù)返回的是一個(gè)位無(wú)符號(hào)整型數(shù)據(jù)。 DWORD DiskInfo = GetLogicalDrives(); /通過(guò)循環(huán)操作查看每一位數(shù)據(jù)是否為,
8、如果為則磁盤為真,如果為則磁盤不存在。 while(DiskInfo) /通過(guò)位運(yùn)算的邏輯與操作,判斷是否為 Sleep(10); if(DiskInfo&1) DiskCount+; DiskInfo = DiskInfo >> 1;/通過(guò)位運(yùn)算的右移操作保證每循環(huán)一次所檢查的位置向右移動(dòng)一位。*/ if (dwNum < DiskCount) return;/實(shí)際的磁盤數(shù)目大于dwNum dwNum = DiskCount;/將磁盤分區(qū)數(shù)量保存 /-/ /通過(guò)GetLogicalDriveStrings()函數(shù)獲取所有驅(qū)動(dòng)器字符串信息長(zhǎng)度 int DSLength
9、 = GetLogicalDriveStrings(0,NULL); WCHAR* DStr = new WCHARDSLength; memset(DStr,0,DSLength); /通過(guò)GetLogicalDriveStrings將字符串信息復(fù)制到堆區(qū)數(shù)組中,其中保存了所有驅(qū)動(dòng)器的信息。 GetLogicalDriveStrings(DSLength,DStr); int DType; int si=0; BOOL fResult; unsigned _int64 i64FreeBytesToCaller; unsigned _int64 i64TotalBytes; unsigned
10、_int64 i64FreeBytes; /讀取各驅(qū)動(dòng)器信息,由于DStr內(nèi)部數(shù)據(jù)格式是A:NULLB:NULLC:NULL,所以DSLength/4可以獲得具體大循環(huán)范圍 for(int i=0;i<DSLength/4;+i) Sleep(10); CString strdriver = DStr+i*4; CString strTmp,strTotalBytes,strFreeBytes; DType = GetDriveType(strdriver);/GetDriveType函數(shù),可以獲取驅(qū)動(dòng)器類型,參數(shù)為驅(qū)動(dòng)器的根目錄 switch (DType) case DRIVE_FI
11、XED: strTmp.Format(_T("本地磁盤"); break; case DRIVE_CDROM: strTmp.Format(_T("DVD驅(qū)動(dòng)器"); break; case DRIVE_REMOVABLE: strTmp.Format(_T("可移動(dòng)磁盤"); break; case DRIVE_REMOTE: strTmp.Format(_T("網(wǎng)絡(luò)磁盤"); break; case DRIVE_RAMDISK: strTmp.Format(_T("虛擬RAM磁盤"); br
12、eak; case DRIVE_UNKNOWN: strTmp.Format(_T("虛擬RAM未知設(shè)備"); break; default: strTmp.Format(_T("未知設(shè)備"); break; /GetDiskFreeSpaceEx函數(shù),可以獲取驅(qū)動(dòng)器磁盤的空間狀態(tài),函數(shù)返回的是個(gè)BOOL類型數(shù)據(jù) fResult = GetDiskFreeSpaceEx (strdriver, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes,
13、(PULARGE_INTEGER)&i64FreeBytes); if(fResult) strTotalBytes.Format(_T("磁盤總?cè)萘?fMB"),(float)i64TotalBytes/1024/1024); strFreeBytes.Format(_T("磁盤剩余空間%fMB"),(float)i64FreeBytesToCaller/1024/1024); else strTotalBytes.Format(_T(""); strFreeBytes.Format(_T(""); ch
14、DriveInfoi = strTmp + _T("(") + strdriver + _T("):") + strTotalBytes + strFreeBytes; si+=4; 4、檢測(cè)顯卡信息/*獲取顯卡信息*/ void GetDisplayCardInfo(DWORD &dwNum,CString chCardName)HKEY keyServ; HKEY keyEnum; HKEY key; HKEY key2; LONG lResult;/LONG型變量保存函數(shù)返回值 /查詢"SYSTEMCurrentControlSe
15、tServices"下的所有子鍵保存到keyServ lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEMCurrentControlSetServices"),0,KEY_READ,&keyServ); if (ERROR_SUCCESS != lResult) return; /查詢"SYSTEMCurrentControlSetEnum"下的所有子鍵保存到keyEnum lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("
16、SYSTEMCurrentControlSetEnum"),0,KEY_READ,&keyEnum); if (ERROR_SUCCESS != lResult) return; int i = 0,count = 0; DWORD size = 0,type = 0; for (;+i) Sleep(5); size = 512; TCHAR name512 = 0;/保存keyServ下各子項(xiàng)的字段名稱 /逐個(gè)枚舉keyServ下的各子項(xiàng)字段保存到name中 lResult = RegEnumKeyEx(keyServ,i,name,&size,NULL,NULL
17、,NULL,NULL); /要讀取的子項(xiàng)不存在,即keyServ的子項(xiàng)全部遍歷完時(shí)跳出循環(huán) if(lResult = ERROR_NO_MORE_ITEMS) break; /打開keyServ的子項(xiàng)字段為name所標(biāo)識(shí)的字段的值保存到key lResult = RegOpenKeyEx(keyServ,name,0,KEY_READ,&key); if (lResult != ERROR_SUCCESS) RegCloseKey(keyServ); return; size = 512; /查詢key下的字段為Group的子鍵字段名保存到name lResult = RegQuery
18、ValueEx(key,TEXT("Group"),0,&type,(LPBYTE)name,&size); if(lResult = ERROR_FILE_NOT_FOUND) / 鍵不存在 RegCloseKey(key); continue; ; /如果查詢到的name不是Video則說(shuō)明該鍵不是顯卡驅(qū)動(dòng)項(xiàng) if(_tcscmp(TEXT("Video"),name)!=0) RegCloseKey(key); continue; /返回for循環(huán) ; /如果程序繼續(xù)往下執(zhí)行的話說(shuō)明已經(jīng)查到了有關(guān)顯卡的信息,所以在下面的代碼執(zhí)行完之
19、后要break第一個(gè)for循環(huán),函數(shù)返回 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字段(顯卡數(shù)目) dwNum = count;/保存顯卡數(shù)目 for(int j=0;j <c
20、ount;+j) TCHAR sz512 = 0; TCHAR name64 = 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); lRe
21、sult = 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); chCardNamej = sz;/保存顯卡名稱 ; RegCloseKey(key2); key2 = NULL
22、; ; RegCloseKey(key); key = NULL; break; 5、 檢測(cè)聲卡信息/*添加頭文件信息*/ #include<windows.h> /#include <mmsystem.h>#pragma comment(lib,"winmm.lib")/*獲取聲卡信息*/ void GetSoundDevice( DWORD &dwNum,CString chCardName) /檢測(cè)聲卡int wavedevice/*, mididevice*/;WAVEOUTCAPS wavecap;/*MIDIOUTCAPS mid
23、icap;*/wavedevice = (int)waveOutGetNumDevs(); /波形設(shè)備信息/mididevice = (int)midiOutGetNumDevs(); / MIDI設(shè)備信息if (wavedevice > 0)for (int i = 0;i<wavedevice;i+)waveOutGetDevCaps(i, &wavecap, sizeof(WAVEOUTCAPS);/*OutputDebugString(wavecap.szPname);OutputDebugString(_T("n");*/chCardNamei
24、 = wavecap.szPname;/if (mididevice > 0)/for (int i = 0;i<mididevice;i+)/midiOutGetDevCaps(i, &midicap, sizeof(MIDIOUTCAPS);/OutputDebugString(midicap.szPname);/OutputDebugString(_T("n");/chCardNamewavedevice+i = midicap.szPname;/dwNum = wavedevice /*+ mididevice*/;return ; 系統(tǒng)文件mm
25、system.h提供聲卡(音頻輸出)讀取接口,函數(shù)為waveOutGetNumDevs,另外音頻輸入接口函數(shù)為waveInGetNumDevs,詳細(xì)了解mmsystem.h小問(wèn)題:Mmsystem.h文件typedef struct tagWAVEOUTCAPSW WORD wMid; /* manufacturer ID */ WORD wPid; /* product ID */ MMVERSION vDriverVersion; /* version of the driver */ WCHAR szPnameMAXERRORLENGTH; /* product name (NULL t
26、erminated string) */ DWORD dwFormats; /* formats supported */ WORD wChannels; /* number of sources supported */ WORD wReserved1; /* packing */ DWORD dwSupport; /* functionality supported by driver */ WAVEOUTCAPSW, *PWAVEOUTCAPSW, *NPWAVEOUTCAPSW, *LPWAVEOUTCAPSW;#ifdef UNICODEtypedef WAVEOUTCAPSW WA
27、VEOUTCAPS;* szPname的取值較小,建議微軟修改大小/* general constants */#define MAXPNAMELEN 32 /* max product name length (including NULL) */#define MAXERRORLENGTH 256 /* max error text length (including NULL) */#define MAX_JOYSTICKOEMVXDNAME 260 /* max oem vxd name length (including NULL) */參考鏈接:http:/snailzhang-1
28、26- 6、 檢測(cè)網(wǎng)卡信息/*聲明變量*/ private: CStringList Interfaces; /保存所有網(wǎng)卡的名字 CList < DWORD, DWORD &> Bandwidths; /各網(wǎng)卡的帶寬 CList < DWORD, DWORD &> TotalTraffics; /各網(wǎng)卡的總流量/*獲取網(wǎng)卡數(shù)目和名字*/ void GetInterFace(DWORD &dwNum,CString chCardName)/*CGetNetData pNet; DWORD pCount = pNet.GetNetworkInter
29、facesCount(); return pCount;*/ try #define DEFAULT_BUFFER_SIZE 40960L unsigned char *data = (unsigned char*)malloc(DEFAULT_BUFFER_SIZE); DWORD type; DWORD size = DEFAULT_BUFFER_SIZE; DWORD ret; char s_key4096; sprintf_s(s_key , 4096 , "510"); /RegQueryValueEx的固定調(diào)用格式 CString str(s_key); /如果
30、RegQueryValueEx函數(shù)執(zhí)行失敗則進(jìn)入循環(huán) while(ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, str, 0, &type, data, &size) != ERROR_SUCCESS) Sleep(10); /如果RegQueryValueEx的返回值為ERROR_MORE_DATA(申請(qǐng)的內(nèi)存區(qū)data太小,不能容納RegQueryValueEx返回的數(shù)據(jù)) if(ret = ERROR_MORE_DATA) Sleep(10); size += DEFAULT_BUFFER_SIZE; data = (unsig
31、ned char*) realloc(data, size);/重新分配足夠大的內(nèi)存 ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, str, 0, &type, data, &size);/重新執(zhí)行RegQueryValueEx函數(shù) /如果RegQueryValueEx返回值仍舊未成功則函數(shù)返回.(注意內(nèi)存泄露“free函數(shù)”)。 /這個(gè)if保證了這個(gè)while只能進(jìn)入一次避免死循環(huán) if(ret != ERROR_SUCCESS) if (NULL != data) free(data); data = NULL; dwNum =
32、0; /return 0;/0個(gè)接口 /函數(shù)執(zhí)行成功之后就是對(duì)返回的data內(nèi)存中數(shù)據(jù)的解析了,這個(gè)建議去查看MSDN有關(guān)RegQueryValueEx函數(shù)參數(shù)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明 /得到數(shù)據(jù)塊 PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data; /得到第一個(gè)對(duì)象 PERF_OBJECT_TYPE *objectPtr = (PERF_OBJECT_TYPE *) (BYTE *)dataBlockPtr + dataBlockPtr->HeaderLength); for(int a=0 ; a<(int)dataBlock
33、Ptr->NumObjectTypes ; a+) char nameBuffer255 = 0; if(objectPtr->ObjectNameTitleIndex = 510) DWORD processIdOffset = ULONG_MAX; PERF_COUNTER_DEFINITION *counterPtr =(PERF_COUNTER_DEFINITION *) (BYTE *)objectPtr + objectPtr->HeaderLength); for(int b=0 ; b<(int)objectPtr->NumCounters ; b
34、+) if(counterPtr->CounterNameTitleIndex = 520) processIdOffset = counterPtr->CounterOffset; counterPtr =(PERF_COUNTER_DEFINITION *) (BYTE *) counterPtr + counterPtr->ByteLength); if(processIdOffset = ULONG_MAX) if(data != NULL) free(data); data = NULL; dwNum = 0; /* return 0; */ PERF_INSTANCE_DEFINITION *instancePtr =(PERF_INSTANCE_DEFINITION *) (BYTE *) objectPtr + objectPtr->DefinitionLength); Interfaces.RemoveAll(); for(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何做一名合格的安全主管
- 2024年09月河南鄭州市屬事業(yè)單位第三批招聘189人(含衛(wèi)生類)筆試歷年專業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 2025名貴木材購(gòu)銷合同范本
- 加強(qiáng)電梯服務(wù)合同(2篇)
- 2025建筑項(xiàng)目責(zé)任承包合同
- 小語(yǔ)種學(xué)習(xí)者的全景分析試題及答案
- 漁業(yè)與水產(chǎn)養(yǎng)殖的比較分析考核試卷
- 現(xiàn)代音樂(lè)教育中的多元化教學(xué)方法考核試卷
- 《創(chuàng)建講座》課件
- 2025關(guān)于個(gè)人購(gòu)房合同
- DLT 5175-2021 火力發(fā)電廠熱工開關(guān)量和模擬量控制系統(tǒng)設(shè)計(jì)規(guī)程-PDF解密
- 公路工程設(shè)計(jì)方案設(shè)計(jì)工作量及計(jì)劃安排
- 5G+“三早”糖尿病管理2024課件
- 足球必修課課程教學(xué)大綱
- 玻璃鋼錨桿生產(chǎn)工藝
- 售后工程師的快速響應(yīng)和問(wèn)題解決能力
- 國(guó)開電大 可編程控制器應(yīng)用實(shí)訓(xùn) 形考任務(wù)1答案
- 河北省建筑施工安全技術(shù)資料管理標(biāo)準(zhǔn)表格
- 自動(dòng)打標(biāo)機(jī)機(jī)械原理課程設(shè)計(jì)
- 全國(guó)優(yōu)質(zhì)課一等獎(jiǎng)初中音樂(lè)《深情》課件
- 社區(qū)零星維修工程投標(biāo)方案(技術(shù)標(biāo))
評(píng)論
0/150
提交評(píng)論