Advertisement
mozartito

Temperatura sensores

Dec 17th, 2012
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. HRESULT GetCpuTemperature(LPLONG pTemperature);
  2.  
  3. int _tmain(int argc, _TCHAR* argv[])
  4. {
  5.     LONG temp;
  6.     HRESULT hr = GetCpuTemperature(&temp);
  7.     printf("hr=0x%08x temp=%i\n", hr, temp);
  8. }
  9.  
  10. HRESULT GetCpuTemperature(LPLONG pTemperature)
  11. {
  12.     if (pTemperature == NULL)
  13.         return E_INVALIDARG;
  14.  
  15.     *pTemperature = -1;
  16.     HRESULT ci = CoInitialize(NULL); // needs comdef.h
  17.     HRESULT hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
  18.     if (SUCCEEDED(hr))
  19.     {
  20.         IWbemLocator *pLocator; // needs Wbemidl.h & Wbemuuid.lib
  21.         hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLocator);
  22.         if (SUCCEEDED(hr))
  23.         {
  24.             IWbemServices *pServices;
  25.             BSTR ns = SysAllocString(L"root\\WMI");
  26.             hr = pLocator->ConnectServer(ns, NULL, NULL, NULL, 0, NULL, NULL, &pServices);
  27.             pLocator->Release();
  28.             SysFreeString(ns);
  29.             if (SUCCEEDED(hr))
  30.             {
  31.                 BSTR query = SysAllocString(L"SELECT * FROM MSAcpi_ThermalZoneTemperature");
  32.                 BSTR wql = SysAllocString(L"WQL");
  33.                 IEnumWbemClassObject *pEnum;
  34.                 hr = pServices->ExecQuery(wql, query, WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY, NULL, &pEnum);
  35.                 SysFreeString(wql);
  36.                 SysFreeString(query);
  37.                 pServices->Release();
  38.                 if (SUCCEEDED(hr))
  39.                 {
  40.                     IWbemClassObject *pObject;
  41.                     ULONG returned;
  42.                     hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &returned);
  43.                     pEnum->Release();
  44.                     if (SUCCEEDED(hr))
  45.                     {
  46.                         BSTR temp = SysAllocString(L"CurrentTemperature");
  47.                         VARIANT v;
  48.                         VariantInit(&v);
  49.                         hr = pObject->Get(temp, 0, &v, NULL, NULL);
  50.                         pObject->Release();
  51.                         SysFreeString(temp);
  52.                         if (SUCCEEDED(hr))
  53.                         {
  54.                             *pTemperature = V_I4(&v);
  55.                         }
  56.                         VariantClear(&v);
  57.                     }
  58.                 }
  59.             }
  60.             if (ci == S_OK)
  61.             {
  62.                 CoUninitialize();
  63.             }
  64.         }
  65.     }
  66.     return hr;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement