enumdisplayDevices возвращает несколько экземпляров для одной видеокарты - PullRequest
1 голос
/ 29 сентября 2011

Привет! Я использую следующий фрагмент кода, чтобы узнать количество адаптеров дисплея в моей системе Windows 7. У меня есть NVidia GT 120, которая подключена к моему монитору, и NVidia Quadro 4000, которая выступает в качестве моего процессора GPU.

Поскольку оба адаптера дисплея имеют более одного выходного порта со следующим кодом, я на самом деле получаю 2 экземпляра Display_Device для GT120 и 2 для Quadro 4000. Моя работа для решения этой проблемы на самом деле с использованием компонента 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;
...