Обнаружение первичного разрешения дисплея при настройке нескольких мониторов [дубликат]

Вы можете получить один элемент, запустив

document.querySelector('.myElement').style.size = '100px';

, но он будет работать для первого элемента с классом .myElement.

Если вы хотите применить это для всех элементы с классом я предлагаю вам использовать

document.querySelectorAll('.myElement').forEach(function(element) {
    element.style.size = '100px';
});
33
задан Prof. Falken 22 May 2012 в 09:13
поделиться

7 ответов

  • Размер основного монитора: GetSystemMetrics SM_CXSCREEN / SM_CYSCREEN (также можно использовать GetDeviceCaps)
  • Размер всех мониторов (в сочетании): GetSystemMetrics SM_CX / YVIRTUALSCREEN
  • Размер рабочей области (экран, исключая панель задач и другие стыковочные столбцы) на основном мониторе: SystemParametersInfo SPI_GETWORKAREA
  • Размер конкретного монитора (рабочая область и экран "): GetMonitorInfo

Редактирование: важно помнить, что монитор не всегда« начинает »при 0x0, поэтому просто знать, что этого размера недостаточно для позиции ваше окно. Вы можете использовать MonitorFromWindow, чтобы найти монитор, в котором находится ваше окно, а затем вызвать GetMonitorInfo

. Если вы хотите перейти на низкоуровневый маршрут или изменить разрешение, вам нужно использовать EnumDisplayDevices, EnumDisplaySettings и ChangeDisplaySettings (это только способ получить частоту обновления AFAIK, но GetDeviceCaps скажет вам глубину цвета)

58
ответ дан Prof. Falken 22 August 2018 в 17:43
поделиться
  • 1
    Я только что протестировал, и GetDeviceCaps действительно работает в настройке multimon, и как VERT / HORZRES, так и VREFRESH действительно работают, но я мог только получить CreateDC, чтобы принять \\. \ DISPLAY2 & quot; и не "\\. \ DISPLAY2 \ Monitor0 & quot; поэтому я не уверен, что делать, если один адаптер имеет более одного монитора, поэтому придерживайтесь EnumDisplaySettings, если у вас есть список мониторов из EnumDisplayDevices ... – Anders 8 January 2011 в 01:47
  • 2
    Я не уверен, что все это применимо при использовании OpenGL в полноэкранном режиме? Такие вещи, как «начало», при 0x0, это все еще применяется? – Prof. Falken 9 January 2011 в 10:30
  • 3
    Наверное, нет, я говорил о окнах, можно было бы надеяться, что OpenGL абстрагирует это, и вы можете просто сказать, какой монитор использовать, и он позаботится об остальном – Anders 10 January 2011 в 08:25
  • 4
    ошибка C2065: «SM_CX»: необъявленный идентификатор – john ktejik 5 January 2013 в 22:25
  • 5
    @CoryTrese: Чтобы расположить окно, вы должны использовать GetMonitorInfo. Вы также можете попробовать EnumDisplaySettings с ENUM_CURRENT_SETTINGS, если вы ищете информацию низкого уровня ... – Anders 18 August 2014 в 18:24

Когда система использует виртуализацию DPI (Vista и выше) с помощью GetSystemMetrics или GetWindowRect, не сможет получить реальное разрешение экрана (вы получите виртуальное разрешение), если вы не создали DPI Aware Application .

Таким образом, лучший вариант здесь (простой и обратный совместимый) заключается в использовании EnumDisplaySettings с ENUM_CURRENT_SETTINGS.

4
ответ дан fingeros 22 August 2018 в 17:43
поделиться

Удалено около недели назад, а затем отредактировано 3-4-13.

Вот хороший пример для ситуаций, когда пользователь решил запустить свой рабочий стол в более низком разрешении (плохая идея) или в угловых случаях где человек решил получить монитор, чтобы их графический контроллер не мог в полной мере воспользоваться преимуществами:

// get actual size of desktop
RECT actualDesktop;
GetWindowRect(GetDesktopWindow(), &actualDesktop);
2
ответ дан formerBGIuser 22 August 2018 в 17:43
поделиться
  • 1
    GetWindowRect(GetDesktopWindow) совершенно неверно. Он намеренно вернет только прямоугольник основного монитора. «Прямоугольник окна рабочего стола, возвращаемое GetWindowRect или GetClientRect, всегда равно прямоугольнику основного монитора для совместимости с существующими приложениями. & quot; – Ian Boyd 3 April 2017 в 19:29

Я думаю, что SystemParametersInfo может быть полезна.

Edit: Посмотрите также на GetMonitorInfo .

3
ответ дан Mehrdad 22 August 2018 в 17:43
поделиться
  • 1
    SystemParametersInfo полезна, когда требуется только «рабочая область». = portion of the screen not obscured by the system taskbar or by application desktop toolbars :) – jave.web 21 November 2014 в 18:04

Я использую функцию GetSystemMetrics

GetSystemMetrics (SM_CXSCREEN) возвращает ширину экрана (в пикселях)

GetSystemMetrics (SM_CYSCREEN) - высота в пикселях

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx

0
ответ дан Petr 22 August 2018 в 17:43
поделиться

Это GetSystemMetrics с этими параметрами: SM_CXSCREEN & lt; ширина SM_CYSCREEN & lt; height

Как сказано (SM_CXSCREEN):

Ширина экрана основного монитора в пикселях. Это то же значение, полученное при вызове GetDeviceCaps следующим образом: GetDeviceCaps (hdcPrimaryMonitor, HORZRES).

5
ответ дан Poni 22 August 2018 в 17:43
поделиться
  • 1
    Обратите внимание, что GetSystemMetrics существует только для обратной совместимости с поддержкой до Windows 98 (и с несколькими мониторами). Вы должны использовать SM_CXVIRTUALSCREEN / SM_CYVIRTUALSCREEN, чтобы получить экран целых пользователей. – Ian Boyd 7 March 2018 в 20:19

Пример MFC Поддержка нескольких мониторов с помощью GetSystemMetrics EnumDisplayMonitors и GetMonitorInfo

Следуйте по этой ссылке: Перечисление монитора с исходным кодом

3
ответ дан Ulterior 22 August 2018 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: