我已经用GlobalMemoryStatusEx函数获取物理内存容量等信息,还有内存条数和型号怎么获取
1条回答 默认 最新
- shen_wei 2017-04-18 07:45关注
WMIC Memorychip 来读取内心信息。。。
#include <iostream> using namespace std; #include <Wbemidl.h> # pragma comment(lib, "wbemuuid.lib") int __cdecl wmain(int argc, wchar_t* argv[]) { // To add error checking, // check returned HRESULT below where collected. HRESULT hr = S_OK; IWbemRefresher *pRefresher = NULL; IWbemConfigureRefresher *pConfig = NULL; IWbemHiPerfEnum *pEnum = NULL; IWbemServices *pNameSpace = NULL; IWbemLocator *pWbemLocator = NULL; IWbemObjectAccess **apEnumAccess = NULL; BSTR bstrNameSpace = NULL; long lID = 0; long lVirtualBytesHandle = 0; long lIDProcessHandle = 0; DWORD dwVirtualBytes = 0; DWORD dwProcessId = 0; DWORD dwNumObjects = 0; DWORD dwNumReturned = 0; DWORD dwIDProcess = 0; DWORD i=0; int x=0; if (FAILED (hr = CoInitializeEx(NULL,COINIT_MULTITHREADED))) { goto CLEANUP; } if (FAILED (hr = CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0))) { goto CLEANUP; } if (FAILED (hr = CoCreateInstance( CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**) &pWbemLocator))) { goto CLEANUP; } // Connect to the desired namespace. bstrNameSpace = SysAllocString(L"\\\\.\\root\\cimv2"); if (NULL == bstrNameSpace) { hr = E_OUTOFMEMORY; goto CLEANUP; } if (FAILED (hr = pWbemLocator->ConnectServer( bstrNameSpace, NULL, // User name NULL, // Password NULL, // Locale 0L, // Security flags NULL, // Authority NULL, // Wbem context &pNameSpace))) { goto CLEANUP; } pWbemLocator->Release(); pWbemLocator=NULL; SysFreeString(bstrNameSpace); bstrNameSpace = NULL; if (FAILED (hr = CoCreateInstance( CLSID_WbemRefresher, NULL, CLSCTX_INPROC_SERVER, IID_IWbemRefresher, (void**) &pRefresher))) { goto CLEANUP; } if (FAILED (hr = pRefresher->QueryInterface( IID_IWbemConfigureRefresher, (void **)&pConfig))) { goto CLEANUP; } // Add an enumerator to the refresher. if (FAILED (hr = pConfig->AddEnum( pNameSpace, L"Win32_PerfRawData_PerfProc_Process", 0, NULL, &pEnum, &lID))) { goto CLEANUP; } pConfig->Release(); pConfig = NULL; // Get a property handle for the VirtualBytes property. // Refresh the object ten times and retrieve the value. for(x = 0; x < 10; x++) { dwNumReturned = 0; dwIDProcess = 0; dwNumObjects = 0; if (FAILED (hr =pRefresher->Refresh(0L))) { goto CLEANUP; } hr = pEnum->GetObjects(0L, dwNumObjects, apEnumAccess, &dwNumReturned); // If the buffer was not big enough, // allocate a bigger buffer and retry. if (hr == WBEM_E_BUFFER_TOO_SMALL && dwNumReturned > dwNumObjects) { apEnumAccess = new IWbemObjectAccess*[dwNumReturned]; if (NULL == apEnumAccess) { hr = E_OUTOFMEMORY; goto CLEANUP; } SecureZeroMemory(apEnumAccess, dwNumReturned*sizeof(IWbemObjectAccess*)); dwNumObjects = dwNumReturned; if (FAILED (hr = pEnum->GetObjects(0L, dwNumObjects, apEnumAccess, &dwNumReturned))) { goto CLEANUP; } } else { if (hr == WBEM_S_NO_ERROR) { hr = WBEM_E_NOT_FOUND; goto CLEANUP; } } // First time through, get the handles. if (0 == x) { CIMTYPE VirtualBytesType; CIMTYPE ProcessHandleType; if (FAILED (hr = apEnumAccess[0]->GetPropertyHandle( L"VirtualBytes", &VirtualBytesType, &lVirtualBytesHandle))) { goto CLEANUP; } if (FAILED (hr = apEnumAccess[0]->GetPropertyHandle( L"IDProcess", &ProcessHandleType, &lIDProcessHandle))) { goto CLEANUP; } } for (i = 0; i < dwNumReturned; i++) { if (FAILED (hr = apEnumAccess[i]->ReadDWORD( lVirtualBytesHandle, &dwVirtualBytes))) { goto CLEANUP; } if (FAILED (hr = apEnumAccess[i]->ReadDWORD( lIDProcessHandle, &dwIDProcess))) { goto CLEANUP; } wprintf(L"Process ID %lu is using %lu bytes\n", dwIDProcess, dwVirtualBytes); // Done with the object apEnumAccess[i]->Release(); apEnumAccess[i] = NULL; } if (NULL != apEnumAccess) { delete [] apEnumAccess; apEnumAccess = NULL; } // Sleep for a second. Sleep(1000); } // exit loop here CLEANUP: if (NULL != bstrNameSpace) { SysFreeString(bstrNameSpace); } if (NULL != apEnumAccess) { for (i = 0; i < dwNumReturned; i++) { if (apEnumAccess[i] != NULL) { apEnumAccess[i]->Release(); apEnumAccess[i] = NULL; } } delete [] apEnumAccess; } if (NULL != pWbemLocator) { pWbemLocator->Release(); } if (NULL != pNameSpace) { pNameSpace->Release(); } if (NULL != pEnum) { pEnum->Release(); } if (NULL != pConfig) { pConfig->Release(); } if (NULL != pRefresher) { pRefresher->Release(); } CoUninitialize(); if (FAILED (hr)) { wprintf (L"Error status=%08x\n",hr); } return 1; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 链接问题 C++LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题
- ¥15 Python时间序列如何拟合疏系数模型
- ¥15 求学软件的前人们指明方向🥺
- ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接