Как узнать количество дисплеев в windows?
Я хочу подсчитать количество активных дисплеев. Для Mac я могу использовать следующее:
CGDisplayCount nDisplays;
CGGetActiveDisplayList(0,0, &nDisplays);
log.printf("Displays connected: %d",(int)nDisplays);
Как я могу добиться того же в Windows? Я нашелEnumDisplayMonitors , но не могу понять, как его использовать.
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