Как настроить консоль управления Microsoft с высоким разрешением в Windows 8.1?

16

Поскольку Windows 8.1 не поддерживает общесистемную поддержку «высокого стиля DPI» в Windows XP, как я могу обеспечить поддержку приложениям консоли управления (mmc.exe) с высоким разрешением? Для него нет пункта контекстного меню «Устранение неполадок совместимости».

user20939
источник

Ответы:

20

Вкладка «Совместимость» скрыта для системных файлов, поэтому для репликации функциональности флажка «Отключить масштабирование экрана при высоких настройках 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.

Род Боев
источник
Отличные сценарии !! Именно то, на что я надеялся.
user20939
3
К сожалению, это не помогает в Windows 10. Этот метод работает для других приложений, но не для mmc.exe.
2015 г.
Работает для меня. .Reg файл требует перезагрузки в Windows 10.
Joshudson
Не работает с windows 10. Перезагрузка не помогает. Также с этим исправлением работают другие приложения, такие как ext2fsd manager. Событие mmc.exe не имеет вкладки совместимости в свойствах
baldrs
@baldrs Это, кажется, работает для меня. Стоит отметить, что Windows 10 делает некоторые странные вещи с масштабированием дисплея, если вы не используете мониторы с одинаковым разрешением в мультиэкранной среде. Убедитесь, что для ВСЕХ дисплеев установлено собственное разрешение, затем установите масштаб «Рекомендуется» или 200%. Кажется, что Windows 10 не будет внутренне масштабироваться по-разному, в зависимости от того, на каком экране находится окно, поэтому лучше всего выбирает основной монитор. Этот монитор, кажется, диктует все другие масштабирования. У меня 4к монитор ноутбука, 4к внешний и FullHD третий. Третий монитор был нечетким до этого
Эндрю Т Финнелл
2

В Windows 10 вы можете добиться того же эффекта, выполнив:

1: В зависимости от того, какая у вас сборка (чтобы найти ее, нажмите Windows + R, введите «winver», нажмите Enter) либо:

  • до сборки 15019: откройте Панель управления, Дисплей, Изменить размер элементов, установите уровень масштабирования
  • сборка 15019 или новее: откройте Настройки, Система, Дисплей, Пользовательское масштабирование

Введите уровень масштабирования вручную, даже если он доступен в раскрывающемся списке. Вы узнаете, что сделали это правильно, если вам предложат выйти, чтобы настройки вступили в силу.

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 (Сервисы, Диспетчер устройств и т. Д.), И теперь они будут больше и острее

Род Боев
источник