Как автоматически изменить масштаб экрана DPI при переключении на настройку нескольких мониторов?
У меня есть ноутбук с диагональю 14" 1920×1080 и экран с диагональю 24" 1920×1200. Разница в плотности пикселей огромна.
Когда я использую большой экран в качестве основного, а ноутбук - в качестве дополнительного, я бы хотел, чтобы меньший экран был настроен на масштабирование 150%, чтобы я мог использовать его с комфортом. Но когда я вдали от своего рабочего стола и внешний экран отключен, я бы хотел, чтобы ноутбук автоматически переключился на 100% масштабирование, чтобы максимизировать область рабочего стола.
Как я могу сделать так, чтобы Windows автоматически переключала масштабирование DPI при подключении или отключении внешних экранов?
Я могу использовать стороннее программное обеспечение, если это необходимо, но я бы предпочел использовать встроенные функции Windows.
Я использую Windows 10 Pro версии 1703.
3 ответа
Вы не можете изменить масштабирование DPI автоматически, потому что для этого требуется выйти и войти в систему.
Вот хорошая нить об использовании powershell для установки ключа реестра DPI и более быстрого переключения между двумя DPI. Вы все еще должны выйти, и скрипт автоматизирует это.
https://stackoverflow.com/questions/10365394/change-windows-font-size-dpi-in-powershell
Если вы хотите расширить это, вот информация о чтении информации монитора с Powershell: https://blogs.technet.microsoft.com/heyscriptingguy/2013/10/03/use-powershell-to-discover-multi-monitor-information/
А вот информация об изменении ключа реестра конкретного пользователя. Это понадобится, потому что если вы запустите свой скрипт, когда вы не вошли в систему, или во время запуска ваш куст реестра не будет загружен. https://www.pdq.com/blog/modifying-the-registry-of-another-user/
Объедините все это вместе с некоторой изобретательностью, и вы можете запланировать запуск этого сценария при выходе из системы и при запуске компьютера. Сложность в том, что вам всегда придется делать новый вход в систему, чтобы новые настройки вступили в силу, и для меня, это самый большой недостаток в этом.
Теперь лучшим решением может быть изменение фактического разрешения экрана, которое можно выполнить без выхода из системы: https://blogs.technet.microsoft.com/heyscriptingguy/2010/07/07/hey-scripting-guy-how-can-i-change-my-desktop-monitor-resolution-via-windows-powershell/
Многие программы не работают должным образом с нестандартным DPI, и поэтому, если вы спросите меня, изменение разрешения экрана является лучшим решением.
Так что у вас есть это. Все ресурсы для создания вашего нового скрипта для автоматизации этого. Теперь вы можете посмотреть, можете ли вы найти кого-нибудь на http://stackoverflow.com/ чтобы помочь вам с этим.:)
dpiSwitcher
... это небольшой .exe-файл, который вы можете загрузить/установить и забыть, но который автоматически исправит масштабирование dpi ваших внутренних мониторов так, как вам нравится, когда бы вы ни находились без внешнего монитора или вернулись к нему.
Я написал dpiSwitcher на основе работы Имнико и, что более важно, работы Сахила Сингха (см. также этот ответ ).
Вот как это сделать.
Создатьmyswitch.bat
текстовый файл типа этого:
@echo off
:: Check if an external monitor is connected
wmic path Win32_DesktopMonitor get Availability | findstr /C:"2"
if %errorlevel%==0 (
:: External monitor is connected, set scaling to 150%
control.exe /name Microsoft.Display /page pageDPI
control.exe /name Microsoft.Display /page pageAdvancedSettings /cmd ChangeDPI 150
) else (
:: External monitor is not connected, set scaling to 100%
control.exe /name Microsoft.Display /page pageDPI
control.exe /name Microsoft.Display /page pageAdvancedSettings /cmd ChangeDPI 100
)
Открой
task scheduler
.Добавьте задачу:
General tab: Name: "DPI Switch" User Account: select "Administrator" Triggers tab: New: Begin the task: "On an event" Log: "System" Source: "Display" Event ID: "10" (for display connect) or "11" (for display disconnect) New: Begin the task: "On an event" Log: "System" Source: "Display" Event ID: "11" (for display disconnect) or "10" (for display connect) Actions tab: New: Action: "Start a program" Program/script: enter the path to the "myswitch.bat" file, e.g. C:\Users\<username>\Documents\myswitch.bat
Нажмите ОК и вуаля.