Enumerando monitores em um computador

Eu encontrei 7 maneiras diferentes de enumerar os monitores conectados ao computador. Mas todas as soluções fornecem resultados diferentes (número de monitores e informações em cada monitor).

Essas soluções são:

Usando o famosoEnumDisplayDevices

UsandoEnumDisplayMonitors

Usando oInstrumentação de Gerenciamento do Windows (WMI):
Com a seguinte consulta:SELECT * FROM WmiMonitorID noroot\\WMI namespace.

Novamente usando oWMI:
Com a nova consulta:SELECT * FROM Win32_DesktopMonitor noroot\\CIMV2 namespace.

Usando oAPI de configuração:
Chamando pela primeira vezSetupDiGetClassDevs para recuperar o conjunto de informações do dispositivo, iterandoSetupDiEnumDeviceInfo

Usando oInfraestrutura Gráfica DirectX (DXGI)
Com primeiroIDXGIFactory::EnumAdapters, entãoIDXGIAdapter::EnumOutput

Usando oConectando e configurando APIs de exibição (CCD):
QueryDisplayConfig(QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr);

Eu tentei entender precisamente a diferença entre todos esses métodos com a referência do MSDN, em vão.

Observações

Pelo que eu observei:

oWmiMonitorID eAPI de configuração consultas retornam a lista de exibições conectadas (não necessariamente ativas).oWin32_DesktopMonitor WMI retornos de consultaerrado (pelo menos inesperado) resultado (apenas 1 monitor enumerado mesmo quando inativo e desktop em outro monitor).EnumDisplayDevices retorna a lista de dispositivos ativos (exceto quando apenas 1 monitor está ativo com outro monitor conectado)EnumDisplayMonitors eDXGI consultas retornam a lista de monitores ativos.CCD parece ser o método mais confiável (dá todos os caminhos possíveis entre alvos e fontes).Questões

Qual resultado devo realmente esperar ao usar cada um desses métodos (lista de exibições conectadas, lista de exibições instaladas, lista de exibições ativas)? E se eu usar visores espelhados ou exibições estendidas? E se o computador tiver várias placas gráficas sem várias saídas?

Bônus: Alguns métodos (DXGI, EnumDisplayDevices, CCD) usar um tipo de hierarquia comAdaptador-Monitor. Mas não dá os mesmos links entre adaptadores e monitores. Então, qual é a definição de um adaptador paraDXGI? paraCCD? paraEnumDisplayDevices?

questionAnswers(2)

yourAnswerToTheQuestion