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

14

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

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

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

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

FThompson
источник
Вы пытались внести изменения в реестр, убить процесс проводника, а затем запустить его снова. Потому что это все, что делает метод 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 .

harrymc
источник
Эти ресурсы выглядят более ориентированными на изменение разрешения экрана, чем на DPI. Я посмотрел на ссылки, которые вы предоставили, но я вижу только варианты для установки ширины и высоты, и не упоминаю DPI. Я неправильно понимаю ваш ответ?
Фомпсон
Изменение разрешения изменит DPI и наоборот. Вы можете узнать разрешение экрана при других настройках DPI, а затем изменить это разрешение с помощью приведенного выше сценария.
harrymc
1
Хотя изменение разрешения приводит к изменению DPI, это не совсем то же самое, что масштабирование DPI, предлагаемое в Win8 (может быть, оно отличается от других операционных систем?) Примером этого является то, что независимо от того, на что установлено масштабирование DPI, рабочий стол и его значки всегда одинаковы по размеру и внешнему виду, тогда как при изменении разрешения рабочий стол и его значки соответственно меняются в размере.
Фомпсон
Это происходит из-за новой технологии с поддержкой DPI, представленной в Windows 8.1. Я не смог найти никакой информации о его API - в настоящее время доступны только настройки реестра, а это не то, что вы ищете.
harrymc
Explorer поддерживает DPI, поэтому значки на рабочем столе сохраняют свой размер, но очень мало других программ. Для большинства продуктов изменение разрешения так же хорошо, как и изменение DPI.
harrymc