Как я могу получить информацию о мониторе? - PullRequest
13 голосов
/ 08 апреля 2010

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

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

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

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

Ответы [ 3 ]

1 голос
/ 09 апреля 2010

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

1 голос
/ 09 апреля 2010

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

while (EnumDisplayDevices(0, dev, &dd, 0))
{
...
  while (EnumDisplayDevices(dd.DeviceName, devMon, &ddMon, 0))
  {
   ...
  }
}
0 голосов
/ 08 апреля 2010

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

...