Масштабування 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.