Судя по всему это либо сложно, либо бессмыслено.
Гугл выдает такие варианты:
Через DirectX 9:
http://msdn.microsoft.com/en-us/library ... s.85).aspx
Вот еще нарыл код тестовой проги, автор утверждает что работать должен верно, я сам не проверял:
Код: Выделить всё
#include <stdio.h>
#include <tchar.h>
#define _WIN32_DCOM 1
#include <windows.h>
#include <wbemidl.h>
#include <comutil.h>
#pragma comment(linker, "/defaultlib:comsuppw.lib")
#pragma comment(linker, "/defaultlib:wbemuuid.lib")
int _tmain(int argc, _TCHAR* argv[])
{
IWbemLocator* locator = NULL;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**)&locator);
if( FAILED(hr) )
{
printf("Couldn't create locator.\n");
return 1;
}
IWbemServices* services = NULL;
hr = locator->ConnectServer(_bstr_t("root\\cimv2"), NULL, NULL, NULL, 0, NULL, NULL, &services);
locator->Release();
if( FAILED(hr) )
{
printf("Couldn't connect.\n");
return 2;
}
hr = CoSetProxyBlanket(services, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
if( FAILED(hr) )
{
services->Release();
printf("Could not set security.\n");
return 3;
}
IEnumWbemClassObject* instanceEnum = NULL;
hr = services->CreateInstanceEnum(_bstr_t("Win32_VideoController"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &instanceEnum);
services->Release();
if( FAILED(hr) )
{
printf("Couldn't create enumerator.\n");
return 3;
}
IWbemClassObject* instance;
ULONG objectsReturned = 0;
while( 1 )
{
hr = instanceEnum->Next(WBEM_INFINITE, 1, &instance, &objectsReturned);
if( FAILED(hr) )
{
instanceEnum->Release();
printf("Enum->Next() failed.\n");
return 4;
}
if( objectsReturned != 1 )
break;
VARIANT v;
VariantInit(&v);
hr = instance->Get(_bstr_t("AdapterRAM"), 0, &v, NULL, NULL);
if( FAILED(hr) )
{
printf("Could not retrieve \"AdapterRAM\" property.\n");
}
else
{
printf("AdapterRAM = %d\n", V_UI4(&v)/(1024*1024));
}
VariantClear(&v);
instance->Release();
instance = NULL;
}
instanceEnum->Release();
printf("Completed Successfully.\n");
CoUninitialize();
Sleep(5000);
return 0;
}