Como habrás descubierto, EnumDisplayMonitors()
hará el trabajo pero es un poco complicado llamar. La documentación indica:
La función EnumDisplayMonitors enumera monitores de visualización (incluyendo invisibles pseudo-monitores asociados con los controladores de espejo) que se cruzan una región formada por la intersección de un rectángulo de recorte especificada y la región visible de un contexto de dispositivo. EnumDisplayMonitors llama a una función de devolución de llamada MonitorEnumProc definida por la aplicación una vez para cada monitor que se enumera. Tenga en cuenta que GetSystemMetrics (SM_CMONITORS) cuenta solo los monitores de visualización.
Esto nos lleva a una solución más fácil: GetSystemMetrics(SM_CMONITORS)
. De hecho, esto puede ser incluso mejor que EnumDisplayMonitors()
si tiene monitores psuedo.
Como ilustración de llamar EnumDisplayMonitors()
intente esto:
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
int *Count = (int*)dwData;
(*Count)++;
return TRUE;
}
int MonitorCount()
{
int Count = 0;
if (EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)&Count))
return Count;
return -1;//signals an error
}
La página de MSDN se conectó menciona el uso de GetSystemMetrics (SM_CMONITORS) para contar la cantidad de pantallas físicas. Eso funciona para ti? – IronMensan