Вопрос или проблема
Так как Windows 8.1 не поддерживает систему на уровне “стиль Windows XP” для высоких DPI, как я могу сделать приложения Microsoft Management Console (mmc.exe) учитывающими высокое DPI? Для этого нет пункта “Устранение проблем с совместимостью” в контекстном меню.
Вкладка “Совместимость” скрыта для системных файлов, поэтому для воспроизведения функциональности флажка “Отключить масштабирование отображения на настройках высокого 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]
@="Отключить масштабирование DPI"
[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]
@="Отключить масштабирование DPI"
[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. Это касается только тех файлов, для которых вы вручную установили флажок, а не тех, у которых в манифесте указано правильное requestedExecutionLevel.
Для справки, когда оба параметра выбраны, строка выглядит как “~ RUNASADMIN HIGHDPIAWARE”, но я не рекомендую добавлять это в вариант контекстного меню, так как оно уже доступно для одноразового использования на контекстном меню и не является хорошей идеей сделать необходимым токен администратора так легко.
Если вы хотите получить возможность отключать масштабирование DPI для выполняемых и установочных файлов в определенной папке (это то, что вам понадобится для папки Windows, так как ОС не позволяет использовать расширения контекстного меню непосредственно с системными исполняемыми файлами), вы можете использовать следующий импорт .reg:
Windows Registry Editor Version 5.00
[-HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
[HKEY_CLASSES_ROOT\Directory\shell\disabledpi]
@="Отключить масштабирование DPI"
[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, создаст сотни записей в реестре, но в этом нет ничего принципиально проблемного. Вы можете смело использовать её как для основной папки, так и для основной папки Windows.
Последняя партия кода использует внутреннюю команду start, чтобы максимально быстро убрать окно командной строки и держать его свернутым, пока оно обрабатывает содержимое папки. Символ @ используется для предотвращения вывода команды на экран, а перенаправление в nul используется для скрытия вывода “Операция успешно завершена” для каждой записи, так как он никогда не изменяется.
(Можно утверждать, что было бы более элегантно добавлять ключи реестра, создавая .reg файл во время выполнения и импортируя его в тихом режиме с помощью не документированной опции reg import /s
. Но в моем опыте запись любых файлов во время выполнения вызывает всевозможные тревоги в сторонних продуктах безопасности и фаерволах. Я не вижу необходимости делать это, когда описанное выше работает нормально, особенно если вы используете это на нескольких компьютерах или делитесь им и не хотите создавать ложные тревоги для кого-то другого.)
Я тщательно протестировал это в Windows 8.1, 10 и 11 без проблем, и это продолжает работать. Я удивлен, что Microsoft оставляет свои системные инструменты такими ужасными по умолчанию.
На 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 (Службы, Диспетчер устройств и т.д.), и они станут больше и четче
.
Ответ или решение
Конечно, настройка приложений Microsoft Management Console (MMC) для работы с высоким DPI в Windows 8.1 требует использования нескольких технических решений, поскольку система не поддерживает эти параметры по умолчанию. Если вы хотите сделать приложения MMC (mmc.exe) чувствительными к высокому разрешению, следуйте этим шагам:
Проблема
Windows 8.1 не предоставляет встроенной поддержки старого стиля DPI, применяемого в Windows XP, и нет возможности настройки совместимости через контекстное меню для системных файлов.
РЕШЕНИЕ
-
Использование реестра для настройки DPI:
Чтобы включить поддержку DPI для mmc.exe, необходимо изменить параметры реестра. Создайте файл с расширением.reg
, содержащий следующие строки:Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] "C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
Сохраните этот файл и выполните его, чтобы добавить изменения в реестр. Это обеспечит работу всех MMC-снапинов, таких как Редактор групповой политики, с native-масштабированием, устраняя размытость.
-
Командная строка:
Вы также можете использовать командуreg add
, чтобы внести изменения:reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
Введите эту команду в диалоговом окне "Выполнить".
-
Добавление функции в контекстное меню:
Чтобы упростить процесс в будущем, можно добавить опцию для отключения масштабирования DPI в контекстное меню для файлов .exe и .msi. Создайте и выполните.reg
файл: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" [-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"
Это обеспечит легкий доступ к изменению параметров высокого DPI для других файлов, скрытых от обычного интерфейса.
-
Решение для Windows 10:
Если используется Windows 10, вы можете вручную установить уровень масштабирования через Настройки, а затем изменить реестр. Более того, создать.manifest
файл для mmc.exe, который активирует поддержку DPI.
Заключение
Внедрение этих изменений позволит существенно улучшить визуальное качество и четкость интерфейса MMC и связанных инструментов в Windows 8.1. Эти настройки подходят не только для персонального использования, но и для развертывания в корпоративной среде, улучшая общую производительность и внешний вид приложений.
Важно помнить, что все изменения следует выполнять аккуратно и внимательно, так как работа с системным реестром требует точности и осмотрительности. Вышеупомянутые шаги подробно протестированы и должны работать без каких-либо осложнений на системах Windows 8.1 и выше.