EnumDisplayDevices vs WMI Win32_DesktopMonitor, ¿cómo detectar monitores activos?

Para mi proyecto actual de C ++, necesito detectar una cadena única para cada monitor que esté conectado y activo en una gran cantidad de computadoras.

La investigación ha apuntado a 2 opciones.

Use WMI y consulte el Win32_DesktopMonitor para todos los monitores activos. Utilice el PNPDeviceID para la identificación única de los monitores.

Use la API de EnumDisplayDevices y profundice para obtener la ID del dispositivo.

Estoy interesado en usar la identificación del dispositivo para la identificación única del modelo porque los monitores que usan el controlador de plug and play predeterminado informarán una cadena genérica como el nombre del monitor "monitor de plug and play predeterminado"

He estado experimentando problemas con el método WMI, parece que solo está devolviendo 1 monitor en mi máquina Vista, observando el documento, resulta que no funciona como se esperaba en dispositivos que no son WDDM.

El EnumDisplayDevices parece ser un poco problemático para ponerse en marcha cuando se ejecuta desde un servicio en segundo plano (especialmente en Vista). Si está en la sesión 0, no devolverá información.

¿Alguien más tuvo que hacer algo similar (encontrar una cadena de modelo única para todos los monitores activos conectados?)

¿Qué enfoque funcionó mejor?

Respuestas a la pregunta(5)

Su respuesta a la pregunta