Масштабування DPI у Windows 8.1 за допомогою командного рядка


14

Я хотів би створити ярлик на клавіатурі, щоб швидко і легко змінити масштаб DPI на моїй машині, створивши невеликий макрос, який запускається після виявлення ярлика клавіатури.

У Windows 8.1 масштаб DPI-дисплея настільного дисплея можна встановити за допомогою панелі управління (на фотографії нижче), набираючи чинності негайно. Крім того, масштаб можна встановити в реєстрі вручну, але для цього потрібно, щоб користувач увійшов, вийшов або перезавантажив машину, щоб вступити в дію (і працює лише для імітації параметра "один рівень масштабування для всіх моїх показів") .

Як я можу встановити шкалу DPI за допомогою командного рядка чи іншим чином програмно?

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


Ви спробували внести зміни в реєстр, вбивши процес провідника, а потім запустити його знову. Тому що це весь метод GUI в теорії.
Рамхаунд

@Ramhound Не пощастило. Інтерфейс GUI, безумовно, робить щось для оновлення робочого столу для того, щоб застосувати налаштування, але я не впевнений, що і не зміг нічого про нього знайти.
Ф.Томпсон

Ви впевнені, що зміни відбудуться негайно? У мене з'являється діалогове вікно "Ви повинні вийти зі свого комп’ютера, щоб застосувати ці зміни"
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 все одно для чудової відповіді.
FThompson

Він не працює в 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сценарій доступний у сховищі сценаріїв , але тут занадто довгий для відтворення.

Його опис автора можна знайти у статті:
Гей, сценарій хлопець! Як я можу змінити роздільну здатність монітора на робочому столі через Windows PowerShell? .

Деякі відомості про його використання можна знайти у статті:
Зміна роздільної здатності екрана за допомогою Powershell .


Ці ресурси виглядають більш орієнтованими на зміну роздільної здатності екрану, а не на DPI. Я переглянув надані вами посилання, але бачу лише параметри встановлення ширини та висоти, а про DPI немає. Я нерозумію вашу відповідь?
FThompson,

Зміна роздільної здатності призведе до зміни DPI та віце-версосу. Ви можете дізнатися роздільну здатність екрана в різних налаштуваннях DPI, а потім змінити на ці роздільної здатності за допомогою вищевказаного сценарію.
harrymc

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

Це пояснюється новою технологією, орієнтованою на DPI, представленою в Windows 8.1. Я не зміг знайти будь-яку інформацію про його API - наразі доступні лише налаштування реєстру, що не є те, що ви шукаєте.
harrymc

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