Wie erzwinge ich eine Skalierung mit hoher Auflösung

15665
Ian Boyd

Wie erzwinge ich, dass eine Anwendung mit hoher Auflösung skaliert wird?

  • Stellen Sie sich vor, es gibt eine Anwendung, die von den Entwicklern als mit hoher Auflösung erkannt wurde, wenn dies nicht der Fall ist. Wie kann ich die dpi-Skalierung erzwingen?

  • Stellen Sie sich vor, es gibt eine Anwendung, dass Microsoft die HighDpiAwareKompatibilitätsunterlage " " angewendet hat, wenn die Anwendung es wirklich nicht ist. Wie kann ich die dpi-Skalierung erzwingen?

Wie kann ich Windows dazu zwingen, die dpi-Skalierung auf eine Anwendung anzuwenden?


Bearbeiten: Was ist eine Skalierung mit hoher Auflösung?

Nicht alle Benutzer verwenden Windows mit 96 dpi. Nicht jeder Button soll 75x23 Pixel groß sein, nicht jede Toolbar ist 25pixel hoch und nicht jeder Baumansatz 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 so gut wie keine Entwickler ihre Arbeit erledigen, indem sie Einstellungen mit hoher Auflösung gut handhaben. Im besten Fall bleibt alles "gleich groß", was bedeutet, dass jeder winzig erscheint . Im schlimmsten Fall werden Formulare falsch angeordnet, wobei Text abgeschnitten wird und Steuerelemente nicht sichtbar sind.

Beginnend mit Windows Vista und der Nutzung der Möglichkeiten von Desktop Composition gab Microsoft auf, dass Entwickler ihre Arbeit erledigen mussten, und lügen jetzt zur Anwendung. Sie teilen Apps mit, dass der Benutzer mit 96 dpi läuft. Windows verwendet dann die Grafikkarte und Desktop Composition, um die Formulare zu vergrößern.

Pro: Der Inhalt des Formulars hat eine schöne lesbare Größe.
Con: alles wird etwas unscharf sein.

Diese "High-dpi-Skalierung" -Funktion funktioniert nur im Ermessen des Benutzers und erfordert Folgendes:

  • Windows Vista oder neuer
  • Desktop Composition muss aktiviert sein
  • Benutzer deaktivieren "Windows XP-Stilskalierung verwenden"
  • Der Benutzer kann die Skalierung für Ihre Anwendung nicht deaktivieren

Als Entwickler können Sie die Skalierung mit hoher Auflösung deaktivieren. Wenn Sie sich die Mühe gemacht haben, Ihre Anwendung richtig zu schreiben, und Sie wissen, dass Sie mit hoher Auflösung richtig umgehen. Sie lehnen diese Skalierung ab, indem Sie Ihrer ausführbaren Datei einen Manifesteintrag hinzufügen, der Sie als " hoch-dpi-bekannt " bezeichnet.

Das Thema, wie Sie Ihre Anwendung an die Präferenzen des Benutzers anpassen (einschließlich Schriftart, Schriftgröße und dpi-Einstellung), ist eine Frage für stack overflow. Wie auch die Syntax für den Manifesteintrag, der Ihre " Aufmerksamkeit bei hoher Auflösung " deklariert .

Diese Frage betrifft Superbenutzer, wie ein Entwickler ignoriert wird, der vorgegangen ist und einen Manifesteintrag mit hoher Auflösung hinzugefügt hat, obwohl die Anwendung in der Tat nicht mit hoher Auflösung arbeitet. Sie sagten Windows, die Skalierung zu deaktivieren, aber sie haben die Anwendung nicht getestet. Es gibt Software mit einem Manifesteintrag mit "hoher dpi-Erkennung", und jetzt ist die Anwendung unter "großen Schriftarten" (z. B. 120 dpi) unbrauchbar.

26
Das interessiert mich auch. Wir haben eine kritische Anwendung, die nicht für dpi geeignet ist und ursprünglich für einen 800x600-Bildschirm entwickelt wurde. Windows skaliert es nicht standardmäßig und es macht keinen Unterschied, ob wir XP, Vista oder 7 verwenden. Da unsere Mitarbeiter die meiste Zeit in dieser 800 x 600-App verbringen, bestehen sie auf der Verwendung ihrer 20-Zoll-LCD-Monitore bei einer Auflösung von 800 x 600! Dies ist eine enorme Verschwendung, und das selbstverschuldete Pixelmangel behindert sie, wenn sie MS Office, IE8 usw. verwenden müssen. Miles Erickson vor 14 Jahren 0
Erst mit Windows Vista begann Microsoft, Desktop Composition (was manche irrtümlicherweise Aero ** nennen) zu nutzen, um die Grafikkarte zu verwenden, um Anwendungen zu skalieren, die die Skalierung nicht ausdrücklich ablehnen. Es gab keine Skalierung in XP, und Sie möchten keine Skalierung in Vista 7. Sie möchten, dass Ihre Anwendung ordnungsgemäß geschrieben wird. Gehen Sie zum Rechner eines Entwicklers und ändern Sie die Auflösung wieder auf 1050, und setzen Sie die dpi auf 168. Im Tard-Modus wird alles im großen Maßstab vergrößert, außer dass sich die App nicht richtig verhält. Sagen Sie ihnen, dass sie keine Nahrung oder Wasser bekommen, bis es behoben ist. Ian Boyd vor 14 Jahren 1
Wir haben nicht immer Zugriff auf die Entwickler, die die von uns verwendeten Apps erstellen. Wenn wir nur ... Cylindric vor 13 Jahren 0
Formen = Formen? jiggunjer vor 6 Jahren 0

4 Antworten auf die Frage

8
George

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

DPIMangler: Blogbeitrag, Quellcode .

6
trlkly

You can still edit the manifest, you'll just have to edit it in the .EXE file itself. Look for a resource editor that has manifest support. An example with rudimentary support is XN Resource Editor.) Just find and delete the line that mentions HIGHDPIAWARE and save the executable.

Be sure to make a copy of the executable before you edit it, though!

"Nachteil: Die digitale Signatur der Anwendung wird ungültig." Ian Boyd vor 11 Jahren 0
4
SamB

Hmm. My suggestion would be to edit the manifest and remove the incorrect declaration. And don't forget to bug the developer about it however you can!

Edit: Note that it should be possible to simply place the manifest next to the executable, e.g. for foo.exe, you would place the manifest in foo.exe.manifest. See MSDN article (look in the section called "File Name Syntax").

Ich gehe davon aus, dass dies der einzige Weg ist. Nachteil: Die digitale Signatur der Anwendung wird ungültig. Ian Boyd vor 13 Jahren 0
@Ian: Es sieht so aus, als hätten Sie * nicht * das Manifest in eine Ressource eingefügt. SamB vor 13 Jahren 0
Früher hatte eine .manifest-Datei Vorrang vor dem Manifest in der ausführbaren Datei. Heute überschreibt jedes in der ausführbaren Datei enthaltene Manifest alle externen ".manifest" -Dateien. Ich kann mich nicht erinnern, welches Service Pack von XP es geändert hat - ich glaube, es war SP2. Ian Boyd vor 13 Jahren 3
0
James T

I wonder if ResizeEnable is what your looking for?

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

Nein, die Fenster sind bereits in der Größe veränderbar. Das Problem ist, wenn der Compositor das Fenster zur Anzeige zusammenstellt. Im Moment macht es nichts Besonderes, da die Anwendung sagt, dass es nicht skaliert werden muss. Tatsächlich muss das Fenster * jedoch skaliert werden. Ian Boyd vor 13 Jahren 0