¿Cómo puedo hacer que Microsoft Management Console tenga un alto DPI en Windows 8.1?

16

Dado que Windows 8.1 no permite el alto nivel de DPI de todo el sistema "estilo Windows XP", ¿cómo puedo hacer que las aplicaciones de Microsoft Management Console (mmc.exe) tengan un alto DPI? No hay ningún elemento del menú contextual "Solucionar problemas de compatibilidad" para ello.

usuario20939
fuente

Respuestas:

20

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 /sopció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 regsetvalcomando en lugar de reg addpara 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.

Rod Boev
fuente
Excelentes guiones !! Exactamente lo que esperaba.
user20939
3
Desafortunadamente, esto no parece ayudar en Windows 10. Este método funciona para otras aplicaciones, pero no para mmc.exe.
AnT
Funciona para mi. El archivo .reg requiere un reinicio en Windows 10.
joshudson
No funciona con Windows 10. Reiniciar no ayuda. También otras aplicaciones como ext2fsd manager funcionan con esta solución. El evento mmc.exe no tiene ninguna pestaña de compatibilidad en las propiedades
baldrs
@baldrs Esto pareció funcionar para mí. Una cosa a tener en cuenta es que Windows 10 hace algunas cosas realmente extrañas con el escalado de la pantalla si no está utilizando los mismos monitores de resolución en un entorno de pantallas múltiples. Verifique que TODAS las pantallas estén configuradas en resolución nativa, luego escale a 'Recomendado', o 200%. Parece que Windows 10 no escalará internamente de manera diferente dependiendo de la pantalla en la que esté encendida una ventana, por lo que elige el monitor principal mejor que puedo decir. Ese monitor parece dictar todas las demás escalas. Tengo un monitor portátil de 4k, 4k externo y FullHD tercero. El tercer monitor estaba borroso hasta esto
Andrew T Finnell, el
2

En Windows 10 puede lograr el mismo efecto haciendo:

1: Dependiendo de qué compilación tenga (para encontrarlo, presione Windows + R, escriba "winver", presione Entrar):

  • antes de la compilación 15019: abra el Panel de control, Pantalla, Cambie el tamaño de los elementos, establezca un nivel de escala personalizado
  • compilación 15019 o posterior: abra Configuración, Sistema, Pantalla, Escala personalizada

Ingrese el nivel de escala manualmente, incluso si está disponible en el menú desplegable. Sabrá que lo ha hecho correctamente si se le solicita que cierre sesión para que la configuración surta efecto.

2: Guarde lo siguiente en un archivo .reg en su escritorio y haga doble clic para agregar el contenido a su registro:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001

3: Guarde el siguiente archivo como 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: Abra cualquier ventana de MMC (Servicios, Administrador de dispositivos, etc.) y ahora serán más grandes y nítidas

Rod Boev
fuente