Как настроить консоль управления Microsoft с высоким разрешением в Windows 8.1?
Поскольку Windows 8.1 не поддерживает общесистемную поддержку "высокого стиля DPI в Windows XP", как я могу обеспечить поддержку приложениям консоли управления Microsoft (mmc.exe) с высоким разрешением? Для него нет пункта контекстного меню "Устранение неполадок совместимости".
2 ответа
Вкладка "Совместимость" скрыта для системных файлов, поэтому для репликации функциональности флажка "Отключить масштабирование экрана при высоких настройках 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) либо:
- до сборки 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 (Сервисы, Диспетчер устройств и т. Д.), И теперь они будут больше и четче