Перечисление мониторов на компьютере
Я нашел 7 разных способов перечисления мониторов, подключенных к компьютеру. Но все решения дают разные результаты (количество мониторов и информация на каждом мониторе).
Эти решения:
Используя знаменитыйEnumDisplayDevices
С помощьюEnumDisplayMonitors
С помощьюИнструментарий управления Windows (WMI):
С помощью следующего запроса:SELECT * FROM WmiMonitorID
вroot\\WMI
Пространство имен.
Снова используяWMI:
С новым запросом:SELECT * FROM Win32_DesktopMonitor
вroot\\CIMV2
Пространство имен.
С помощьюAPI настройки:
По первому звонкуSetupDiGetClassDevs
чтобы получить информацию об устройстве, установленную затем, итерации сSetupDiEnumDeviceInfo
С помощьюГрафическая инфраструктура DirectX (DXGI)
С первогоIDXGIFactory::EnumAdapters
, тогдаIDXGIAdapter::EnumOutput
С помощьюAPI-интерфейсы подключения и настройки дисплеев (CCD):QueryDisplayConfig
(QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr);
Я тщетно пытался понять разницу между всеми этими методами со ссылкой на MSDN.
наблюденияИз того, что я наблюдал:
WmiMonitorID а такжеAPI настройки запросы возвращают список подключенных (не обязательно активных) дисплеев.Win32_DesktopMonitor WMI запрос возвращаетнеправильно (по крайней мере, неожиданный) результат (перечислен только 1 монитор, даже если он неактивен и рабочий стол на другом мониторе).EnumDisplayDevices возвращает список активных устройств (кроме случаев, когда активен только 1 монитор с подключенным другим монитором)EnumDisplayMonitors а такжеDXGI запросы возвращают список активных мониторов.CCD кажется наиболее надежным методом (дает все возможные пути между целями и источниками).ВопросовКакого результата мне следует ожидать при использовании каждого из этих методов (список подключенных дисплеев, список установленных дисплеев, список активных дисплеев)? Что если я использую зеркальные или расширенные дисплеи? Что если на компьютере установлено несколько видеокарт без нескольких выходов?
Бонус: некоторые методы (DXGI, EnumDisplayDevices, CCD) использовать своего рода иерархию садаптер-монитор, Но не дает одинаковых связей между адаптерами и мониторами. Итак, каково определение адаптера дляDXGI? заCCD? заEnumDisplayDevices?