Ответы:
Вкладка «Совместимость» скрыта для системных файлов, поэтому для репликации функциональности флажка «Отключить масштабирование экрана при высоких настройках DPI» в реестр необходимо добавить следующее:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
Это дает дополнительное преимущество, заключающееся в том, что все оснастки MMC, такие как редактор групповой политики, также используют собственное масштабирование вместо размытой растровой версии.
Вы можете сохранить его как файл .reg и импортировать его, или использовать вставить следующую команду в диалоговое окно «Выполнить»:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
Если вы часто используете этот обходной путь, вы можете добавить его в контекстное меню правой кнопкой мыши для файлов .exe. Вы также можете добавить его в MSI-файлы, так как для этих файлов также отсутствует вкладка «Совместимость»:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi\command]
@="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
"IsolatedCommand"="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
[-HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi\command]
@="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
"IsolatedCommand"="cmd /c @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\">nul"
Поскольку параметры «Запуск от имени администратора» и «Отключить масштабирование DPI» хранятся вместе, вызов этой команды для файла, уже настроенного для запуска в качестве администратора, очистит этот флаг и вместо этого установит флаг масштабирования DPI. Это влияет только на файлы, для которых вы установили флажок вручную, а не на файлы с правильным запрашиваемым уровнем выполнения в их манифесте.
Просто для справки, когда оба проверены, строка "~ RUNASADMIN HIGHDPIAWARE", но я бы не стал помещать это в параметр контекстного меню, так как он уже доступен для одноразового использования в контекстном меню, и не стоит делать токен администратора нужен так легко.
Если вы хотите отключить масштабирование DPI для исполняемых и установочных файлов в определенной папке, вы можете использовать следующий .reg импорт:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Disable DP&I Scaling"
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi\command]
@="cmd /c @start /min cmd /c for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="cmd /c @start /min cmd /c for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
Использование этой опции в папке корневого уровня, такой как Program Files, является плохой идеей, потому что вы создадите сотни записей реестра. Но в некоторых случаях это важно, особенно для Process Explorer и остальных утилит Sysinternals или утилит Nirsoft, которые прекрасно работают с отключенным масштабированием DPI, но не имеют опции, явно указанной в их манифестах.
Последняя партия кода использует внутреннюю команду запуска, чтобы как можно быстрее убрать окно командной строки и минимизировать его при разборе содержимого папки. Символ @ используется для предотвращения повторного отображения команды в выводе, а нулевое перенаправление используется для скрытия вывода «Операция успешно завершена». для каждой записи, так как она никогда не меняется.
Если у вас есть отличный инструмент nircmd, вы можете полностью скрыть краткую вспышку в окне командной строки:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\exefile\shell\disabledpi\command]
@="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
[-HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\Msi.Package\shell\disabledpi\command]
@="nircmd.exe execmd reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%1\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Disable DP&I scaling"
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi\command]
@="nircmd.exe execmd for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
"IsolatedCommand"="nircmd.exe execmd for /f \"usebackq delims=\" %%i in (`dir /b /s \"%1\\*.exe\" \"%1\\*.msi\"`) do @reg add \"HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers\" /v \"%%i\" /f /t REG_SZ /d \"~ HIGHDPIAWARE\""
Если файл nircmd.exe отсутствует в вашем пути, вы можете добавить его местоположение выше или добавить свою папку в свой путь в диалоговом окне «Переменные среды системы». Чтобы открыть это окно, вы можете использовать командуrundll32 sysdm.cpl,EditEnvironmentVariables
Можно привести аргумент, что было бы более элегантно добавить ключи реестра, создав файл .reg во время выполнения и импортировав его без вывода сообщений с параметром недокументированного reg import /s
. Но по моему опыту, написание любых файлов во время выполнения поднимает всевозможные тревоги с такими продуктами безопасности, как COMODO Internet Securita, его эквивалентными версиями от Panda, Norton и т. Д. И всем, что основано на модели HIPS. Я не вижу необходимости делать это, когда вышеописанное работает просто отлично, особенно если вы используете это на нескольких компьютерах или делитесь им и не хотите создавать ложную тревогу для кого-то другого.
Однако, если вы уже используете nircmd, имеет смысл использовать его regsetval
команду вместо reg add
расширений .exe и .msi. Опция folder все равно должна будет перебирать список каталогов, чтобы добавить каждую запись, чтобы она не работала для них. PowerShell и VBScript являются опциями, но их доступность зависит от версии Windows и множества других переменных. С точки зрения безопасности VBScript имеет репутацию вектора эксплойтов, особенно при загрузке из Интернета или при совместном использовании в сети, и сценарии PS1 вообще не будут работать без явной настройки политики выполнения PowerShell для разрешения удаленных подписанных сценариев.
Дайте мне знать, если вы заметили что-то странное при использовании этого кода, так как он все еще находится в стадии разработки. Тем не менее, это должно значительно упростить настройку параметров DPI в Windows 8.1.
В Windows 10 вы можете добиться того же эффекта, выполнив:
1: В зависимости от того, какая у вас сборка (чтобы найти ее, нажмите Windows + R, введите «winver», нажмите Enter) либо:
Введите уровень масштабирования вручную, даже если он доступен в раскрывающемся списке. Вы узнаете, что сделали это правильно, если вам предложат выйти, чтобы настройки вступили в силу.
2. Сохраните следующее в файле .reg на рабочем столе и дважды щелкните его, чтобы добавить содержимое в реестр:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001
3: сохранить следующий файл как c:\windows\system32\mmc.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
<assemblyIdentity
processorArchitecture="x86"
version="5.1.0.0"
name="Microsoft.Windows.MMC"
type="win32"
/>
<description>Microsoft Management Console</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="highestAvailable"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
4: Откройте любые окна MMC (Сервисы, Диспетчер устройств и т. Д.), И теперь они будут больше и острее