High DPI Probleme beheben (Surface Pro 4 etc.)

High DPI Probleme beheben (Surface Pro 4 etc.)

Wer sich in letzter Zeit ein Windows-10-Gerät mit hoher Pixeldichte (also hoher Auflösung auf geringer Bildschirmgröße) gekauft hat, der wird das Problem kennen: einige Anwendungen sind darauf quasi unbedienbar! Der Grund ist, dass sie auf diesen High-DPI-Displays nicht vernünftig mitskalieren, was sich in viel zu kleinen Dialogen und Schriftgrößen bemerkbar macht. Nehmen wir z.B. paint.net:

paint.net High DPI - maaaeh

Dialoge sind nur mit der Bildschirmlupe lesbar, da die Schriftgröße so extrem klein ist. Bei mir ist dies auf meinem neuen Surface Pro 4 der Fall, das eine Auflösung von 2736×1824 px auf 12,3″ Bildschirmdiagonale besitzt. Doch auch auf anderen High-DPI-Geräten ist dieses Problem identisch. Bei einem solchen Darstellungsverhalten nützt dann auch das schärfste Display nichts…

Dabei gibt es durchaus auch Anwendungen, die wunderbar skalieren: Visual Studio 2015 zum Beispiel. Doch als Endanwender will man natürlich, dass alles reibungsfrei funktioniert und derzeit ist das einfach noch ein großes Dilemma… auch für Entwickler, wenn man sich die „Skalierung“ des SQL Server Management Studio 2014 (SSMS) anschaut:

SSMS High DPI - maaaeh

Auch hier ist der Dialog so klein, dass er sich ohne Bildschirmlupe nicht bedienen lässt. Windows 10 ist zwar bereits um Welten besser geworden, was die Skalierung von Anwendungen anbelangt, es gibt jedoch noch jede Menge Probleme mit Anwendungen, die nicht auf High DPI ausgelegt sind. Mit Windows-Standardeinstellungen ist das Skalierungsproblem bei diesen Anwendungen leider nicht lösbar. Weder die Windows-weite Skalierungsstufe noch die Aktivierung/Deaktivierung der Skalierung bei hohem DPI-Wert für die Anwendung bringen einen Erfolg.

Zum Glück ist das Problem lösbar – wenn es auch zwei manuelle Schritte erfordert! Wie das geht, steht hier. Technische Grundlage dafür ist das sogenannte „Bitmap Scaling“, welches Anwendungen pixelweise 1:1 in ihrem vorgefertigten Layout hochskaliert, anstatt zu versuchen die grafischen Komponenten einzeln zu skalieren (DPI Scaling).

Um für eine Anwendung das Bitmap Scaling zu aktivieren, sind folgende Schritte erforderlich:

  1. Registry anpassen (einmalig):
    Unter dem Bezeichner HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide ist ein DWORD-Schlüssel PreferExternalManifest mit dem Wert 1 anzulegen:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
    "PreferExternalManifest"=dword:00000001
  2. Manifest-Datei anlegen (pro Anwendung):
    Für die jeweilige Anwendung ist im Installationsverzeichnis parallel zur <Anwendung>.exe eine Datei <Anwendung>.exe.manifest mit folgendem Inhalt anzulegen, wodurch das DPI Scaling deaktiviert wird (was wiederum das Bitmap Scaling aktiviert):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    
    <dependency>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
        </assemblyIdentity>
      </dependentAssembly>
    </dependency>
    
    <dependency>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
        </assemblyIdentity>
      </dependentAssembly>
    </dependency>
    
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
      </security>
    </trustInfo>
    
    <asmv3:application>
      <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
        <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
      </asmv3:windowsSettings>
    </asmv3:application>
    
    </assembly>

Das Ergebnis für paint.net und SSMS? Ordentlich skalierte Anwendungen mit lesbaren Dialogen:

paint.net High DPI - fixed

SSMS High DPI - fixed

 

Ich bin freiberuflicher Senior C#/.NET Softwareentwickler im Raum Frankfurt/Main. Mit Leidenschaft für Software-Design, Clean Code und moderne Technologien in den Bereichen Web, Win und Mobile.

13 Kommentare

  1. Pierre Louis 2 Jahren vor

    Funktioniert leider nicht mit LOGO Soft Comfort V8.0 auf meinem Surface Pro 4 🙁

    • Autor

      Ja, leider gibt es Anwendungen, die das nicht erlauben. WISO Steuer-Sparbuch ist auch so ein Kandidat. Hier kann man evtl. in den Anwendungs-Optionen noch die Skalierung einstellen.

  2. Carsten Zwenzner 1 Jahr vor

    Vielen Dank, der Binreader und VLC funktionieren einwandfrei. War schon am überlegen das SP4 wieder zurück zu schicken.

  3. Karsten 1 Jahr vor

    Hallo, klappt recht gut, vielen Dank (MS Surface Pro 4):

    IBM Notes interessiert es leider nicht, gerade da ist es aber für unsere Nutzer das größte Problem. Jemand hier eine Idee?

  4. Barton 1 Jahr vor

    danke für den Post, allerdings gibt es in meiner Registry keinen „Side by Side“ Ordner. Irgendwelche Idee? 🙁

    • Mark 1 Jahr vor

      Hm, evtl. den „SideBySide“-Key manuell erstellen? Einen Versuch ist es wert…
      Welche Windows-Version hast du denn (Win 10 Home, Pro, …)?

      • Barton 1 Jahr vor

        Windows 10 home, ich probiere heute Abend mal den key manuell einzustellen.

  5. Alfred 1 Jahr vor

    Hallo,
    funktioniert leider mit Photoshop Elements 9 unter Win 10 Pro nicht (Surface Pro 4) … was mach ich falsch ?? Anwendung wird mit Fehler gestartet, wenn ich o.st. Anleitung befolge.
    lg
    A

  6. A.Schirmer 1 Jahr vor

    Hallo, aktuell ist das Anniversery Update installiert (Vorher leider nicht getestet) Surface Pro 4 und es kommt die Fehlermeldung:

    Der Datenträger einer Datei wurde extern so geändert, dass die geöffnete Datei nicht mehr gültig ist. (Kommt nur, wenn die manifest Datei im Installationspfad liegt)
    Eine Idee wie man das lösen kann klingt ja prinzipiell nur nach einer Sicherheitsfunktion von W10.

    • Sing 9 Monaten vor

      Vor diesem Problem stehen wir auch. Gibt es eine Lösung?

  7. Oil 2 Monaten vor

    Sehr cool! Danke für den Tipp 🙂

Eine Antwort hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*