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).


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").


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 .


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!


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.