Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
lehha


Сообщения: n/a

Профиль | Цитировать


Если кого интересует как работают WMI классы вот пример кода который глядит имена cdrom - ов
Код: Выделить весь код
#include "stdafx.h"
  #define _WIN32_DCOM 
  #include <windows.h>
  #include <vector>
  #include <iostream>
  #include <comdef.h>
  #include <Wbemidl.h> 
  #pragma comment( lib, "Wbemuuid.lib" )
     int _tmain(int argc, _TCHAR* argv[]) 
    {
  	HRESULT hr; 
 	IWbemClassObject * pObject = NULL;	
 	IWbemServices * pService = NULL;	
  	IWbemLocator * pLocator = NULL;	
  	IEnumWbemClassObject * pEnum = NULL;	 
 	CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
         CoInitializeSecurity(NULL, -1, NULL, NULL,   	
	RPC_C_AUTHN_LEVEL_CONNECT,
         RPC_C_IMP_LEVEL_IMPERSONATE,
         NULL, EOAC_NONE, 0); 
         hr = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_ALL, 
         IID_IWbemLocator, (void**) &pLocator); 
        if (FAILED(hr)) 
 	{
  	        throw("Лажа не создано");  	
	        ::CoUninitialize();  	
	        return -1;
  	}
  	hr  = pLocator->ConnectServer( _bstr_t(L"root\\cimv2"),NULL,
                      NULL,NULL,NULL,NULL,NULL,&pService);  	
         if (FAILED(hr))
  	{  
		throw("Лажа нет конеткта");		
  		pLocator->Release();  		
                  ::CoUninitialize();  		
                  return -1;
  	}  	
         hr = pService->ExecQuery( _bstr_t(L"WQL"),
                                 _bstr_t(L"SELECT * FROM Win32_CDROMDrive"),   		
                                  WBEM_FLAG_RETURN_IMMEDIATELY |  
                                  WBEM_FLAG_FORWARD_ONLY, 
                                  0, &pEnum );
  	if (FAILED(hr))
  	{  	
	throw("Лажа несработал запрос");  	
	pService->Release();  	
	pLocator->Release();  	
	::CoUninitialize();  	
	return -1;
  	}  
	ULONG uReturn = 0;
  	while (pEnum)
  	{  	
	hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &uReturn);
  		if(0 == uReturn)
   		{   
			break;  
 		} 
  		VARIANT vtProp;
   		VariantInit(&vtProp);
 		 hr = pObject->Get(L"Name", 0, &vtProp, 0, 0);
   		std::wcout << " Name : " << vtProp.bstrVal << std::endl; 
  		VariantClear(&vtProp);
          	}
	  	pLocator->Release();
  	  	::CoUninitialize();
          	return 0;
  }

Отправлено: 16:19, 14-12-2005 | #4