La pestaña Compatibilidad está oculta para los archivos del sistema, por lo que para replicar la funcionalidad de la casilla de verificación "Deshabilitar escala de visualización en configuraciones de DPI altas", debe agregar lo siguiente al registro:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"
Esto tiene el beneficio adicional de hacer que todos los complementos de MMC, como el Editor de directivas de grupo, también usen la escala nativa en lugar de la versión borrosa rasterizada.
Puede guardarlo como archivo .reg e importarlo, o usar pegar el siguiente comando en el cuadro de diálogo Ejecutar:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"
Si se encuentra utilizando esa solución a menudo, es posible que desee agregarla al menú contextual del botón derecho para archivos .exe. También puede agregarlo a archivos .msi ya que la pestaña de compatibilidad también falta para esos archivos:
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"
Dado que las configuraciones "Ejecutar como administrador" y "Deshabilitar la escala de DPI" se almacenan juntas, invocar ese comando en un archivo ya configurado para ejecutarse como administrador borrará esa bandera y establecerá la bandera de escala de DPI en su lugar. Eso solo afecta a los archivos en los que ha marcado manualmente la casilla, no a aquellos con el nivel de ejecución requerido correcto en su manifiesto.
Solo como referencia, cuando ambos están marcados, la cadena es "~ RUNASADMIN HIGHDPIAWARE", pero no lo pondría en una opción del menú contextual ya que ya está disponible para un uso único en el menú contextual y no es una buena idea hacer el token de administrador necesario tan fácilmente.
Si desea la opción de deshabilitar la escala de DPI para archivos ejecutables e instaladores en una carpeta específica, puede usar la siguiente importación .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\""
Usar esa opción en una carpeta de nivel raíz como Archivos de programa es una mala idea porque creará cientos de entradas de registro. Pero en algunos casos es esencial, particularmente para Process Explorer y el resto de las utilidades de Sysinternals, o las utilidades de Nirsoft, que funcionan muy bien con el escalado DPI deshabilitado pero no tienen la opción explícitamente especificada en sus manifiestos.
El último lote de código usa el comando de inicio interno para quitar la ventana del símbolo del sistema lo más rápido posible y mantenerlo minimizado a medida que analiza el contenido de la carpeta. El símbolo @ se usa para evitar que se repita el comando en la salida, y la redirección nul se usa para ocultar la salida "La operación se completó con éxito". para cada entrada ya que nunca cambia.
Si tiene la excelente herramienta nircmd, puede ocultar el breve destello de la ventana del símbolo del sistema por completo:
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 no está en su ruta, puede agregar su ubicación arriba o agregar su carpeta a su ruta en el cuadro de diálogo Variables de entorno del sistema. Para abrir esa ventana, puede usar el comandorundll32 sysdm.cpl,EditEnvironmentVariables
Se podría argumentar que sería más elegante agregar las claves de registro creando un archivo .reg en tiempo de ejecución e importándolo en silencio con la reg import /s
opción no documentada . Pero en mi experiencia, escribir cualquier archivo en tiempo de ejecución genera todo tipo de alarmas con productos de seguridad como COMODO Internet Securita, sus versiones equivalentes de Panda, Norton, etc. y cualquier cosa basada en un modelo HIPS. No veo la necesidad de hacerlo cuando lo anterior funciona bien, especialmente si está usando esto en varias computadoras o lo comparte y no quiere crear una falsa alarma para otra persona.
Sin embargo, si ya está usando nircmd, tendría sentido usar su regsetval
comando en lugar de reg add
para las extensiones de shell .exe y .msi. La opción de carpeta aún necesitaría iterar sobre la lista del directorio para agregar cada entrada para que no funcione para ellos. PowerShell y VBScript son opciones, pero su disponibilidad depende de la versión de Windows y de una gran cantidad de otras variables. Desde el punto de vista de la seguridad, VBScript tiene la reputación de ser un vector de explotación especialmente cuando se descarga de Internet o se comparte en una red, y los scripts de PS1 no se ejecutarán en absoluto sin configurar explícitamente la política de ejecución de PowerShell para permitir scripts firmados remotos.
Avíseme si nota algo extraño al usar ese código, ya que todavía es un trabajo en progreso. Dicho esto, debería hacer que la configuración de DPI de Windows 8.1 sea mucho más fácil.