Как я могу получить количество дисплеев в окнах? - PullRequest
6 голосов
/ 14 октября 2011

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

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

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

Ответы [ 2 ]

19 голосов
/ 14 октября 2011

Как вы обнаружили, 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
}
2 голосов
/ 14 октября 2011

Не проверено, но, по сути, вам нужно только предоставить обратный вызов для функции 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);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...