Відповіді:
Вкладка «Сумісність» прихована для системних файлів, тому для копіювання функціональності прапорця «Вимкнути масштабування дисплея на високих налаштуваннях 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.
У 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 (Сервіси, Диспетчер пристроїв тощо), і вони тепер будуть більшими та чіткішими