Como informar o Console de Gerenciamento Microsoft com alto DPI no Windows 8.1?

16

Como o Windows 8.1 não permite o suporte de alto DPI "estilo Windows XP" em todo o sistema, como posso tornar os aplicativos do Console de Gerenciamento Microsoft (mmc.exe) com alto DPI? Não existe um item de menu de contexto "Solucionar problemas de compatibilidade".

user20939
fonte

Respostas:

20

A guia Compatibilidade está oculta para arquivos do sistema; portanto, para replicar a funcionalidade da caixa de seleção "Desativar escala de exibição em configurações de alta DPI", você deve adicionar o seguinte ao registro:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Windows\\System32\\mmc.exe"="~ HIGHDPIAWARE"

Isso tem o benefício adicional de fazer com que todos os snap-ins do MMC, como o Editor de Diretiva de Grupo, também usem a escala nativa em vez da versão rasterizada embaçada.

Você pode salvá-lo como arquivo .reg e importá-lo, ou use o seguinte comando na caixa de diálogo Executar:

reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\Windows\System32\mmc.exe" /f /t REG_SZ /d "~ HIGHDPIAWARE"

Se você costuma usar essa solução alternativa com freqüência, convém adicioná-la ao menu de contexto do botão direito do mouse para arquivos .exe. Você também pode adicioná-lo aos arquivos .msi, pois a guia Compatibilidade também está ausente para esses arquivos:

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"

Como as configurações "Executar como Administrador" e "Desativar escala de DPI" são armazenadas juntas, invocar esse comando em um arquivo já definido para execução como administrador limpará esse sinalizador e, em vez disso, definirá o sinalizador de dimensionamento de DPI. Isso afeta apenas os arquivos que você marcou manualmente na caixa, não aqueles com o requestExecutionLevel correto no manifesto.

Apenas para referência, quando as duas estão marcadas, a sequência é "~ RUNASADMIN HIGHDPIAWARE", mas eu não colocaria isso em uma opção de menu de contexto, pois ela já está disponível para uso único no menu de contexto e não é uma boa ideia fazer o token de administrador necessário tão facilmente.

Se você quiser a opção de desativar o dimensionamento de DPI para arquivos executáveis ​​e instaladores em uma pasta específica, use a seguinte importação .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 essa opção em uma pasta no nível raiz, como Arquivos de Programas, é uma má idéia, pois você criará centenas de entradas do Registro. Mas, em alguns casos, é essencial, especialmente para o Process Explorer e o restante dos utilitários Sysinternals ou Nirsoft, todos executados muito bem com o dimensionamento de DPI desativado, mas não têm a opção especificada explicitamente em seus manifestos.

O último lote de código usa o comando start interno para afastar a janela do prompt de comando o mais rápido possível e mantê-lo minimizado ao analisar o conteúdo da pasta. O símbolo @ é usado para evitar o retorno do comando na saída e o redirecionamento nul é usado para ocultar a saída "A operação foi concluída com êxito". para cada entrada, uma vez que nunca muda.

Se você possui a excelente ferramenta nircmd, pode ocultar completamente o breve flash da janela do prompt de comando:

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\""

Se o nircmd.exe não estiver no seu caminho, você poderá adicionar sua localização acima ou adicionar sua pasta ao seu caminho na caixa de diálogo Variáveis ​​de ambiente do sistema. Para abrir essa janela, você pode usar o comandorundll32 sysdm.cpl,EditEnvironmentVariables

Pode-se argumentar que seria mais elegante adicionar as chaves do Registro criando um arquivo .reg em tempo de execução e importando-o silenciosamente com a reg import /sopção não documentada . Mas, na minha experiência, escrever qualquer arquivo em tempo de execução gera todos os tipos de alarmes com produtos de segurança como o COMODO Internet Securita, suas versões equivalentes do Panda, Norton etc. e qualquer coisa baseada em um modelo HIPS. Não vejo a necessidade de fazer isso quando as opções acima funcionam muito bem, especialmente se você estiver usando isso em vários computadores ou compartilhando e não quiser criar um alarme falso para outra pessoa.

No entanto, se você já estiver usando o nircmd, faria sentido usar o regsetvalcomando em vez das reg addextensões de shell .exe e .msi. A opção de pasta ainda precisará percorrer a lista de diretórios para adicionar cada entrada, para que não funcione para elas. PowerShell e VBScript são opções, mas sua disponibilidade depende da versão do Windows e de uma série de outras variáveis. Do ponto de vista da segurança, o VBScript tem a reputação de vetor de exploração, especialmente quando baixado da Internet ou compartilhado em uma rede, e os scripts PS1 não serão executados sem a definição explícita da política de execução do PowerShell para permitir scripts assinados remotamente.

Avise-me se notar algo estranho ao usar esse código, pois ele ainda está em andamento. Dito isto, deve facilitar muito a configuração das configurações de DPI do Windows 8.1.

Rod Boev
fonte
Excelentes scripts !! Exatamente o que eu estava esperando.
user20939
3
Infelizmente, isso não parece ajudar no Windows 10. Esse método funciona para outros aplicativos, mas não para o mmc.exe.
AnT 28/10
Funciona para mim. O arquivo .reg requer uma reinicialização no Windows 10.
joshudson
Não funciona com o Windows 10. A reinicialização não ajuda. Outros aplicativos, como o ext2fsd manager, também trabalham com essa correção. evento mmc.exe não tem qualquer guia compatibilidade nas propriedades
Baldrs
@baldrs Isso pareceu funcionar para mim. Uma coisa a observar é que o Windows 10 faz algumas coisas realmente impressionantes com a escala de exibição se você não estiver usando os mesmos monitores de resolução em um ambiente com vários monitores. Verifique se TODOS os monitores estão configurados com resolução nativa e, em seguida, dimensione para 'Recomendado' ou 200%. Parece que o Windows 10 não será dimensionado internamente de forma diferente, dependendo da tela em que a janela estiver, para que ele escolha o monitor principal da melhor maneira possível. Esse monitor parece ditar todas as outras escalas. Eu tenho um monitor de laptop 4k, externo 4k e FullHD em terceiro. O terceiro monitor estava confusa até que isso
Andrew T Finnell
2

No Windows 10, você pode obter o mesmo efeito fazendo:

1: Dependendo da versão que você possui (para encontrá-la, pressione Windows + R, digite "winver", pressione Enter):

  • antes da compilação 15019: abra o Painel de controle, Tela, Alterar tamanho dos itens, defina um nível de escala personalizado
  • build 15019 ou posterior: abra Configurações, Sistema, Tela, Escala personalizada

Digite o nível de escala manualmente, mesmo se estiver disponível no menu suspenso. Você saberá que fez isso corretamente se for solicitado a sair para que a configuração entre em vigor.

2: Salve o seguinte em um arquivo .reg na área de trabalho e clique duas vezes nele para adicionar o conteúdo ao seu registro:

Windows Registry Editor Version 5.00

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

3: Salve o seguinte arquivo 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 qualquer janela do MMC (Serviços, Gerenciador de dispositivos, etc.) e agora elas serão maiores e mais nítidas

Rod Boev
fonte