Перечисление мониторов на компьютере

Я нашел 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?