Как вы обнаружили, EnumDisplayMonitors()
выполнит эту работу, но позвонить немного сложнее.В документации говорится:
Функция EnumDisplayMonitors перечисляет мониторы дисплея (включая невидимые псевдомониторы, связанные с драйверами зеркального отображения), которые пересекают область, образованную пересечением указанного прямоугольника отсечения и видимой областиконтекст устройства.EnumDisplayMonitors вызывает определенную приложением функцию обратного вызова MonitorEnumProc один раз для каждого перечисляемого монитора.Обратите внимание, что GetSystemMetrics (SM_CMONITORS) учитывает только мониторы дисплея.
Это приводит нас к более простому решению: GetSystemMetrics(SM_CMONITORS)
.Действительно, это может быть даже лучше, чем EnumDisplayMonitors()
, если у вас есть псевдо-мониторы.
В качестве иллюстрации для вызова EnumDisplayMonitors()
попробуйте это:
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
}