Risposte:
La scheda Compatibilità è nascosta per i file di sistema, quindi per replicare la funzionalità della casella di controllo "Disattiva ridimensionamento dello schermo su impostazioni DPI elevate", aggiungere quanto segue al registro:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
Ciò ha l'ulteriore vantaggio di fare in modo che tutti gli snap-in MMC come l'Editor criteri di gruppo utilizzino anche il ridimensionamento nativo anziché la versione rasterizzata sfocata.
Puoi salvarlo come file .reg e importarlo, oppure utilizzare incolla il seguente comando nella finestra di dialogo Esegui:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
Se ti ritrovi a usare questa soluzione alternativa spesso potresti volerlo aggiungere al menu contestuale del tasto destro per i file .exe. Puoi anche aggiungerlo ai file .msi poiché la scheda Compatibilità manca anche per quei file:
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"
Poiché le impostazioni "Esegui come amministratore" e "Disabilita ridimensionamento DPI" sono memorizzate insieme, invocando quel comando su un file già impostato per essere eseguito come amministratore, questo flag verrà cancellato e verrà impostato invece il flag di ridimensionamento DPI. Ciò riguarda solo i file per i quali hai spuntato manualmente la casella, non quelli con il corretto manifestExecutionLevel nel loro manifest.
Solo per riferimento, quando entrambi sono controllati la stringa è "~ RUNASADMIN HIGHDPIAWARE" ma non lo inserirei in un'opzione del menu di scelta rapida poiché è già disponibile per l'uso singolo nel menu di scelta rapida e non è una buona idea creare token amministratore necessario così facilmente.
Se si desidera l'opzione per disabilitare il ridimensionamento DPI per i file eseguibili e di installazione in una cartella specifica, è possibile utilizzare la seguente importazione .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\""
L'uso di questa opzione in una cartella a livello di root come Programmi è una cattiva idea perché creerai centinaia di voci di registro. Ma per alcuni casi è essenziale, in particolare per Process Explorer e il resto delle utility Sysinternals, o le utility Nirsoft, che funzionano alla grande con il ridimensionamento DPI disabilitato ma non hanno l'opzione esplicitamente specificata nei loro manifest.
L'ultimo batch di codice utilizza il comando di avvio interno per rimuovere la finestra del prompt dei comandi il più rapidamente possibile e tenerlo ridotto al minimo mentre analizza il contenuto della cartella. Il simbolo @ viene utilizzato per impedire l'eco del comando nell'output e il reindirizzamento nul viene utilizzato per nascondere l'output "Operazione completata correttamente". per ogni voce poiché non cambia mai.
Se ti capita di avere l'ottimo strumento nircmd puoi nascondere completamente il breve flash della finestra del prompt dei comandi:
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\""
Se nircmd.exe non si trova sul percorso, è possibile aggiungere la posizione sopra o aggiungere la cartella al percorso nella finestra di dialogo Variabili di ambiente di sistema. Per far apparire quella finestra puoi usare il comandorundll32 sysdm.cpl,EditEnvironmentVariables
Si potrebbe sostenere che sarebbe più elegante aggiungere le chiavi del Registro di sistema creando un file .reg in fase di esecuzione e importandolo silenziosamente con l' reg import /s
opzione non documentata . Ma nella mia esperienza, la scrittura di qualsiasi file in fase di runtime genera ogni sorta di allarmi con prodotti di sicurezza come COMODO Internet Securita, le sue versioni equivalenti di Panda, Norton, ecc. E qualsiasi cosa basata su un modello HIPS. Non vedo la necessità di farlo quando quanto sopra funziona bene, specialmente se lo stai usando su più computer o lo condividi e non vuoi creare un falso allarme per qualcun altro.
Tuttavia, se stai già utilizzando nircmd, avrebbe senso usare il suo regsetval
comando invece che reg add
per le estensioni della shell .exe e .msi. L'opzione cartella dovrebbe comunque scorrere l'elenco delle directory per aggiungere ogni voce in modo che non funzioni per quelli. PowerShell e VBScript sono opzioni ma la loro disponibilità dipende dalla versione di Windows e da una serie di altre variabili. Dal punto di vista della sicurezza, VBScript ha la reputazione di vettore di exploit, in particolare se scaricato da Internet o condiviso su una rete, e gli script PS1 non verranno eseguiti affatto senza impostare esplicitamente la politica di esecuzione di PowerShell per consentire gli script con firma remota.
Fammi sapere se noti qualcosa di strano quando usi quel codice perché è ancora in fase di elaborazione. Detto questo, dovrebbe rendere molto più semplice la configurazione delle impostazioni DPI di Windows 8.1.
Su Windows 10 puoi ottenere lo stesso effetto facendo:
1: A seconda della build che hai (per trovarla, premi Windows + R, digita "winver", premi Invio):
Inserisci il livello di ridimensionamento manualmente, anche se è disponibile nel menu a discesa. Saprai di averlo fatto correttamente se ti viene richiesto di uscire per rendere effettive le impostazioni.
2: salvare quanto segue in un file .reg sul desktop e fare doppio clic per aggiungere i contenuti al registro:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001
3: salvare il seguente file come 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: Apri qualsiasi finestra MMC (Servizi, Gestione dispositivi, ecc.) E ora saranno più grandi e più nitide