API-интерфейсы и параметры реестра, связанные с DPI
Если необходимо выполнить настройку развертывания, в следующих разделах описываются разделы реестра и системные параметры, к которым могут потребоваться скрипты после установки.
В этой статье:
Собственное разрешение основного дисплея
Таблица 1 Windows 8.1 Уровни масштабирования, хотя и не является исчерпывающей, содержит сведения о Windows 8.1 уровне масштабирования для ряда распространенных дисплеев. Разрешение панели указывает физическую плотность пикселей панели, а уровень масштабирования — коэффициент масштабирования , который будет использоваться для этого отображения.
Таблица 1 Windows 8.1 уровни масштабирования
Размер дисплея | Разрешение дисплея | Горизонтальный (пиксели) | Вертикальная (пиксели) | Разрешение на дюйм панели | Уровень масштабирования |
---|---|---|---|---|---|
10.6" | FHD | 1920 | 1080 | 208 | 150% |
10.6" | HD | 1366 | 768 | 148 | 100 % |
11.6" | WUXGA | 1920 | 1200 | 195 | 150% |
11.6" | HD | 1366 | 768 | 135 | 100 % |
13.3" | WUXGA | 1920 | 1200 | 170 | 150% |
13.3" | QHD | 2560 | 1440 | 221 | 200 % |
13.3" | HD | 1366 | 768 | 118 | 100 % |
15.4" | FHD | 1920 | 1080 | 143 | 125% |
15.6" | QHD+ | 3200 | 1800 | 235 | 200 % |
17" | FHD | 1920 | 1080 | 130 | 125% |
23" | QFHD (4 КБ) | 3840 | 2160 | 192 | 200 % |
24" | QHD | 2560 | 1440 | 122 | 125% |
Чтобы программно найти эти сведения для любого устройства, можно написать служебную программу, которая возвращает данные. Собственное основное разрешение извлекается путем вызова функции API GetDeviceCaps() с использованием hdc для рабочего стола и индексов HORZRES и VERTRES:
// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalResolution = GetDeviceCaps(desktopDc,HORZRES);
verticalResolution = GetDeviceCaps(desktopDc,VERTRES);
Дополнительные сведения о функции GetDC см. в разделе Функция GetDC().
Коэффициент масштабирования основного отображения DPI
Аналогичным образом можно получить плотность пикселей с помощью индексов LOGPIXELSX и LOGPIXELSY:
// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);
verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);
Эти результаты возвращаются в системе координат, в которой 96 соответствует 100 %, как показано в таблице 2 DPI Коэффициенты масштабирования.
Коэффициенты масштабирования в таблице 2 DPI
DPI | Масштаб |
---|---|
96 | 100 |
120 | 125 |
144 | 150 |
192 | 200 |
Примечание
Этот API будет возвращать различные результаты в зависимости от режима осведомленности о DPI вашего приложения. Настройка режима осведомленности требует добавления XML в манифест приложения, как описано ниже.
Режим осведомленности о DPI | Параметр манифеста | Возвращаемое значение |
---|---|---|
Нет | Нет | 96 для всех дисплеев независимо от коэффициента масштабирования |
Системное разрешение с учетом DPI | <dpiAware>True</dpiAware> | DPI основного дисплея на момент запуска сеанса Windows (когда пользователь впервые вошел в Windows) |
Per-Monitor DPI | <dpiAware>True/PM</dpiAware> | DPI основного дисплея на момент запуска сеанса Windows (когда пользователь впервые вошел в Windows). Чтобы получить DPI дисплея, на котором находится приложение, используйте GetWindowDpi() или GetDpiForMonitor() |
Дополнительные сведения об этом параметре манифеста см. в разделе Функция SetProcessDPIAware.
Режим масштабирования
Пользовательский интерфейс панель управления\ Внешний вид и персонализация\Пользовательский интерфейс отображения включает флажок: Позвольте мне выбрать один уровень масштабирования для всех моих дисплеев, который определяет, применяет ли система один коэффициент масштабирования ко всем дисплеям (как в Windows 8 и более ранних версиях Windows) или различные коэффициенты масштабирования, которые учитывают плотность пикселей каждого дисплея ( Windows 8.1 по умолчанию). Этот флажок настраивает раздел реестра HKCU\панель управления\Desktop\Win8DpiScaling в Windows 8.1.
Таблица 3 HKCU\панель управления\Desktop\Win8DpiScaling Values
Значение ключа | Значение |
---|---|
0 | Различные коэффициенты масштабирования для каждого дисплея: Windows 8.1 по умолчанию. Содержимое, перемещаемое с одного дисплея на другой, будет иметь правильный размер, но его можно масштабировать с помощью растрового рисунка. |
1 | Один и тот же коэффициент масштабирования применяется ко всем дисплеям: Windows 8 и более ранних версий Windows. Содержимое, перемещаемое с одного дисплея на другой, может иметь неправильный размер. |
Переопределение масштабирования в режиме масштабирования Windows 8.1
Если флажок Разрешить выбрать один уровень масштабирования для всех моих дисплеев снят и система работает в режиме масштабирования Windows 8.1, пользователю предоставляется ползунок, который позволяет переопределить текущие коэффициенты масштабирования, от меньшего, среднего до большего. Этот параметр настраивается в разделе реестра HKCU\панель управления\Desktop\DesktopDPIOverride.
Таблица 4 HKCU\панель управления\Desktop\DesktopDPIOverride Values
Значение ключа | Значение |
---|---|
<0 | Уменьшите каждый коэффициент масштабирования отображения по умолчанию на это значение (например, если по умолчанию было масштабирование на 150 %, -1 соответствует 125 %, от –2 до 100 %). |
0 | Используйте значение по умолчанию для каждого дисплея. |
0> | Увеличьте каждый коэффициент отображения на это значение (в предыдущем примере +1 соответствует 200 % масштабированию). |
Все коэффициенты масштабирования отображения в этом режиме ограничены одним из следующих четырех значений: 100 %, 125 %, 150 %, 200 %. Кроме того, после применения масштабирования приложения должны иметь не менее 720 эффективных строк разрешения (т. е. физическое вертикальное разрешение дисплея, разделенное на коэффициент масштабирования); это может дополнительно ограничить диапазон допустимых коэффициентов масштабирования отображения. В таблице 5 Отображаемые значения показано, какие значения разрешены для дисплеев разного размера:
Отображаемые значения таблицы 5
Вертикальные линии | Поддерживаемые коэффициенты масштабирования |
---|---|
<900 | 100 % |
>= 900 и <1080 | 100%, 125% |
>=1080 и <1440 | 100%, 125%, 150% |
>=1440 | 100%, 125%, 150%, 200% |
Коэффициент масштабирования на уровне системы в режиме масштабирования Windows 8
Если установлен флажок Разрешить выбрать один уровень масштабирования для всех моих дисплеев , пользователь может указать коэффициент масштабирования, который применяется ко всем дисплеям независимо от плотности пикселей каждого дисплея. Используя настраиваемый параметр, пользователь может выбрать значения, отличные от 100%, 125%, 150%, 200%, хотя они ограничены диапазоном (100%-500%). Этот параметр настраивается в разделе реестра HKCU\панель управления\Desktop\LogPixels.
Таблица 6 HKCU\панель управления\Desktop\LogPixels Values
Значение ключа | Значение |
---|---|
96 | 100 % масштабирование на каждом дисплее |
120 | Масштабирование на 125 % на каждом дисплее |
144 | Масштабирование на 150 % на каждом дисплее |
192 | 200 % масштабирование на каждом дисплее |
<other> | <другое> масштабирование 96/100 на каждом дисплее |