L'onglet Compatibilité est masqué pour les fichiers système, donc pour répliquer la fonctionnalité de la case à cocher "Désactiver la mise à l'échelle de l'affichage sur les paramètres DPI élevés", vous ajouteriez les éléments suivants au registre:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
Cela présente l'avantage supplémentaire de faire en sorte que tous les composants logiciels enfichables MMC comme l'Éditeur de stratégie de groupe utilisent également la mise à l'échelle native au lieu de la version tramée floue.
Vous pouvez l'enregistrer en tant que fichier .reg et l'importer, ou utilisez coller la commande suivante dans la boîte de dialogue Exécuter:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
Si vous utilisez souvent cette solution de contournement, vous pouvez l'ajouter au menu contextuel du clic droit pour les fichiers .exe. Vous pouvez également l'ajouter aux fichiers .msi car l'onglet Compatibilité est également manquant pour ces fichiers:
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"
Étant donné que les paramètres «Exécuter en tant qu'administrateur» et «Désactiver la mise à l'échelle DPI» sont stockés ensemble, l'invocation de cette commande sur un fichier déjà défini pour s'exécuter en tant qu'administrateur effacera cet indicateur et définira l'indicateur de mise à l'échelle DPI à la place. Cela n'affecte que les fichiers pour lesquels vous avez coché manuellement la case, pas ceux avec le niveau requisExecutionLevel correct dans leur manifeste.
Juste pour référence, lorsque les deux sont cochés, la chaîne est "~ RUNASADMIN HIGHDPIAWARE" mais je ne mettrais pas cela dans une option de menu contextuel car il est déjà disponible pour une utilisation unique dans le menu contextuel et ce n'est pas une bonne idée de faire le jeton administrateur nécessaire si facilement.
Si vous souhaitez désactiver l'option de mise à l'échelle DPI pour les fichiers exécutables et d'installation dans un dossier spécifique, vous pouvez utiliser l'importation .reg suivante:
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'utilisation de cette option sur un dossier de niveau racine comme Program Files est une mauvaise idée car vous allez créer des centaines d'entrées de registre. Mais dans certains cas, c'est essentiel, en particulier pour Process Explorer et le reste des utilitaires Sysinternals ou Nirsoft, qui fonctionnent tous parfaitement avec la mise à l'échelle DPI désactivée mais n'ont pas l'option explicitement spécifiée dans leurs manifestes.
Le dernier lot de code utilise la commande de démarrage interne pour retirer la fenêtre d'invite de commandes le plus rapidement possible et la minimiser lors de l'analyse du contenu du dossier. Le symbole @ est utilisé pour empêcher l'écho de la commande dans la sortie, et une redirection nulle est utilisée pour masquer la sortie «L'opération s'est terminée avec succès». pour chaque entrée car elle ne change jamais.
S'il vous arrive d'avoir l'excellent outil nircmd, vous pouvez masquer entièrement le bref flash de la fenêtre d'invite de commande:
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\""
Si nircmd.exe ne se trouve pas dans votre chemin, vous pouvez soit ajouter son emplacement au-dessus, soit ajouter son dossier à votre chemin dans la boîte de dialogue Variables d'environnement système. Pour afficher cette fenêtre, vous pouvez utiliser la commanderundll32 sysdm.cpl,EditEnvironmentVariables
L'argument pourrait être avancé qu'il serait plus élégant d'ajouter les clés de registre en créant un fichier .reg au moment de l'exécution et en l'important silencieusement avec l' reg import /s
option non documentée . Mais d'après mon expérience, l'écriture de fichiers au moment de l'exécution déclenche toutes sortes d'alarmes avec des produits de sécurité comme COMODO Internet Securita, ses versions équivalentes de Panda, Norton, etc. et tout ce qui est basé sur un modèle HIPS. Je ne vois pas la nécessité de le faire lorsque cela fonctionne très bien, surtout si vous l'utilisez sur plusieurs ordinateurs ou le partagez et que vous ne voulez pas créer de fausse alarme pour quelqu'un d'autre.
Cependant, si vous utilisez déjà nircmd, il serait judicieux d'utiliser sa regsetval
commande au lieu des reg add
extensions shell .exe et .msi. L'option de dossier devra toujours parcourir la liste des répertoires pour ajouter chaque entrée afin qu'elle ne fonctionne pas pour celles-ci. PowerShell et VBScript sont des options mais leur disponibilité dépend de la version de Windows et d'une foule d'autres variables. Du point de vue de la sécurité, VBScript a la réputation d'être un vecteur d'exploitation, en particulier lorsqu'il est téléchargé à partir d'Internet ou partagé sur un réseau, et les scripts PS1 ne s'exécuteront pas du tout sans définir explicitement la politique d'exécution de PowerShell pour autoriser les scripts signés à distance.
Faites-moi savoir si vous remarquez quelque chose d'étrange lors de l'utilisation de ce code car c'est toujours un travail en cours. Cela étant dit, cela devrait faciliter la configuration des paramètres DPI de Windows 8.1.