¿Cómo forzar el escalado de alta dpi?

27

¿Cómo puedo forzar que una aplicación tenga una escala alta de ppp?

  • Supongamos que hay una aplicación, cuyos desarrolladores la manifestaron como alta en dpi, cuando realmente no lo es. ¿Cómo puedo forzar la escala de ppp?

  • Supongamos que hay una aplicación en la que Microsoft ha aplicado la " HighDpiAware" compatibilidad shim, cuando la aplicación realmente no lo es. ¿Cómo puedo forzar la escala de ppp?

¿Cómo puedo forzar a Windows a aplicar escala de ppp a una aplicación?


Editar: ¿Qué es el escalado de alta resolución?

No todos los usuarios ejecutan Windows a 96 ppp. Se supone que no todos los botones tienen 75x23 píxeles, no todas las barras de herramientas tienen 25 píxeles de alto y no todos los glifos de vista de árbol tienen 16x16. Si el usuario ha elegido una configuración de dpi diferente para Windows, debe escalar todo adecuadamente.

El problema es que casi ningún desarrollador hace su trabajo manejando muy bien las configuraciones de alta resolución. En el mejor de los casos, todo se mantendrá "del mismo tamaño", lo que significa que todo parece muy pequeño . En el peor de los casos, las formas están mal distribuidas, el texto se recorta y los controles no son visibles.

Comenzando con Windows Vista y aprovechando el poder de Desktop Composition, Microsoft renunció a que los desarrolladores hicieran su trabajo, y ahora mienten a la aplicación. Dicen a las aplicaciones que el usuario se está ejecutando a 96 ppp. Windows usa la tarjeta de video y la Composición de escritorio para escalar los formularios.

Pro: el contenido del formulario tendrá un tamaño agradable y legible.
Con: todo estará un poco borroso.

Esta función de "escalado de alta resolución" solo funciona a discreción del usuario y requiere:

  • Windows Vista o más reciente
  • Composición de escritorio para habilitar
  • el usuario para desactivar "Usar escala de estilo de Windows XP"
  • el usuario no deshabilite el escalado para su aplicación

Como desarrollador, puede optar por salir de la escala de alta dpi; si te esforzaste por escribir tu aplicación correctamente y sabes que manejarás los ppp altos correctamente. Usted opta por esta escala agregando una entrada de manifiesto a su ejecutable, declarando que tiene " alta resolución de dpi ".

El tema de cómo hacer que su aplicación respete las preferencias del usuario (incluida la fuente, el tamaño de fuente y la configuración de ppp) es una pregunta para stack overflow. Como es la sintaxis para la entrada de manifiesto que declara su " conocimiento de alta dpi ".

Esta pregunta, sobre el superusuario , es cómo ignorar a un desarrollador que siguió adelante y agregó una entrada de manifiesto con alta resolución de ppp, cuando de hecho la aplicación no tiene alta resolución de ppp. Le dijeron a Windows que deshabilitara el escalado, pero en realidad no probaron la aplicación. Existe un software con una entrada de manifiesto "con alta resolución de ppp", y ahora la aplicación no se puede utilizar con "fuentes grandes" (por ejemplo, 120 ppp).

Ian Boyd
fuente
Estoy interesado en esto también. Tenemos una aplicación crítica que no es compatible con dpi y fue diseñada originalmente para una pantalla de 800x600. Windows no lo escala por defecto, y no hace ninguna diferencia si estamos usando XP, Vista o 7. Dado que nuestro personal pasa la mayor parte de su tiempo en esta aplicación de 800x600, insisten en usar sus monitores LCD de 20 " ! a una resolución de 800x600 Esta es una pérdida enorme, y la falta de auto-infligida de píxeles se interpone en su camino cuando tienen que usar MS Office, Internet Explorer 8, etc.
Miles Erickson
1
No fue hasta Windows Vista que Microsoft comenzó a aprovechar Desktop Composition (lo que algunos llaman erróneamente Aero ) para usar la tarjeta gráfica para escalar aplicaciones que no se excluyen específicamente de la escala. No hubo escalado en XP, y no desea escalar en Vista 7. Desea que su aplicación se escriba correctamente. Diríjase a la máquina de un desarrollador, cambie su resolución de nuevo a 1050 y configure el ppp en 168. Todo será el mismo gran zoom en modo tardío, excepto que la aplicación no se comportará correctamente. Dígales que no recibirán comida ni agua hasta que lo arreglen.
Ian Boyd el
No siempre tenemos acceso a los desarrolladores que crean las aplicaciones que utilizamos. Si tan solo lo hiciéramos ...
Cylindric
Formas = formas?
jiggunjer

Respuestas:

5

Hmm Mi sugerencia sería editar el manifiesto y eliminar la declaración incorrecta. ¡Y no te olvides de molestar al desarrollador al respecto como puedas!

Editar: Tenga en cuenta que debería ser posible simplemente colocar el manifiesto al lado del ejecutable, por ejemplo foo.exe, para colocar el manifiesto foo.exe.manifest. Consulte el artículo de MSDN (consulte la sección "Sintaxis del nombre de archivo").

SamB
fuente
Supongo que este es el único camino a seguir. En el lado negativo: invalida la firma digital de la aplicación.
Ian Boyd el
@ Ian: parece que no tienes que poner el manifiesto en un recurso.
SamB
3
Solía ​​ser que un .manifestarchivo tenía prioridad sobre el manifiesto dentro del ejecutable. Hoy, cualquier manifiesto integrado en el ejecutable anula cualquier .manifestarchivo externo . No recuerdo qué paquete de servicio de XP lo cambió, creo que fue SP2.
Ian Boyd
8

Acabo de lanzar una DLL que engancha y redirige las llamadas a SetProcessDPIAware. Para aquellas aplicaciones que deshabilitan el escalado de DPI a través del código, esta es una solución rápida y fácil (en comparación con el parche binario).

DPIMangler: publicación de blog , código fuente .

Jorge
fuente
6

Todavía puede editar el manifiesto, solo tendrá que editarlo en el archivo .EXE. Busque un editor de recursos que tenga soporte de manifiesto. Un ejemplo con soporte rudimentario es XN Resource Editor.) Simplemente busque y elimine la línea que menciona HIGHDPIAWARE y guarde el ejecutable.

¡Sin embargo, asegúrese de hacer una copia del ejecutable antes de editarlo!

trlyly
fuente
"En el lado negativo: invalida la firma digital de la aplicación".
Ian Boyd
0

Me pregunto si ResizeEnable es lo que estás buscando.

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

James T
fuente
No, las ventanas ya son redimensionables. El problema es cuando el compositor compone la ventana para mostrarla. En este momento no está haciendo nada especial, ya que la aplicación dice que no necesita ser escalado. Pero, de hecho, la ventana no necesita ser reducido.
Ian Boyd