Bildschirm Identifizieren

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Bildschirm Identifizieren

    Hallo Zusammen

    Für eine Anwendung muss ich Bildschirme identifizieren können.

    Wenn man in Windows - wie auf dem folgenden Bild auf Identifizieren klickt, dann werden gross die Monitor-Nummern eingeblendet.




    Diese Zahl möchte ich gerne haben.


    Ich kenne

    VB.NET-Quellcode

    1. Screen.AllScreens(i).xyz

    Doch leider stimmt die Reihenfolge dort nicht mit der Reihenfolge in der Systemsteuerung überein.
    i=0 ist dabei immer der Primäre Bildschirm.
    Danach kommen alle anderen, in scheinbar willkürlicher Reihenfolge.

    Wie komme ich an diese Zahlen ran?
    Ich müsste also wissen, dass z.B. AllScreens(0) der Monitor 4 ist, AllScreens(1) ist Monitor 2, AllScreens(2) ist Monitor 3 und AllScreens(3) ist Monitor 1. (Nur als Beispiel)
    Mit der API Funktion EnumDisplayDevices bekomme ich diese Information auch nicht raus....

    Veronesi

    Veronesi schrieb:

    Wie komme ich an diese Zahlen ran?
    Probier mal die Bildschirmposition (in Pixeln) rauszukriegen, die sollten dann wie auf einer Landkarte angeordnet sein.
    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!

    Veronesi schrieb:

    der Linke Monitor ist nicht zwingend der erste!
    Wohl aber der mit dem kleinsten Left-Wert.
    Das musst Du Dir dann halt iwie Mappen.
    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!
    Hallo RodFromGermany

    Nein, das stimmt eben nicht!
    Ganz links kann auch eine andere Nummer sein!



    @BradApfel
    Ich kann die Monitore nicht einfach anderst anordnen.
    Es geht um 2'500 PC's mit jeweil zwischen 2 und 8 Monitoren pro PC.

    Die Bildschirme sind fest verkabelt und fix eingestellt. (So wie der Benutzer es haben möchte).

    Nun muss ich eben herausfinden, wo Bildschirm 1, 2, 3... ist.
    Code gibt es (noch) keinen, da ich nicht weiss, wie ich an diese Nummern komme. Aber es ist die Projektvorgabe, dass ich diese Nummern brauche.

    Veronesi schrieb:

    Ganz links kann auch eine andere Nummer sein!
    RICHTIG. :thumbsup:
    Du musst nur wissen, dass der Screen mit dem Index 42 der dritte von links und der 4. von oben ist.
    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!
    @Rod
    Jein.
    Mir ist egal, WO der Monitor ist. Ich brauche nur die Nummer, welche Windows ja auch darstellt, wenn man auf Identifizieren klickt. Und dann muss ich die Index-Nummer der Windows-Internen Nummer zuordnen können.
    Du kannst den Screen.DeviceName nutzen um die Monitore zu indentifizieren:

    VB.NET-Quellcode

    1. Dim s() As Screen = Screen.AllScreens
    2. For i = 0 To s.Length - 1
    3. Debug.Print(s(i).DeviceName)
    4. Next

    Bei meinen beiden Monitroren bekomme ich damit:
    \\.\DISPLAY1
    \\.\DISPLAY2
    @Derfuhr
    Stimmt! Habs gerade getestet auch wenn ich die Monitore in der Systemsteuerung Tausche ist (1) immer Display2
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @Lingo
    Vielen Dank.
    Mir ist in dem ganzen Wirrwarr gar nicht aufgefallen, dass immer der ganz linke Monitor das 1 ist!
    Das macht es natürlich viel einfacher. Nun kann ich tatsächlich wie Rod vorgeschlagen hat, mit .Left prüfen, welcher der erste ist!

    Vielen Dank!

    Lingo schrieb:

    Wenn du auf dem Bild die Bildschirme so richtest:
    [2] [1] [3]
    Wird beim klick auf den Button "identify" trotzdem von links nach rechts nummeriert bzw. die Zahl angezeigt.
    [1] [2] [3]

    Kann ich nicht nachvollziehen.
    Meine Monitore sind in der Reihenfolge 3-2-1 angeordnet und auch bei "Identifizieren" und auf dem Bild ist 3 immer ganz links.

    Screens.AllScreens zeigt:
    (0): X=0 Name=DISPLAY1 (rechts, identifiziert als 1)
    (1): X=-1920 Name=DISPLAY3 (mittig, identifiziert als 2)
    (2): X=-3120 Name=DISPLAY4 (links, identifiziert als 3)

    Wenn bei mir etwas mit "Identifizieren" übereinstimmt, dann der Index im Array (+1).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()

    Aber zumindest haben wir mal zwei verschiedene Verhaltensmuster.
    Ich habe jetzt hier keinen 6- oder 8-Monitor-Arbeitsplatz da, aber da gibt's bestimmt noch andere Varianten.

    Falls ich je Zeit finde, kann ich nächste Woche mal ein paar Trading-Arbeitsplätze testen.
    Die sind ja teilweise auch noch übereinander angeordnet.
    Da lässt sich ganz sicher kein Links-rechts-Modus mehr ausmachen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Hmmm, das ist schon etwas doof.
    Es geht übrigens auch um Trader Arbeitsplätze .

    Und viele haben zwei bis drei Reihen übereinander. Und pro Reihe bis zu 4 Bildschirme. Manche davon noch Hochkannt....

    Ich kann nicht immer die Trader stören, deshalb kann ich es manchmal schlecht testen. Die Plätze werden 24h gebraucht....

    Aber wäre cool, wenn jemand die Relation von AllScreens(x) zur Identifikation Nummer von Windows kennt!

    Vielen Dank!