Как автоматически изменить масштаб экрана 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
    

Нажмите ОК и вуаля.

Другие вопросы по тегам