Escalonamento de DPI no Windows 8.1 via linha de comando

14

Gostaria de criar um atalho de teclado para alterar rápida e facilmente a escala de DPI na minha máquina, criando uma pequena macro para executar após a detecção do atalho de teclado.

No Windows 8.1, a escala de DPI da tela da área de trabalho pode ser definida através do painel de controle (foto abaixo), entrando em vigor imediatamente. Como alternativa, a escala pode ser definida manualmente no registro, mas isso exige que o usuário entre e saia ou reinicie a máquina para entrar em vigor (e só funciona para imitar a opção "um nível de escala para todos os meus monitores") .

Como definir a escala de DPI por meio da linha de comando ou programaticamente?

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

FThompson
fonte
Você tentou fazer a alteração do registro, interrompendo o processo do explorer e iniciando-o novamente. Porque isso é todo o método GUI faria em teoria.
Ramhound 27/05
@ Ramhound Sem sorte. A interface da GUI está definitivamente fazendo algo para atualizar a área de trabalho para aplicar a configuração, mas não sei o que e não consegui encontrar nada sobre isso.
FThompson 27/05
Tem certeza de que as alterações ocorrem imediatamente? Recebo uma caixa de diálogo dizendo "Você deve sair do seu computador para aplicar essas alterações"
Vinayak
@ Vinayak, As alterações ocorrem imediatamente quando aplicadas pela caixa de diálogo acima. Lembro-me de ler que o aplicativo imediato é novo no Windows 8.1 em relação ao Windows 8 padrão; portanto, se você estiver interessado, pesquisando a diferença entre sua máquina e a minha, esse pode ser o lugar para começar.
precisa saber é o seguinte
@ Vulcan Na verdade, estou usando o Windows 8.1. No entanto, eu estava tentando fazer alterações depois de clicar na Let me choose one scaling level...caixa de seleção, pois o controle deslizante acima está acinzentado no meu notebook.
Vinayak

Respostas:

9

A chave de registro correta para o dimensionamento independente do monitor é HKCU:\Control Panel\Desktop com o valor LogPixels. Mais informações sobre todas as configurações de registro relacionadas ao DPI podem ser encontradas aqui: http://technet.microsoft.com/en-us/library/dn528846.aspx#system Também há informações para o caso em que você ativou o dimensionamento diferente para cada exibição .

Eu escrevi um pequeno script do PowerShell que altera a escala de DPI para todos os monitores, dependendo da escala atual e executa o logoff do usuário, por isso só preciso executar o script quando coloco meu dispositivo em um 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

Acho que você pode modificá-lo para suas necessidades com as informações do artigo TechNet.

Torben Schramme
fonte
3
Minhas desculpas por não responder antes; ótima solução! Infelizmente, no entanto, o uso do LogPixelsvalor só se aplica quando a caixa de seleção "Deixe-me escolher um nível de escala para todos os meus monitores" está marcada, algo que eu havia observado ao mexer nos valores do registro, mas também é confirmado pelo artigo vinculado da Technet. Além disso, sua solução tem a ressalva de exigir o logout do usuário; os DPIs não são atualizados sem que o usuário efetue logout e logon novamente. Entre essas duas desvantagens, sua solução não funciona muito bem para mim, mas +1 da mesma forma para uma ótima resposta.
FThompson
Ele não funciona no Windows 10 :(
kokbira
3
@kokbira para que isso funcione no Windows 10, é necessário definir a chave de registro HKCU:\Control Panel\Desktop\Win8DpiScalingpara 1. Caso contrário, ele usará o fator de escala padrão e ignorar o valor LogPixels.
FlyingFoX 30/08/19
1
Se DPI Scale é diferente para cada monitor, em vez de HKCU:\Control Panel\DesktopolharHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\AppliedDPI
Shayan
1
E também aquiHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GraphicsDrivers\ScaleFactors
Shayan
2

Há um script do PowerShell para alterar a resolução da tela, o que pode ajudar. Não faço idéia se a alteração é imediata no Windows 8.1, mas com um pouco de sorte esse script pode usar a mesma API usada pelo miniaplicativo do Painel de Controle.

O Set-ScreenResolution.ps1script completo está disponível no repositório de scripts , mas é muito longo para ser reproduzido aqui.

Sua descrição pelo autor pode ser encontrada no artigo:
Ei, Equipe de Scripts! Como posso alterar a resolução do meu monitor de área de trabalho através do Windows PowerShell? .

Algumas informações sobre como usá-lo podem ser encontradas no artigo:
Alterando a resolução da tela com o PowerShell .

harrymc
fonte
Esses recursos parecem mais orientados para alterar a resolução da tela em vez do DPI. Eu olhei para os links que você forneceu, mas só vejo opções para definir a largura e a altura, e nenhuma menção ao DPI. Estou entendendo mal sua resposta?
precisa saber é o seguinte
Alterar a resolução altera o DPI e vice-verso. Você pode descobrir a resolução da tela em diferentes configurações de DPI e alterar para essas resoluções usando o script acima.
precisa saber é
1
Embora a alteração da resolução altere o DPI, não é a mesma coisa que a escala de DPI oferecida no Win8 (talvez seja diferente em outros sistemas operacionais?) Um exemplo disso é que, independentemente do que a escala de DPI esteja configurada, a área de trabalho e seus ícones são sempre iguais em tamanho e aparência, enquanto que se a resolução for alterada, a área de trabalho e seus ícones mudam de tamanho de acordo.
precisa saber é o seguinte
Isso ocorre devido à nova tecnologia compatível com DPI introduzida no Windows 8.1. Não consegui encontrar nenhuma informação sobre sua API - apenas as configurações de registro estão disponíveis no momento, o que não é o que você está procurando.
precisa saber é
O Explorer é compatível com DPI, portanto os ícones da área de trabalho mantêm seu tamanho, mas são poucos os outros programas. Para a maioria dos produtos, alterar a resolução é tão bom quanto alterar o DPI.
harrymc