Just a quick question. Does anyone know how to determine how much video ram a video card has. e.g. 64meg, 128 meg etc ?
I need to do this in code.
I searched via google but couldn't work it out.
Clootie
26-03-2005, 08:45 PM
1) DirectX - use Direct3D7 interfaces for this
2) more general - use WMI. -- C++ version (http://ofb.net/~wesn/test.cpp)
3) another DirectX - use DXDiag...
again C++ version :roll:
IDxDiagProviderAutoPtr dxDiagProvider;
HRESULT hr = CoCreateInstance(CLSID_DxDiagProvider, 0,
CLSCTX_INPROC_SERVER, IID_IDxDiagProvider, (LPVOID*)&dxDiagProvider);
if (SUCCEEDED(hr))
{
DXDIAG_INIT_PARAMS dxDiagInitParam;
ZeroMemory(&dxDiagInitParam, sizeof(DXDIAG_INIT_PARAMS));
dxDiagInitParam.dwSize =
sizeof(DXDIAG_INIT_PARAMS);
dxDiagInitParam.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION;
dxDiagInitParam.bAllowWHQLChecks = FALSE;
dxDiagInitParam.pReserved = 0;
IDxDiagContainerAutoPtr dxDiagRoot;
hr = dxDiagProvider->Initialize(&dxDiagInitParam);
if (SUCCEEDED(hr))
{
hr = dxDiagProvider->GetRootContainer(&dxDiagRoot);
if (SUCCEEDED(hr))
{
// enumerate all display devices until we find the device
identified by mD3DAdapterIdentifier.DeviceIdentifier
IDxDiagContainerAutoPtr dxDispDevices;
hr = dxDiagRoot->GetChildContainer(L"DxDiag_DisplayDevices",
&dxDispDevices);
if (SUCCEEDED(hr))
{
DWORD numDevices = 0;
hr =
dxDispDevices->GetNumberOfChildContainers(&numDevices);
if (SUCCEEDED(hr))
{
for (Uint dev = 0; dev < numDevices; dev++)
{
WCHAR devName[256];
hr = dxDispDevices->EnumChildContainerNames(dev,
devName, 256);
if (SUCCEEDED(hr))
{
IDxDiagContainerAutoPtr dxDispDevice;
hr = dxDispDevices->GetChildContainer(devName,
&dxDispDevice);
if (SUCCEEDED(hr))
{
// get this device's GUID, and see if it is
equal to mD3DAdapterIdentifier.DeviceIdentifier
GUID devGUID;
memcpy(&devGUID, &__uuidof(0), sizeof(GUID));
VARIANT v;
VariantInit(&v);
hr =
dxDispDevice->GetProp(L"szDeviceIdentifier", &v);
if (SUCCEEDED(hr) && v.vt == VT_BSTR)
{
IIDFromString(v.bstrVal, &devGUID);
}
VariantClear(&v);
if (IsEqualGUID(devGUID,
mD3DAdapterIdentifier.DeviceIdentifier))
{
// parse the display adapter memory string
hr =
dxDispDevice->GetProp(L"szDisplayMemoryEnglish", &v);
if (SUCCEEDED(hr) && v.vt == VT_BSTR)
{
WCHAR* endPtr = 0;
double adapterRam = wcstod(v.bstrVal,
&endPtr);
if (endPtr != v.bstrVal)
{
mVideoMemorySize = long(adapterRam)
* 1024 * 1024;
}
}
VariantClear(&v);
break; // done enumerating devices
}
}
}
}
}
}
}
}
}
It is all Greek to me :?
Thanks, I should be able to use this knowledge to work something out.
I actually do not know any C/C++ code.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.