//bazuje na tym - http://msdn.microsoft.com/en-us/library ... 85%29.aspx
//
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#include <windows.h>
#include <Winuser.h>
#include <comdef.h>
# pragma comment(lib, "wbemuuid.lib")
#include <conio.h>
int main(){
CoInitialize(NULL);
if (CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) != S_OK)
return 0;
IWbemLocator* pIWbemLocator = NULL;
IWbemServices* pWbemServices = NULL;
IEnumWbemClassObject* pEnumObject = NULL;
//BSTR bstrNamespace = (L"root\\cimv2");
BSTR bstrNamespace = (L"root\\WMI");
if (CoCreateInstance (
CLSID_WbemAdministrativeLocator,
NULL ,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,
IID_IUnknown ,
( void ** ) & pIWbemLocator) != S_OK)
return 0;
if (pIWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, NULL, 0,
NULL, NULL,&pWbemServices) != S_OK)
return 0;
HRESULT hRes;
//BSTR strQuery = (L"Select * from win32_Processor");
BSTR strQuery = (L"Select * from MSAcpi_ThermalZoneTemperature");
BSTR strQL = (L"WQL");
hRes = pWbemServices->ExecQuery(strQL, strQuery,
WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumObject);
if (hRes != S_OK)
{
MessageBox(0, "Could not execute Query", 0, 0);
return 0;
}
hRes = pEnumObject->Reset();
if (hRes != S_OK)
{
MessageBox(0, "Could not Enumerate", 0, 0);
return 0;
}
ULONG uCount = 1, uReturned;
IWbemClassObject* pClassObject = NULL;
hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
if(hRes != S_OK)
{
MessageBox(0, "Could not Enumerate - 123", 0, 0);
return 0;
}
VARIANT v;
BSTR strClassProp = SysAllocString(L"CurrentTemperature");
hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
if (hRes != S_OK)
{
MessageBox(0, "Could not Get Value", 0, 0);
return 0;
}
//BSTR Bstr = &v;
SysFreeString(strClassProp);
_bstr_t bstrPath = &v; //Just to convert BSTR to ANSI
//_bstr_t bstrPath(Bstr);
char* strPath=(char*)bstrPath;
if (SUCCEEDED(hRes))
MessageBoxA(NULL, strPath, 0, 0);
else
MessageBoxA(NULL,"Error in getting object", 0, 0);
VariantClear(&v);
pIWbemLocator->Release();
pWbemServices->Release();
pEnumObject->Release();
pClassObject->Release();
CoUninitialize();
getch();
return 0;
}