Как узнать количество дисплеев в windows?



Я хочу подсчитать количество активных дисплеев. Для Mac я могу использовать следующее:



CGDisplayCount nDisplays;
CGGetActiveDisplayList(0,0, &nDisplays);
log.printf("Displays connected: %d",(int)nDisplays);


Как я могу добиться того же в Windows? Я нашелEnumDisplayMonitors , но не могу понять, как его использовать.

720   2  

2 ответов:

Как вы обнаружили, EnumDisplayMonitors() будет делать свою работу, но это немного сложно, чтобы позвонить. В документации говорится:

Функция EnumDisplayMonitors перечисляет мониторы отображения (включая невидимые псевдомониторы, связанные с драйверами зеркального отображения), которые пересекают область, образованную пересечением указанного прямоугольника отсечения и видимой области контекста устройства. EnumDisplayMonitors вызывает определяемую приложением функцию обратного вызова MonitorEnumProc один раз для каждого перечисленного монитора. Обратите внимание, что GetSystemMetrics (SM_CMONITORS) учитывает только мониторы дисплея.
Это приводит нас к более легкому решению.: GetSystemMetrics(SM_CMONITORS). Действительно, это может быть даже лучше, чем EnumDisplayMonitors(), Если у вас есть psuedo-мониторы.

В качестве иллюстрации вызова 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
}

Не тестируется, но по существу вам нужно только предоставить обратный вызов для функции enum:

int numMonitors = 0;

BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
  {
  //lprcMonitor holds the rectangle that describes the monitor position and resolution)

  numMonitors++;
  return true;
  }

int main()
  {
  EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, NULL);
  }

Comments

    Ничего не найдено.