Wie bekomme ich die DPI-Skalierung für alle Bildschirme?

8

Ich muss die DPI-Skalierung abrufen, die über die Systemsteuerung & gt; Zeigen Sie für jeden mit dem Computer verbundenen Bildschirm sogar diejenigen an, für die kein WPF-Fenster geöffnet ist. Ich habe eine Reihe von Möglichkeiten gesehen, um DPI zu erhalten (zum Beispiel Ссылка ), aber diese scheinen abhängig von Graphics.FromHwnd(IntPtr.Zero) oder PresentationSource.FromVisual(visual).CompositionTarget.TransformToDevice zu sein.

Gibt es eine Möglichkeit, die DPI-Einstellungen für jeden einzelnen Bildschirm zu erhalten?

Hintergrund - Ich erstelle einen Layout-Konfigurationseditor, damit der Benutzer seine Konfiguration vor dem Start einrichten kann. Dazu zeichne ich jeden Bildschirm relativ zueinander. Für eine Konfiguration verwenden wir ein 4K-Display, das einen größeren DPI-Skalensatz als der Standard hat. Es wird viel kleiner gezeichnet, als es physikalisch in Bezug auf die anderen Bildschirme angezeigt wird, da es die gleiche Auflösung wie die anderen Bildschirme anzeigt.

    
Sarah 03.04.2015, 19:25
quelle

1 Antwort

11

Ich habe einen Weg gefunden, um die dpi mit dem WinAPI zu bekommen. Da zuerst Referenzen auf System.Drawing und System.Windows.Forms benötigt werden. Es ist möglich, das Monitorhandle mit der WinAPI von einem Punkt auf dem Anzeigebereich zu erhalten - die Klasse Screen kann uns diese Punkte geben. Dann gibt die Funktion GetDpiForMonitor die dpi des angegebenen Monitors zurück.

%Vor%

Es gibt drei Arten der Skalierung: Sie finden eine Beschreibung im MSDN .

Ich habe es schnell mit einer neuen WPF-Anwendung getestet:

%Vor%

Ich hoffe, es hilft!

    
Koopakiller 05.04.2015, 23:58
quelle

Tags und Links