enumdisplayDevices返回一个显示卡的多个实例

时间:2011-09-29 14:40:38

标签: c++ registrykey

您好我正在使用以下代码片段来获取我的Windows 7系统中的显示适配器数量。我有一个连接到我的显示器的NVidia GT 120和一个充当我的GPU处理器的NVidia Quadro 4000。

因为两个显示适配器都有多个输出端口,使用下面的代码,实际上我为GT120获得了2个Display_Device实例,而实际上为Quadro 4000获得了2个。我解决这个问题实际上是使用了DeviceKey组件(MSDN表示不是使用,但它实际上是DisplayDevice结构的注册表键,作为删除重复实例的条件。

有没有人有这个问题的更好或官方的解决方案?

FARPROC EnumDisplayDevices;
HINSTANCE  hInstUser32;
DISPLAY_DEVICE DispDev; 
char szSaveDeviceName[32];
BOOL bRet = TRUE;

hInstUser32 = LoadLibrary("User32.DLL");
if (!hInstUser32) return FALSE;  

// Get the address of the EnumDisplayDevices function
EnumDisplayDevices = (FARPROC)GetProcAddress(hInstUser32,"EnumDisplayDevicesA");
if (!EnumDisplayDevices) {
    FreeLibrary(hInstUser32);
    return FALSE;
}

ZeroMemory(&DispDev, sizeof(DISPLAY_DEVICE));
DispDev.cb = sizeof(DISPLAY_DEVICE); 

// After the first call to EnumDisplayDevices, 
// DispDev.DeviceString is the adapter name
while (EnumDisplayDevices(NULL, nDeviceIndex++, &DispDev, 0)) {  
    //getdevice
} 
FreeLibrary(hInstUser32);

return bRet;

0 个答案:

没有答案