Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 17:01   #1
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию ThermalZoneTemperature, Win32_Fan, WMI

Забитая тема, но все равно я так и не смог найти ответа на вопрос получения показателей с датчиков темпиратуры средствами Windows...
Код ниже взят с msdn с небольшими корректировками, но он явно дает не то что нужно, а именно возвращается константа:
Код:
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>

# pragma comment(lib, "wbemuuid.lib")

int main(int argc, char **argv)
{
    CoInitializeEx(0, COINIT_MULTITHREADED);    // Initialize COM
    try  
    {
        HRESULT hres;

		hres =  CoInitializeSecurity(NULL, -1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,
			RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);    
		if (FAILED(hres))
		{
			cout << "Failed to initialize security. Error code = 0x" 
				<< hex << hres << endl;
			CoUninitialize();
			return 1;                    // Program has failed.
		}

		IWbemLocator *pLoc = NULL;
		hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID *) &pLoc);
	 
		if (FAILED(hres))
		{
			cout << "Failed to create IWbemLocator object."
				<< " Err code = 0x"
				<< hex << hres << endl;
			CoUninitialize();
			return 1;                 // Program has failed.
		}

		IWbemServices *pSvc = NULL;
		
		// Connect to the root\WMI namespace with
		// the current user and obtain pointer pSvc
		// to make IWbemServices calls.
		hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\WMI"),NULL,NULL,0,NULL,0,0,&pSvc);
		if (FAILED(hres))
		{
			cout << "Could not connect. Error code = 0x" 
				 << hex << hres << endl;
			pLoc->Release();     
			CoUninitialize();
			return 1;                // Program has failed.
		}

		hres = 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))
		{
			cout << "Could not set proxy blanket. Error code = 0x" 
				<< hex << hres << endl;
			pSvc->Release();
			pLoc->Release();     
			CoUninitialize();
			return 1;               // Program has failed.
		}

		IEnumWbemClassObject* pEnumerator = NULL;

		hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM MSAcpi_ThermalZoneTemperature"),
			WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);

		if (FAILED(hres))
		{
			cout << "Query for operating system name failed."
				<< " Error code = 0x" 
				<< hex << hres << endl;
			pSvc->Release();
			pLoc->Release();
			CoUninitialize();
			return 1;               // Program has failed.
		}

		IWbemClassObject *pclsObj;
		ULONG uReturn = 0;
		SAFEARRAY *allNames;
		while (pEnumerator)
		{
			HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);			
			if(0 == uReturn)
			{
				break;
			}
			/*pclsObj->GetNames(NULL,0,NULL,&allNames);
			for (LONG a = allNames->rgsabound[0].lLbound; a < allNames->rgsabound[0].lLbound + allNames->rgsabound[0].cElements; a++)
			{    
				BSTR		name;   
				hres = SafeArrayGetElement(allNames, &a, &name);  
				wcout << name << endl;
			}*/
			VARIANT vtProp;
			VariantInit(&vtProp);

			hr = pclsObj->Get(L"CurrentTemperature", 0, &vtProp, 0, 0);
			wcout << "Current CPU Temperature : " << (vtProp.intVal - 2732)/10.0 << endl;
			
			VariantClear(&vtProp);
			pclsObj->Release();
		}

		// Cleanup
		// ========
	    
		pSvc->Release();
		pLoc->Release();
		pEnumerator->Release();
		/*pclsObj->Release();*/
    }
    // In case there was an error, print it out...
    catch (_com_error err)
    {
        printf("Error occurred: %S",err.ErrorMessage());
    }
    CoUninitialize();
    return 0; 
}
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WMI список окон Stilet Win Api 2 23.09.2010 16:09
mingw wmi the_deer_one Общие вопросы C/C++ 2 25.08.2010 21:23
Температура процессора без использования wmi. the_deer_one Общие вопросы C/C++ 0 24.08.2010 11:54
Представление даты/времени в WMI Баламут Общие вопросы Delphi 3 17.02.2010 09:21
блокировка WMI north Win Api 2 15.02.2009 16:54