none
Seltsames Verhalten von AllScreens[] in einer DLL RRS feed

  • Frage

  • Hallo,

    ich habe eine einfache C#-Konsolenanwendung geschrieben, die die Auflösung und den Ort aller angeschlossenen Monitore ausgibt; und das unter Beachtung der eingestellten Skalierungsfaktoren pro Monitor:

    class Program
    {
      static void Main(string[] args)
      {
        foreach (var screen in System.Windows.Forms.Screen.AllScreens)
        {
          Console.WriteLine(screen.DeviceName + " - " + screen.Bounds.Size.Width + "x" + screen.Bounds.Size.Height +" - X=" + screen.Bounds.X + ", Y=" + screen.Bounds.Y);
        }
        Console.ReadKey();
      }

    Das ganze funktioniert einwandfrei. Bei einer nativen Monitorauflösung von 1920x1080 und einem (in den Windows Anzeigeeinstellungen) eingestellten Skalierungsfaktor von 125% gibt mir die Anwendung 1536 x 864 aus, was ja der nativen Auflösung verechnet mit der Skalierung entspricht.

    Nun habe ich den Code in eine .NET Framework DLL gepackt und dabei statt der Konsolenausgabe die Daten in Variablen abgelegt. Das verwunderliche: Obwohl ich auf genau dieselben Eigenschaften zurückgreife, erhalte ich ausschließlich die native Auflösung und keinerlei skalierte Werte. Weiß jemand, warum sich dieselben Funktionen/Eigenschaften in einer DLL komplett anders verhalten? Muss vielleicht ein Fenster offen sein (z.B. die Konsole), damit das ganze funktioniert?

    Danke schon mal!



    • Bearbeitet User95 Samstag, 28. September 2019 11:45
    Samstag, 28. September 2019 11:44

Alle Antworten

  • Hallo User95,

    Welche Version von .NET Framework verwendest Du derzeit? Ab .NET Framework 4.7 müssen für Windows Forms die entsprechenden DPI-Werten kompatibel (DPI aware) eingestellt werden, damit Du bei der Verwendung von Screen.AllScreens in C # die richtigen Werte erhältst. Diese Informationen und ein Codebeispiel stehen im folgenden Thread zur Verfügung:
    C# Screen.AllScreens Bounds and WorkingArea values are Wrong VS2017 VS2019

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 30. September 2019 12:08
    Administrator
  • Hallo Ivan,

    ich nutze in beiden Fällen das .NET Framework 4.5. Das eine ist eine Konsolenanwendung, das andere eine .NET Framework DLL. Aus für mich unerklärbaren Gründen erhalte ich z.B. für

    screen.Bounds.Size.Width

    in beiden Fällen unterschiedliche Werte.

    Montag, 30. September 2019 16:56