V0lt http://msdn.microsoft.com/en-us/library/dd162609(v=vs.85).aspx Remarks
To query all display devices in the current session, call this function in a loop, starting with iDevNum set to 0, and incrementing iDevNum until the function fails. To select all display devices in the desktop, use only the display devices that have the DISPLAY_DEVICE_ATTACHED_TO_DESKTOP flag in the DISPLAY_DEVICE structure.
To get information on the display adapter, call EnumDisplayDevices with lpDevice set to NULL. For example, DISPLAY_DEVICE.DeviceString contains the adapter name.
To obtain information on a display monitor, first call EnumDisplayDevices with lpDevice set to NULL. Then call EnumDisplayDevices with lpDevice set to DISPLAY_DEVICE.DeviceName from the first call to EnumDisplayDevices and with iDevNum set to zero. Then DISPLAY_DEVICE.DeviceString is the monitor name.
To query all monitor devices associated with an adapter, call EnumDisplayDevices in a loop with lpDevice set to the adapter name, iDevNum set to start at 0, and iDevNum set to increment until the function fails. Note that DISPLAY_DEVICE.DeviceName changes with each call for monitor information, so you must save the adapter name. The function fails when there are no more monitors for the adapter.
Добавлено: Цитата: Ты не хочешь сделать отдельную функцию определения DeviceID? Я думаю ее надо внедрить в Monitors/MultiMonitor.h.
Да я не против. Я сделал так как сумел. Пример да, взял оттуда, попробовал - получилось. Так и оставил не заморачиваясь. Если одним циклом получится найти нужные нам значения (\\Display№, Device.Description, DeviceID) реальных физических устройств, а не всего г*на которое может быть определено (фейковые устройства, виртуальные и тп.) - то почему бы и нет. Я только за. Лишь бы работало как надо.
Добавлено: Win32_PnPEntity не пробовал.
У нас видеоадаптер может быть не один. Поэтому два цикла неизбежны, чтобы добраться до нужного нам ID монитора и случайно не подхватить что-то другое.