Wie erzwinge ich eine hochauflösende Skalierung?

27

Wie kann ich die Skalierung einer Anwendung mit hoher Auflösung erzwingen?

  • Stellen Sie sich vor, es gibt eine Anwendung, deren Entwickler sie als hochauflösend erkannt haben, obwohl dies nicht der Fall ist. Wie kann ich die dpi-Skalierung erzwingen?

  • Stellen Sie sich vor, es gäbe eine Anwendung, bei der Microsoft " HighDpiAware" das Kompatibilitäts-Shim angewendet hat, obwohl die Anwendung dies wirklich nicht ist. Wie kann ich die dpi-Skalierung erzwingen?

Wie kann ich Windows zwingen, eine Anwendung mit dpi-Skalierung zu versehen?


Bearbeiten: Was ist eine hochauflösende Skalierung?

Nicht alle Benutzer verwenden Windows mit 96 dpi. Nicht jede Schaltfläche soll 75x23 Pixel groß sein, nicht jede Symbolleiste ist 25 Pixel hoch und nicht jede Baumansicht-Glyphe ist 16x16. Wenn der Benutzer eine andere dpi-Einstellung für Windows gewählt hat, müssen Sie alles entsprechend skalieren.

Das Problem ist, dass fast keine Entwickler ihre Arbeit tun, indem sie die Einstellungen für hohe Auflösung gut handhaben. Bestenfalls bleibt alles "gleich groß", was bedeutet, dass jeder winzig klein erscheint . Im schlimmsten Fall sind die Formulare falsch angeordnet, der Text abgeschnitten und die Steuerelemente nicht sichtbar.

Beginnend mit Windows Vista und der Nutzung der Leistungsfähigkeit von Desktop Composition gab Microsoft die Entwickler auf, die ihre Arbeit erledigten, und lag nun an der Anwendung. Sie teilen Apps mit, dass der Benutzer mit 96 dpi arbeitet. Windows verwendet dann die Grafikkarte und Desktop Composition, um die Formulare zu skalieren.

Pro: Der Inhalt des Formulars wird eine gut lesbare Größe haben.
Con: Alles wird leicht verschwommen sein.

Diese "High-dpi-Skalierungsfunktion" steht nur dem Benutzer zur Verfügung und erfordert:

  • Windows Vista oder neuer
  • Desktop Composition muss aktiviert sein
  • der Benutzer zu deaktivieren "Windows XP-Stil Skalierung verwenden"
  • den Benutzer, die Skalierung für Ihre Anwendung nicht zu deaktivieren

Als Entwickler können Sie die hochauflösende Skalierung deaktivieren. Wenn Sie sich die Mühe gemacht haben, Ihre Anwendung richtig zu schreiben, und Sie wissen, dass Sie mit High-dpi richtig umgehen. Sie deaktivieren diese Skalierung, indem Sie Ihrer ausführbaren Datei einen Manifest-Eintrag hinzufügen und erklären, dass Sie " High-dpi-fähig " sind.

Das Thema, wie Ihre Anwendung die Einstellungen des Benutzers (einschließlich Schriftart, Schriftgröße und dpi-Einstellung) berücksichtigen soll, ist eine Frage für stack overflow. Wie ist die Syntax für den Manifest-Eintrag, der Ihr " High-dpi-Bewusstsein " ausdrückt .

Diese Frage, auf Super-User , ist , wie man ignoriert einen Entwickler, den voranging und hatte einen High-dpi bewusst manifestieren Eintrag, wenn in der Tat die Anwendung ist nicht High-dpi bewusst. Sie forderten Windows auf, die Skalierung zu deaktivieren, testeten die Anwendung jedoch nicht. Es gibt Software mit einem Manifest-Eintrag, der "High-dpi-fähig" ist, und jetzt ist die Anwendung unter "großen Schriftarten" (z. B. 120 dpi) unbrauchbar.

Ian Boyd
quelle
Das interessiert mich auch. Wir haben eine kritische Anwendung, die nicht dpi-fähig ist und ursprünglich für einen 800x600-Bildschirm entwickelt wurde. Windows skaliert es standardmäßig nicht und es spielt keine Rolle, ob wir XP, Vista oder 7 verwenden. Da unsere Mitarbeiter die meiste Zeit in dieser 800 x 600-App verbringen, bestehen sie darauf, ihre 20-Zoll-LCD-Monitore zu verwenden Bei einer Auflösung von 800x600! Dies ist eine enorme Verschwendung, und der selbst zugefügte Mangel an Pixeln behindert sie, wenn sie MS Office, IE8 usw. verwenden müssen.
Miles Erickson
1
Erst unter Windows Vista nutzte Microsoft Desktop Composition (was fälschlicherweise als Aero bezeichnet wird ), um mithilfe der Grafikkarte Anwendungen zu skalieren, bei denen die Skalierung nicht ausdrücklich deaktiviert wurde. In XP gab es keine Skalierung, und Sie möchten keine Skalierung in Vista 7. Sie möchten, dass Ihre Anwendung ordnungsgemäß geschrieben wird. Gehen Sie zum Computer eines Entwicklers, ändern Sie dessen Auflösung zurück auf 1050 und stellen Sie die Auflösung auf 168 ein. Im Tard-Modus ist alles gleich groß, außer die App verhält sich nicht richtig. Sagen Sie ihnen, dass sie weder Essen noch Wasser bekommen, bis es repariert ist.
Ian Boyd
Wir haben nicht immer Zugriff auf die Entwickler, die die von uns verwendeten Apps erstellen. Wenn wir nur ...
Cylindric
Formen = Formen?
Jiggunjer

Antworten:

5

Hmm. Mein Vorschlag wäre, das Manifest zu bearbeiten und die falsche Deklaration zu entfernen. Und vergessen Sie nicht, den Entwickler darüber zu nerven, wie auch immer Sie können!

Bearbeiten: Beachten Sie, dass es möglich sein sollte, das Manifest einfach neben der ausführbaren Datei zu platzieren, z. B. weil foo.exeSie das Manifest in platzieren würden foo.exe.manifest. Siehe MSDN-Artikel (siehe Abschnitt "Syntax des Dateinamens").

SamB
quelle
Ich gehe davon aus, dass dies der einzige Weg ist. Nachteil: Die digitale Signatur der Anwendung wird ungültig.
Ian Boyd
@Ian: es sieht aus wie Sie nicht haben das Manifest in einer Ressource gestellt.
SamB
3
Früher hatte eine .manifestDatei Vorrang vor dem Manifest in der ausführbaren Datei. Heutzutage überschreibt jedes in die ausführbare .manifestDatei integrierte Manifest jede externe Datei. Ich erinnere mich nicht, welches Service Pack von XP es geändert hat - ich denke, es war SP2.
Ian Boyd
8

Ich habe gerade eine DLL veröffentlicht, die Aufrufe an SetProcessDPIAware einbindet und umleitet. Für Anwendungen, die die DPI-Skalierung durch Code deaktivieren, ist dies eine schnelle und einfache Lösung (im Vergleich zum binären Patchen).

DPIMangler: Blog Post , Quellcode .

George
quelle
6

Sie können das Manifest weiterhin bearbeiten. Sie müssen es lediglich in der EXE-Datei selbst bearbeiten. Suchen Sie nach einem Ressourceneditor, der offensichtliche Unterstützung bietet. Ein Beispiel mit rudimentärer Unterstützung ist XN Resource Editor.) Suchen und löschen Sie einfach die Zeile, in der HIGHDPIAWARE erwähnt wird, und speichern Sie die ausführbare Datei.

Stellen Sie jedoch sicher, dass Sie eine Kopie der ausführbaren Datei erstellen, bevor Sie sie bearbeiten!

trlkly
quelle
"Der Nachteil ist, dass die digitale Signatur der Anwendung ungültig wird."
Ian Boyd
0

Ich frage mich, ob ResizeEnable das ist, wonach Sie suchen?

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

James T
quelle
Nein, die Fenster sind bereits skalierbar. Das Problem ist, wenn der Compositor das Fenster für die Anzeige zusammensetzt. Im Moment macht es nichts Besonderes, da die Anwendung sagte, dass es nicht skaliert werden muss. Tatsächlich muss das Fenster jedoch skaliert werden.
Ian Boyd