Respostas:
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 /s
opçã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 regsetval
comando em vez das reg add
extensõ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.
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):
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