none
Powershell.exe und Anzeigeskalierung (dpi) RRS feed

  • Frage

  • Hallo,

    bei Benutzeranmeldung lasse ich ein Skript ausführen, welches die Bildschirmauflösung erkennt:

     

      [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

      $Hauptbildschirmgröße = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize

      $Breite = $Hauptbildschirmgröße.Width

      $Höhe   = $Hauptbildschirmgröße.Height

      [System.Windows.Forms.MessageBox]::Show(„$Breite und $Höhe",“SystemInformation“,0)

     

    Das funktioniert einwandfrei, wenn die Anzeigeskalierung bei 100 % steht.

     

    Starte ich allerdings z.B. von einem Rechner mit einer Auflösung von 3840x2160 und einer Skalierung von 225 %, dann zeigt mir obiges Skript ausgeführt mit:

    PowerShell.exe: 1707 x 960

    PowerShell_ISE.exe: 3840 x 2160

    oder bei 150 %:

    PowerShell.exe: 2560 x 1440

    PowerShell_ISE.exe: 3840 x 2160

     

    Die Messagebox aus PowerShell.exe sieht matschig aus und zeigt die falsche Auflösung. PowerShell_ISE.exe scheint auf die Skalierung zu reagieren und zeigt die richtige Auflösung.

     

    Meine Idee war, das Skript einfach bei Benutzeranmeldung automatisch in PowerShell_ISE.exe zu starten, aber das ist mir nicht gelungen. Den Skalierungsfaktor zu ermitteln, scheint kompliziert zu sein, denn die Umsetzung unterscheidet sich von Windows 7 bis 10.

    Ich freue mich über jeden Tipp.

     

    Gruß, Eric

    • Bearbeitet TwinCam24V Dienstag, 27. Dezember 2016 17:05
    Dienstag, 27. Dezember 2016 17:04

Antworten

  • Hmmm ... wenn ich mich nicht irre, kam das mit PS Version 3.0 und vermutlich hast Du es schon probiert. Ich kann jedenfalls mit Get-DisplayResolution wenigstens die aktuelle Auflösung abfragen - auch in einer RDP-Session. Was möchtest Du eigentlich erreichen? Also was ist das "Endziel"?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 2. Januar 2017 08:59

Alle Antworten

  • Ich kann das leider nicht nachvollziehen - ich habe nur ein altmodisches Laptop mit Full-HD und ohne Skalierung oder so, aber hast Du mal es mal mit den WMI oder CIM cmdlets versucht?

    z.B. liefert 

    Get-CimInstance -ClassName CIM_VideoController

    schon eine Menge an Informationen, die vielleicht hilfreich sein könnten.

    Oder vielleicht bringt ja eine der WMI-Klassen das Gewünschte, die Du mit folgenden Befehlen ermitteln kannst:

    Get-CimClass -ClassName *video*
    Get-CimClass -ClassName *display*
    Get-CimClass -ClassName *monitor*
    Get-CimClass -ClassName *resolution*


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 27. Dezember 2016 17:38
  • Danke für den Tipp. Habe folgende Klassen gefunden und probiert:

    Get-CimInstance -ClassName Win32_VideoConfiguration
    
    Get-CimInstance -ClassName Win32_DisplayControllerConfiguration
    
    Get-CimInstance -ClassName CIM_VideoControllerResolution
    
    Get-CimInstance -ClassName CIM_MonitorResolution
    
    Get-CimInstance -ClassName CIM_FlatPanel
    
    Get-CimInstance -ClassName Win32_VideoController
    
    Get-CimInstance -ClassName CIM_PCVideoController
    
    Get-CimInstance -ClassName CIM_VideoController 

    Wenn ich es auf der lokalen Maschine ausführe, liefert z.B. CIM_VideoController die richtige Auflösung von 3840 x 2160. In Remotedesktopsitzungen, auf die es mir ankommt, liefern die aber alle nur 1024 x 768.

    Es scheint gar nicht so einfach zu sein, in einer Remotedesktopsitzung mit dpi-Skalierung die tatsächliche Auflösung zu ermitteln. In der Systemsteuerung unter Anzeige wird sie richtig angezeigt:

    Anzeige: 1. Unbekannter Monitor mit RDPUDD Chained DD
    Auflösung: 3840 x 2160

    (Kann leider kein Bild einfügen)

    Donnerstag, 29. Dezember 2016 14:11
  • Hmmm ... wenn ich mich nicht irre, kam das mit PS Version 3.0 und vermutlich hast Du es schon probiert. Ich kann jedenfalls mit Get-DisplayResolution wenigstens die aktuelle Auflösung abfragen - auch in einer RDP-Session. Was möchtest Du eigentlich erreichen? Also was ist das "Endziel"?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 2. Januar 2017 08:59
  • Meine Idee war, das Skript einfach bei Benutzeranmeldung automatisch in PowerShell_ISE.exe zu starten, aber .....

    Was mir noch eingefallen ist: Es ist nicht möglich ein Script automatisch in der ISE zu starten. Du kannst es per Kommandozeile in der ISE laden, aber nicht ausführen. Das geht nur in der normalen Konsole.

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 2. Januar 2017 09:14
  • Endziel der Sache war, das Desktophintergrundbild abhängig von der Auflösung und bestenfalls abhängig von den dpi beim Login des Benutzers zu setzen und das auch in remote Sitzungen.

    Get-DisplayResolution scheint nur bei Serverversionen verfügbar zu sein. Auf den Einzelplatzrechnern mit Windows 7 oder 10 funktioniert das leider nicht.

    Mit dieser Umgehungslösung habe ich die Aufgabenstellung dann gelöst:

    https://powershell.org/forums/topic/how-to-get-screen-resolution-with-dpi-scaling-in-a-remote-desktop-session/

    Nicht schön, aber funktioniert ;)

    Montag, 24. April 2017 17:59