|
안녕하세염.^^ 제가 RAM카드의 정보를 가져올려고 API중에 Win32_PhysicalMemory class에서 가져올려고 했습니다.. 그런데 여기
서는 RAM카드 갯수나 제조회사, Part Number, Serial Number 만 가져오는게 됬습니다.ㅠ 제가 가져오고 싶은 정보는 위의 사진
에 있는 Module Size(4096 MBytes), Max Bandwidth(PC3-10700( 667MHz))등의 성능 정보를 가져오려고 합니다.
혹시 방법을 아시는 분 있나요??
밑에는 Win32_PhysicalMemory에서 제조회사와 Serial Number를 가져오는 소스입니다.^^
void GetAPI()
{
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
//if (FAILED(hres))
CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL
);
//if (FAILED(hres))
IWbemLocator *pLoc = NULL;
CoCreateInstance(
CLSID_WbemAdministrativeLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID *) &pLoc
);
//if (FAILED(hres))
IWbemServices *pSvc = NULL;
pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"),
NULL,
NULL,
0,
NULL,
0,
0,
&pSvc
);
//if (FAILED(hres))
//"Connected to ROOT\\CIMV2 WMI namespace"
CoSetProxyBlanket(
pSvc,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE
);
//if (FAILED(hres))
IEnumWbemClassObject* pEnumerator = NULL;
pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_PhysicalMemory"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator
);
//if (FAILED(hres))
IWbemClassObject *pclsObj = NULL;
ULONG uReturn = 0;
if(pEnumerator)
{
pEnumerator->Reset();
pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if(uReturn != 0)
{
VARIANT vtProp;
String arr_InfoList[] = {
L"Manufacturer",
L"PartNumber",
L"SerialNumber",
};
for(int nIndex = 0; nIndex < sizeof(arr_InfoList); nIndex++)
{
ZeroMemory(&vtProp, sizeof(vtProp));
pclsObj->Get(arr_InfoList[nIndex].w_str(), 0, &vtProp, 0, 0);
if (vtProp.bstrVal)
{
Main->Memo1->Lines->Add(vtProp.bstrVal); //String형 데이터
VariantClear(&vtProp);
}
Application->ProcessMessages();
}
pclsObj->Release();
pclsObj=NULL;
}
}
pSvc->Release();
pLoc->Release();
if(pEnumerator) pEnumerator->Release();
if(pclsObj) pclsObj->Release();
CoUninitialize();
}
|