Як я можу зробити консоль управління Microsoft високим DPI в Windows 8.1?


16

Оскільки Windows 8.1 не дозволяє підтримувати високу підтримку DPI у загальносистемній підтримці «Стиль Windows XP», то як я можу зробити так, щоб додатки Microsoft Management Console (mmc.exe) були відомі? Для цього немає пункту контекстного меню "Виправлення неполадок".

Відповіді:


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. Це стосується лише файлів, для яких ви вручну встановили прапорець, а не файлів із правильним запитомExecutionLevel у своєму маніфесті.

Для довідки, коли обидва відмічені, рядок "~ 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 - погана ідея, оскільки ви створите сотні записів реєстру. Але в деяких випадках це важливо, особливо для Провідника процесорів та інших утиліт 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. Опція папки все одно потребуватиме повторення над переліком каталогу, щоб додати кожен запис, щоб він не працював. PowerShell та VBScript - це варіанти, але їх доступність залежить від версії Windows та безлічі інших змінних. З точки зору безпеки, VBScript має репутацію вектора експлуатації, особливо при завантаженні з Інтернету або спільному використанні в мережі, і сценарії PS1 взагалі не працюватимуть без явного встановлення політики виконання PowerShell, щоб дозволяти віддалені підписані сценарії.

Повідомте мене, якщо ви помітили щось дивне під час використання цього коду, оскільки він все ще триває. Однак, це має значно спростити налаштування параметрів DPI Windows 8.1.


Відмінні сценарії !! Саме те, на що я сподівався.
користувач20939

3
На жаль, це, здається, не допомагає під Windows 10. Цей метод працює для інших програм, але не для mmc.exe.
ANT

Працює для мене. Файл .reg потребує перезавантаження у Windows 10.
joshudson

Не працює з Windows 10. Перезавантаження не допомагає. Також з цим виправленням працюють інші програми, такі як менеджер ext2fsd. У події mmc.exe немає властивостей сумісності у властивостях
лисини

@baldrs Це, здавалося, працювало для мене. Варто зазначити, що Windows 10 робить справді химерні речі зі збільшенням масштабування дисплея, якщо ви не використовуєте однакові монітори роздільної здатності в середовищі з кількома дисплеями. Переконайтеся, що для всіх дисплеїв встановлено нативну роздільну здатність, а потім масштабуйте на "Рекомендовано" або 200%. Здається, Windows 10 не буде масштабуватись по-різному, залежно від дисплея, у якому є вікно, тому він підбирає головний монітор найкраще, що я можу сказати. Цей монітор, схоже, диктує всі інші масштабування. У мене монітор ноутбука 4k, зовнішній 4k та третій 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 (Сервіси, Диспетчер пристроїв тощо), і вони тепер будуть більшими та чіткішими

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.