Масштабирование DPI в Windows 8.1 через командную строку


14

Я хотел бы создать сочетание клавиш для быстрого и простого изменения масштаба DPI на моем компьютере путем создания небольшого макроса для запуска при обнаружении сочетания клавиш.

В Windows 8.1 масштаб DPI дисплея рабочего стола можно настроить с помощью панели управления (см. Рисунок ниже), вступая в силу немедленно. В качестве альтернативы масштаб может быть установлен вручную в реестре, но для этого необходимо, чтобы пользователь вошел в систему, а затем перезагрузил компьютер, чтобы получить эффект (и работает только для имитации параметра «один уровень масштабирования для всех моих дисплеев») ,

Как я могу установить масштаб DPI через командную строку или иным образом программно?

http://puu.sh/93YLV.jpg


Вы пытались внести изменения в реестр, убить процесс проводника, а затем запустить его снова. Потому что это все, что делает метод GUI в теории.
— Ramhound

@ Ramhound Не повезло. Графический интерфейс определенно делает что-то, чтобы обновить рабочий стол, чтобы применить настройки, но я не уверен, что и не смог найти что-нибудь об этом.
— Фомпсон

Вы уверены, что изменения вступают в силу немедленно? У меня появляется диалоговое окно с надписью «Вы должны выйти из своего компьютера, чтобы применить эти изменения»
— Vinayak

@Vinayak, изменения вступают в силу немедленно, когда применяются в вышеприведенном диалоге. Я помню, что читал, что непосредственное приложение является новым для Windows 8.1 по сравнению со стандартной Windows 8, поэтому, если вам интересно, исследуете эту разницу между вашей машиной и моей, это может быть началом.
— FThompson

@Vulcan На самом деле я использую Windows 8.1. Однако я пытался внести изменения после того, Let me choose one scaling level...как установил флажок, поскольку ползунок над ним на моем блокноте выделен серым цветом.
— Винаяк

Ответы:


9

Правильный ключ реестра для независимого от монитора масштабирования - HKCU:\Control Panel\Desktopсо значением LogPixels. Дополнительную информацию обо всех параметрах реестра, связанных с DPI, можно найти здесь: http://technet.microsoft.com/en-us/library/dn528846.aspx#system. Также есть информация для случая, когда вы включили различное масштабирование для каждого дисплея ,

Я написал крошечный скрипт PowerShell, который изменяет масштаб DPI для всех дисплеев в зависимости от текущего масштабирования и выполняет выход пользователя из системы, поэтому мне просто нужно выполнить скрипт, когда я подключаю свое устройство к другому монитору.

cd 'HKCU:\Control Panel\Desktop'
$val = Get-ItemProperty -Path . -Name "LogPixels"
if($val.LogPixels -ne 96)
{
    Write-Host 'Change to 100% / 96 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 96
} else {
    Write-Host 'Change to 150% / 144 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 144
}

logoff;exit

Я думаю, что вы можете изменить его для своих нужд, используя информацию из статьи TechNet.


3
Мои извинения за то, что я не ответил раньше; отличное решение! К сожалению, однако, использование этого LogPixelsзначения применимо только в том случае, если установлен флажок «Позвольте мне выбрать один уровень масштабирования для всех моих дисплеев», что я наблюдал, когда сам связывался со значениями реестра, но это также подтверждается связанной статьей Technet. Кроме того, ваше решение требует от пользователя выхода из системы; DPI не обновляются без выхода пользователя и повторного входа. Между этими двумя недостатками, ваше решение не совсем работает для меня, но все равно +1 для отличного ответа.
— Фомпсон

Не работает на Windows 10 :(
— kokbira

3
@kokbira Для этого , чтобы работать в Windows 10 необходимо установить ключ реестра HKCU:\Control Panel\Desktop\Win8DpiScalingдля 1. В противном случае он будет использовать масштабный коэффициент по умолчанию и игнорирует значение в LogPixels.
— FlyingFoX

1
Если DPI Шкала отличается для каждого монитора, а HKCU:\Control Panel\Desktopвнешний видHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
— Шаян

1
А также здесьHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\ScaleFactors
— Шаян

2

Существует сценарий PowerShell для изменения разрешения экрана, что может помочь. Я понятия не имею, произойдет ли немедленное изменение в Windows 8.1, но, если повезет, этот сценарий может использовать тот же API, что и апплет панели управления.

Полный Set-ScreenResolution.ps1сценарий доступен в хранилище сценариев , но он слишком длинный, чтобы воспроизвести его здесь.

Его описание автором можно найти в статье:
Hey, Scripting Guy! Как изменить разрешение монитора рабочего стола через Windows PowerShell? ,

Некоторую информацию по его использованию можно найти в статье:
Изменение разрешения экрана с помощью Powershell .


Эти ресурсы выглядят более ориентированными на изменение разрешения экрана, чем на DPI. Я посмотрел на ссылки, которые вы предоставили, но я вижу только варианты для установки ширины и высоты, и не упоминаю DPI. Я неправильно понимаю ваш ответ?
— Фомпсон

Изменение разрешения изменит DPI и наоборот. Вы можете узнать разрешение экрана при других настройках DPI, а затем изменить это разрешение с помощью приведенного выше сценария.
— harrymc

1
Хотя изменение разрешения приводит к изменению DPI, это не совсем то же самое, что масштабирование DPI, предлагаемое в Win8 (может быть, оно отличается от других операционных систем?) Примером этого является то, что независимо от того, на что установлено масштабирование DPI, рабочий стол и его значки всегда одинаковы по размеру и внешнему виду, тогда как при изменении разрешения рабочий стол и его значки соответственно меняются в размере.
— Фомпсон

Это происходит из-за новой технологии с поддержкой DPI, представленной в Windows 8.1. Я не смог найти никакой информации о его API - в настоящее время доступны только настройки реестра, а это не то, что вы ищете.
— harrymc

Explorer поддерживает DPI, поэтому значки на рабочем столе сохраняют свой размер, но очень мало других программ. Для большинства продуктов изменение разрешения так же хорошо, как и изменение DPI.
— harrymc
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.