Escala de DPI en Windows 8.1 a través de la línea de comando

14

Me gustaría crear un atajo de teclado para cambiar rápida y fácilmente la escala de DPI en mi máquina, mediante la creación de una pequeña macro que se ejecute al detectar el atajo de teclado.

En Windows 8.1, la escala de DPI de la pantalla de escritorio se puede configurar a través del panel de control (en la foto a continuación), surtiendo efecto de inmediato. Alternativamente, la escala se puede configurar manualmente en el registro, pero hacerlo requiere que el usuario inicie y cierre sesión o reinicie la máquina para que surta efecto (y solo funciona para imitar la opción "un nivel de escala para todas mis pantallas") .

¿Cómo puedo configurar la escala DPI a través de la línea de comando, o de otra manera mediante programación?

http://puu.sh/93YLV.jpg

FThompson
fuente
¿Has intentado hacer el cambio de registro, matando el proceso del explorador y luego volviéndolo a iniciar? Porque eso es todo lo que el método GUI haría en teoría.
Ramhound
@Ramhound Sin suerte. La interfaz GUI definitivamente está haciendo algo para actualizar el escritorio para aplicar la configuración, pero no estoy seguro de qué y no he podido encontrar nada al respecto.
FThompson
¿Estás seguro de que los cambios tienen lugar de inmediato? Aparece un cuadro de diálogo que dice "Debe cerrar sesión en su computadora para aplicar estos cambios"
Vinayak
@Vinayak, los cambios tienen lugar inmediatamente cuando se aplica el cuadro de diálogo anterior. Recuerdo haber leído que la aplicación inmediata es nueva en Windows 8.1 sobre Windows 8 estándar, así que si está interesado en investigar esa diferencia entre su máquina y la mía, ese podría ser un lugar para comenzar.
FThompson
@Vulcan En realidad, estoy usando Windows 8.1. Sin embargo, estaba tratando de hacer cambios después de hacer clic en la Let me choose one scaling level...casilla de verificación, ya que el control deslizante de arriba está atenuado en mi cuaderno.
Vinayak

Respuestas:

9

La clave de registro correcta para supervisar la escala independiente es HKCU:\Control Panel\Desktopcon el valor LogPixels. Puede encontrar más información sobre todas las configuraciones de registro relacionadas con DPI aquí: http://technet.microsoft.com/en-us/library/dn528846.aspx#system También hay información para el caso cuando habilitó una escala diferente para cada pantalla .

Escribí un pequeño script de PowerShell que cambia la escala de DPI para todas las pantallas dependiendo de la escala actual y realiza el cierre de sesión del usuario, por lo que solo tengo que ejecutar el script cuando coloco mi dispositivo en un monitor diferente.

cd 'HKCU:\Control Panel\Desktop'
$val = Get-ItemProperty -Path . -Name "LogPixels"
if($val.LogPixels -ne 96)
{
    Write-Host 'Change to 100% / 96 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 96
} else {
    Write-Host 'Change to 150% / 144 dpi'
    Set-ItemProperty -Path . -Name LogPixels -Value 144
}

logoff;exit

Creo que puede modificarlo según sus necesidades con la información del artículo de TechNet.

Torben Schramme
fuente
3
Mis disculpas por no responder antes; gran solución! Sin embargo, desafortunadamente, el uso del LogPixelsvalor solo se aplica cuando la casilla de verificación "Permítame elegir un nivel de escala para todas mis pantallas" está marcada, algo que había observado al alterar los valores del registro, pero también lo confirma el artículo vinculado de Technet. Además, su solución tiene la advertencia de requerir el cierre de sesión del usuario; los DPI no se actualizan sin que el usuario cierre sesión y vuelva a iniciarla. Entre estos dos inconvenientes, su solución no funciona para mí, pero de todos modos +1 para una excelente respuesta.
FThompson
No funciona en Windows 10 :(
kokbira
3
@kokbira Para que esto funcione en Windows 10, debe establecer la clave de registro HKCU:\Control Panel\Desktop\Win8DpiScalingen 1. De lo contrario, utilizará el factor de escala predeterminado e ignorará el valor en LogPixels.
FlyingFoX
1
Si la escala DPI es diferente para cada monitor, en lugar de HKCU:\Control Panel\DesktopmirarHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
Shayan
1
Y también aquíHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\ScaleFactors
Shayan
2

Hay un script de PowerShell para cambiar la resolución de pantalla que podría ayudar. No tengo idea si el cambio que hace es inmediato en Windows 8.1, pero con un poco de suerte, este script podría usar la misma API que usa el applet del Panel de control.

El Set-ScreenResolution.ps1guión completo está disponible en el Repositorio de guiones , pero es demasiado largo para reproducirlo aquí.

Su descripción por el autor se puede encontrar en el artículo:
¡Hola, Scripting Guy! ¿Cómo puedo cambiar la resolución de mi monitor de escritorio a través de Windows PowerShell? .

Puede encontrar información sobre cómo usarlo en el artículo:
Cambio de la resolución de pantalla con Powershell .

harrymc
fuente
Estos recursos se ven más orientados a cambiar la resolución de la pantalla en lugar de la DPI. Miré los enlaces que proporcionó, pero solo veo opciones para establecer el ancho y la altura, y no mencioné DPI. ¿Estoy malinterpretando tu respuesta?
FThompson
Cambiar la resolución cambiará el DPI y viceversa. Puede encontrar la resolución de la pantalla en diferentes configuraciones de DPI, luego cambiar a estas resoluciones usando el script anterior.
harrymc
1
Si bien cambiar la resolución cambia el DPI, no es lo mismo que la escala de DPI ofrecida en Win8 (¿tal vez es diferente en otros sistemas operativos?) Un ejemplo de esto es que, independientemente de lo que esté configurado en la escala de DPI, el escritorio y sus iconos son siempre iguales en tamaño y apariencia, mientras que si se cambia la resolución, el escritorio y sus iconos cambian de tamaño en consecuencia.
FThompson
Esto se debe a la nueva tecnología compatible con DPI introducida en Windows 8.1. No he podido encontrar ninguna información sobre su API; actualmente solo está disponible la configuración de registro, que no es lo que está buscando.
harrymc
Explorer es compatible con DPI, por lo que los iconos de escritorio mantienen su tamaño, pero muy pocos otros programas lo son. Para la mayoría de los productos, cambiar la resolución es tan bueno como cambiar el DPI.
harrymc