Метрики системы мониторинга нескольких мониторов

Функция GetSystemMetrics возвращает значения для основного монитора, за исключением SM_CXMAXTRACK и SM_CYMAXTRACK, которые относятся ко всему рабочему столу. Следующие метрики одинаковы для всех драйверов устройств: SM_CXCURSOR, SM_CYCURSOR, SM_CXICON, SMCYICON. Следующие возможности отображения одинаковы для всех мониторов: LOGPIXELSX, LOGPIXELSY, DESTOPHORZRES, DESKTOPVERTRES.

GetSystemMetrics также содержит константы, которые ссылаются только на систему с несколькими мониторами. SM_XVIRTUALSCREEN и SM_YVIRTUALSCREEN определить левый верхний угол виртуального экрана, SM_CXVIRTUALSCREEN и SM_CYVIRTUALSCREEN — это вертикальные и горизонтальные размеры виртуального экрана, SM_CMONITORS — количество мониторов, подключенных к рабочему столу, а SM_SAMEDISPLAYFORMAT указывает, имеют ли все мониторы на рабочем столе одинаковый цветовой формат.

Чтобы получить сведения об одном мониторе или обо всех мониторах на рабочем столе, используйте EnumDisplayMonitors. Прямоугольник окна рабочего стола, возвращаемый GetWindowRect или GetClientRect , всегда равен прямоугольнику основного монитора для совместимости с существующими приложениями. Таким образом, результат

GetWindowRect(GetDesktopWindow(), &rc);

будет иметь значение:

rc.left = 0; 
rc.top = 0; 
rc.right = GetSystemMetrics (SM_CXSCREEN); 
rc.bottom = GetSystemMetrics (SM_CYSCREEN);

Чтобы изменить рабочую область монитора, вызовите SystemParametersInfo с SPI_SETWORKAREA и pvParam , указывая на структуру RECT , которая находится на нужном мониторе. Если pvParam имеет значение NULL, изменяется рабочая область основного монитора. При использовании SPI_GETWORKAREA всегда возвращается рабочая область основного монитора. Чтобы получить рабочую область монитора, отличного от основного, вызовите Метод GetMonitorInfo.