Auflisten von Monitoren auf einem Computer

Ich habe 7 verschiedene Möglichkeiten gefunden, um die an den Computer angeschlossenen Monitore aufzulisten. Alle Lösungen liefern jedoch unterschiedliche Ergebnisse (Anzahl der Monitore und Informationen auf jedem Monitor).

Diese Lösungen sind:

Mit dem berühmtenEnumDisplayDevices

VerwendenEnumDisplayMonitors

Verwendung derWindows-Verwaltungsinstrumentation (WMI):
Mit der folgenden Abfrage:SELECT * FROM WmiMonitorID in demroot\\WMI Namespace.

Wieder mit demWMI:
Mit der neuen Abfrage:SELECT * FROM Win32_DesktopMonitor in demroot\\CIMV2 Namespace.

Verwendung derSetup-API:
Beim ersten AnrufSetupDiGetClassDevs Um die eingestellten Geräteinformationen abzurufen, iterieren Sie mitSetupDiEnumDeviceInfo

Verwendung derDirectX-Grafikinfrastruktur (DXGI)
Mit zuerstIDXGIFactory::EnumAdapters, dannIDXGIAdapter::EnumOutput

Verwendung derAnschließen und Konfigurieren von CCD-APIs (Displays):
QueryDisplayConfig(QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr);

Ich habe versucht, den Unterschied zwischen all diesen Methoden mit der MSDN-Referenz genau zu verstehen, vergebens.

Beobachtungen

Nach allem, was ich beobachtet habe:

DasWmiMonitorID undSetup-API Abfragen geben die Liste der verbundenen (nicht unbedingt aktiven) Anzeigen zurück.DasWin32_DesktopMonitor WMI Abfrage kehrt zurückfalsch (zumindest unerwartetes) Ergebnis (nur 1 Monitor wird aufgelistet, auch wenn er inaktiv ist, und Desktop auf einem anderen Monitor).EnumDisplayDevices gibt die Liste der aktiven Geräte zurück (außer wenn nur 1 Monitor aktiv ist und ein anderer Monitor angeschlossen ist)EnumDisplayMonitors undDXGI Abfragen geben die Liste der aktiven Monitore zurück.CCD scheint die zuverlässigste Methode zu sein (gibt alle möglichen Pfade zwischen Zielen und Quellen an).Fragen

Welches Ergebnis kann ich wirklich erwarten, wenn ich jede dieser Methoden verwende (Liste der verbundenen Anzeigen, Liste der installierten Anzeigen, Liste der aktiven Anzeigen)? Was ist, wenn ich gespiegelte oder erweiterte Displays verwende? Was ist, wenn der Computer über mehrere Grafikkarten ohne mehrere Ausgänge verfügt?

Bonus: Einige Methoden (DXGI, EnumDisplayDevices, CCD) benutze eine Art Hierarchie mitAdapter-Monitor. Gibt aber nicht die gleichen Links zwischen Adaptern und Monitoren. Also, was ist die Definition eines Adapters fürDXGI? zumCCD? zumEnumDisplayDevices?