Как получить информацию о мониторе?

Я пытаюсь получить идентификатор монитора, как показано в свойствах отображения Windows (# 1, 2... и т.д.), но я не могу найти способ. Я попытался использовать EnumDisplayMonitors, а также EnumDisplayDevices. Они возвращают что-то вроде "\.\DISPLAY1". Однако это число не всегда совпадает с числом, отображаемым Windows, особенно когда 2 видеоплаты используются для управления 3 или более мониторами. Есть ли API-запрос, который мне не хватает, чтобы получить эту информацию, или есть способ получить его из реестра или где-то еще? Спасибо!

Я пробовал эти методы:
Win32: EnumDisplayMonitors, EnumDisplayDevices: ни один из этих возвратных мониторов, которые неактивны, и никто не возвращает правильные идентификаторы.
WMI: "выберите * из Win32_DesktopMonitor" не возвращает все мониторы, и нет идентификатора.
Реестр: Я нашел мониторы в разных местах, ни одно из мест, которые я нашел, не имеет информации, которую я ищу.

Любая помощь очень ценится.:)

Обновление: Это номера мониторов, которые я ищу: alt text

Ответы

Ответ 1

В зависимости от цели вы можете захотеть взглянуть на решение, основанное на драйверах. Я знаю, что у nVidia есть некоторые приличные библиотеки, которые дают вам доступ к большинству функций, не относящихся к панели управления.

Ответ 2

Вы сделали два вызова EnumDisplayDevices? Попробуйте что-то вроде:

while (EnumDisplayDevices(0, dev, &dd, 0))
{
...
  while (EnumDisplayDevices(dd.DeviceName, devMon, &ddMon, 0))
  {
   ...
  }
}

Ответ 3

Просто предположим, но похоже, что Windows показывает iDevNum+1 в свойствах отображения Windows.