Como forçar a escala de alta resolução?

27

Como forçar um aplicativo a ser escalado em alta resolução?

  • Finja que existe um aplicativo cujos desenvolvedores o manifestaram como com reconhecimento de dpi alto, quando realmente não o é. Como forçar o dimensionamento de dpi?

  • Finja que existe um aplicativo que a Microsoft aplicou o HighDpiAwarecalço de compatibilidade " ", quando o aplicativo realmente não está. Como forçar o dimensionamento de dpi?

Como forçar o Windows a aplicar a escala de dpi a um aplicativo?


Edit: O que é escala de alta dpi?

Nem todos os usuários executam o Windows a 96dpi. Nem todo botão deve ter 75 x 23 pixels, nem toda barra de ferramentas tem 25 pixels de altura e nem todo glifo da visualização em árvores é 16 x 16. Se o usuário tiver escolhido uma configuração de dpi diferente para o Windows, você precisará dimensionar tudo adequadamente.

O problema é que quase nenhum desenvolvedor faz seu trabalho lidando bem com configurações de alta dpi. Na melhor das hipóteses, tudo permanecerá "do mesmo tamanho", o que significa que todos parecem minúsculos . Na pior das hipóteses, as formas são dispostas incorretamente, com o texto sendo cortado e os controles não visíveis.

Começando com o Windows Vista, e aproveitando o poder da composição da área de trabalho, a Microsoft desistiu dos desenvolvedores que estão fazendo seu trabalho e agora mentem para os aplicativos. Eles dizem aos aplicativos que o usuário está executando a 96dpi. O Windows usa a placa de vídeo e a Composição da área de trabalho para aumentar os formulários.

Pro: o conteúdo do formulário será um bom tamanho legível.
Contras: tudo ficará um pouco confuso.

Esse recurso de "alta escala de dpi" funciona apenas a critério do usuário e requer:

  • Windows Vista ou mais recente
  • Composição da área de trabalho a ser ativada
  • o usuário desative "Usar escala de estilo do Windows XP"
  • o usuário não desabilitar a escala para seu aplicativo

Como desenvolvedor, você pode optar por sair da escala de alta resolução; se você se esforçou para escrever seu aplicativo corretamente e sabe que lida com alta dpi corretamente. Você desabilita esse dimensionamento adicionando uma entrada de manifesto ao seu executável, declarando que tem " reconhecimento alto de dpi ".

O tópico de como fazer seu aplicativo respeitar as preferências do usuário (incluindo a face da fonte, o tamanho da fonte e a configuração de dpi) é uma questão para stack overflow. Como é a sintaxe da entrada do manifesto que declara sua " conscientização de alta dpi ".

Esta pergunta, no superusuário , é como ignorar um desenvolvedor que seguiu em frente e adicionou uma entrada de manifesto com reconhecimento de dpi alta, quando, na verdade, o aplicativo não possui reconhecimento de dpi. Eles disseram ao Windows para desativar o dimensionamento, mas na verdade não testaram o aplicativo. Existem softwares disponíveis com uma entrada de manifesto com "reconhecimento alto de dpi" e agora o aplicativo não pode ser usado em "fontes grandes" (por exemplo, 120 dpi).

Ian Boyd
fonte
Também estou interessado nisso. Temos um aplicativo crítico que não reconhece ppp e foi originalmente projetado para uma tela de 800x600. O Windows não o dimensiona por padrão e não faz diferença se estamos usando XP, Vista ou 7. Como nossa equipe passa a maior parte do tempo neste aplicativo de 800x600, eles insistem em usar seus monitores LCD de 20 " ! em resolução de 800x600 Este é um desperdício enorme, e a falta de auto-infligido de pixels fica em seu caminho quando eles precisam usar MS Office, IE8, etc.
Miles Erickson
1
Não foi até o Windows Vista que a Microsoft começou a alavancar o Desktop Composition (o que alguns chamam de Aero por engano ) para usar a placa gráfica para dimensionar aplicativos que não optam especificamente pela exclusão da escala. Não havia redimensionamento no XP e você não deseja redimensionar no Vista 7. Você deseja que seu aplicativo seja gravado corretamente. Vá até a máquina de um desenvolvedor e altere a resolução para 1050 e defina o dpi como 168. Tudo terá o mesmo zoom ampliado no modo tardio, exceto que o aplicativo não se comportará corretamente. Diga a eles que não receberão comida ou água até que seja consertado.
Ian Boyd
Nem sempre temos acesso aos desenvolvedores que criam os aplicativos que usamos. Se ao menos tivéssemos ...
Cilíndrico
Formas = formas?
precisa saber é o seguinte

Respostas:

5

Hmm. Minha sugestão seria editar o manifesto e remover a declaração incorreta. E não se esqueça de incomodar o desenvolvedor sobre isso da maneira que puder!

Edit: Observe que deve ser possível simplesmente colocar o manifesto ao lado do executável, por exemplo foo.exe, porque você colocaria o manifesto foo.exe.manifest. Consulte o artigo MSDN (consulte a seção "Sintaxe de nome de arquivo").

SamB
fonte
Presumo que este seja o único caminho a percorrer. O lado negativo: invalida a assinatura digital do aplicativo.
Ian Boyd
@Ian: parece que você não precisa colocar o manifesto em um recurso.
SamB 02/02
3
Antes, um .manifestarquivo tinha precedência sobre o manifesto dentro do executável. Hoje, qualquer manifesto incorporado ao executável substitui qualquer .manifestarquivo externo . não me lembro qual service pack do XP mudou - acho que foi o SP2.
21710 Ian
8

Acabei de lançar uma DLL que conecta e redireciona chamadas para SetProcessDPIAware. Para os aplicativos que desabilitam a escala de DPI por meio de código, esta é uma correção rápida e fácil (comparada à correção binária).

DPIMangler: publicação no blog , código fonte .

George
fonte
6

Você ainda pode editar o manifesto, basta editá-lo no próprio arquivo .exe. Procure um editor de recursos que tenha suporte manifesto. Um exemplo com suporte rudimentar é o XN Resource Editor.) Apenas encontre e exclua a linha que menciona HIGHDPIAWARE e salve o executável.

Certifique-se de fazer uma cópia do executável antes de editá-lo!

trlkly
fonte
"O lado negativo: invalida a assinatura digital do aplicativo".
22812 Ian Boyd
0

Gostaria de saber se ResizeEnable é o que você está procurando?

http://www.digitallis.co.uk/pc/ResizeEnable/

James T
fonte
Não, as janelas já são redimensionáveis. O problema é quando o compositor compõe a janela para exibição. No momento, ele não está fazendo nada de especial, pois o aplicativo disse que não precisa ser escalado. Mas, na verdade a janela não precisa ser escalado.
Ian Boyd