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

C++ enumdisplayDevices返回一张显示卡的多个实例,c++,registrykey,C++,Registrykey,您好,我正在使用以下代码片段获取我的windows 7系统中的显示适配器数量。我有一个NVidia GT 120连接到我的显示器,还有一个NVidia Quadro 4000作为我的GPU处理器 由于两个显示适配器都有多个输出端口,使用下面的代码,我实际上得到了GT120的2个显示设备实例和Quadro 4000的2个显示设备实例。我解决这个问题的方法实际上是使用DisplayDevice结构的DeviceKey组件(MSDN说没有使用它,但实际上它是一个注册表项)作为删除重复实例的标准 有没有

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

由于两个显示适配器都有多个输出端口,使用下面的代码,我实际上得到了GT120的2个显示设备实例和Quadro 4000的2个显示设备实例。我解决这个问题的方法实际上是使用DisplayDevice结构的DeviceKey组件(MSDN说没有使用它,但实际上它是一个注册表项)作为删除重复实例的标准

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

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;