Ответ 1
В зависимости от цели вы можете захотеть взглянуть на решение, основанное на драйверах. Я знаю, что у nVidia есть некоторые приличные библиотеки, которые дают вам доступ к большинству функций, не относящихся к панели управления.
Я пытаюсь получить идентификатор монитора, как показано в свойствах отображения Windows (# 1, 2... и т.д.), но я не могу найти способ. Я попытался использовать EnumDisplayMonitors, а также EnumDisplayDevices. Они возвращают что-то вроде "\.\DISPLAY1". Однако это число не всегда совпадает с числом, отображаемым Windows, особенно когда 2 видеоплаты используются для управления 3 или более мониторами. Есть ли API-запрос, который мне не хватает, чтобы получить эту информацию, или есть способ получить его из реестра или где-то еще? Спасибо!
Я пробовал эти методы:
Win32: EnumDisplayMonitors, EnumDisplayDevices: ни один из этих возвратных мониторов, которые неактивны, и никто не возвращает правильные идентификаторы.
WMI: "выберите * из Win32_DesktopMonitor" не возвращает все мониторы, и нет идентификатора.
Реестр: Я нашел мониторы в разных местах, ни одно из мест, которые я нашел, не имеет информации, которую я ищу.
Любая помощь очень ценится.:)
Обновление: Это номера мониторов, которые я ищу:
В зависимости от цели вы можете захотеть взглянуть на решение, основанное на драйверах. Я знаю, что у nVidia есть некоторые приличные библиотеки, которые дают вам доступ к большинству функций, не относящихся к панели управления.
Вы сделали два вызова EnumDisplayDevices? Попробуйте что-то вроде:
while (EnumDisplayDevices(0, dev, &dd, 0))
{
...
while (EnumDisplayDevices(dd.DeviceName, devMon, &ddMon, 0))
{
...
}
}
Просто предположим, но похоже, что Windows показывает iDevNum+1
в свойствах отображения Windows.