Mehrere Monitore, gesammte Auflösung und "linkster" Punkt

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mehrere Monitore, gesammte Auflösung und "linkster" Punkt

    Hallo,
    wie ermittle ich die Auflösung des Desktops, wenn der Anwender mehr als einen Monitor besitzt?
    Mit:

    VB.NET-Quellcode

    1. Dim desktopSize As Size
    2. desktopSize = System.Windows.Forms.SystemInformation.PrimaryMonitorSize
    3. Dim height As Integer = desktopSize.Height
    4. Dim width As Integer = desktopSize.Width


    Erhalte ich NUR die Auflösung des durch den Beutzer eingestelten Hauptbildschirmes. Doch wie erhalte ich die Komplette auflösung?
    Eine (Not)Möglichkeit wäre ein Controll die size von 999.999 x 999.999 zu geben. Da ein Controll nur maximal so groß sein kann, wie die maximale Bildschirmauflösung. Dadurch könnte man den Korectur Wert auslesen.

    Aber wie erhalte ich den "linksten" Punkt?
    Bei mir zum Beispiel sieht die Annordnung der Bildschirme so aus:

    (1) ist der Hauptbildschirm (2) und (3) die Nebenbildschirme...

    Demnach wäre der Linkste Punkt hier (-1280, 0)

    wäre es so:

    Dann wäre der linkeste Punkt (-1280, -233)

    Wie kann ich diesen Punkt auslesen/errechnen ?

    Vielen Dank schonmal im Voraus :)
    Vielen Dank, mit den Werten kann ich arbeiten.

    Allerdings verwundern mich die Werte noch ein wenig:


    Laut dem Windows Programm sind alle Bildschirme auf Y=0, wieso wird bei DISPLAY2 bei Workarea Y=40 und bei DISPLAY3 bei Bounds und Workarea Y=26 angezeigt?
    @LioLKG Ich hab mir mal ne Funktion gemacht, die das Umrechteck aller Screens ermitelt:

    C#-Quellcode

    1. internal static Rectangle AllScreenArea()
    2. {
    3. Screen[] Scr = Screen.AllScreens;
    4. Rectangle rc = new Rectangle();
    5. foreach (Screen sc in Scr)
    6. {
    7. rc = Rectangle.Union(sc.Bounds, rc);
    8. }
    9. return rc;
    10. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    okay mit

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. MessageBox.Show(AllScreenArea.Width & " x " & AllScreenArea.Height)
    3. End Sub
    4. Private Function AllScreenArea() As Rectangle
    5. Dim Scr As Screen() = Screen.AllScreens
    6. Dim rc As New Rectangle()
    7. For Each sc As Screen In Scr
    8. rc = Rectangle.Union(sc.Bounds, rc)
    9. Next
    10. Return rc
    11. End Function
    Erhalte ich absolut richtige Werte, vielen dank dafür schonma.

    Den "Linksten"-Punkt müsste ich doch durch den kleinsten X und Y Wert erhalten, was mir:

    VB.NET-Quellcode

    1. For Each screen In System.Windows.Forms.Screen.AllScreens
    2. ListBox1.Items.Add(screen.Bounds.ToString())
    3. Next
    liefert?

    Ausgehen von dem Bild von #3 ist das (-1280|0), was ja auch richtig ist... Nur die Frage um sicher zugehen^^

    LioLKG schrieb:

    (-1280|0)
    Aus diesem Rectangle musst Du Dir mit Top und Left Deine Koordinaten rausholen oder einen Point draus erstellen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!