Dual Monitor einzeln ausschalten

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Dual Monitor einzeln ausschalten

    Hallo,

    ich suche eine Möglichkeit die angeschlossenen Monitore einzeln abzuschalten per Button. Leider habe ich bisher nur die SendMessage API gefunden. Diese kann aber nur alle angeschlossenen Monitor steuern. Gibt es ein Möglichkeit die Monitore einzeln zu steuern?

    Vielen Dank Steffen

    steffent schrieb:

    Leider habe ich bisher nur die SendMessage API gefunden.
    Was hast Du denn dazu gefunden?
    Was genau soll geschaltet werden? Die Spannung ausschalten geht ja wohl schlecht.
    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!

    VB.NET-Quellcode

    1. <DllImport("user32.dll")> _
    2. Private Shared Function SendMessage(hWnd As Integer, hMsg As Integer, wParam As Integer, lParam As Integer) As Integer
    3. End Function


    und dann einfach den Monitor in Sleep (2)oder Standy(1) Zustand versetzen.

    VB.NET-Quellcode

    1. wMsg = &H112
    2. wPWR = &H170
    3. SendMessage Me.hwnd, wMsg, wPWR, 2


    nur geht das nur mit allen angeschlossenen Geräten. Ich möchte aber gern die Bildschirme unabhängig voneinander schalten.
    Mir ist bewusst, dass folgendes keine perfekte Lösung ist, v.a. keine reine VB.Net-Lösung, aber es gibt im Windows\System32-Verzeichnis die Datei DisplaySwitch, die abhängig vom hinzugefügten Parameter zumindest eine Umstellung schafft - auch wenn ne scheinbar nervige Sicherheitsfrage kommt:
    "DisplaySwitch /internal" => nur Erstmonitor ist an, Zweitmonitor ist aus
    "DisplaySwitch /clone" => 1 = 2, beide an
    "DisplaySwitch /extended" => 1+2 = eine Fläche, beide an
    "DisplaySwitch /external" => nur Zweitmonitor ist an, 1. ist aus

    EDIT: shame on me. Diese Info ist mir natürlich nicht selbst gekommen, sondern hab ich von hier erhalten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    steffent schrieb:

    Ich möchte aber gern die Bildschirme unabhängig voneinander schalten.
    Da musst Du wohl tief in das System eingreifen.
    Das System gibt sich ja viel Mühe, Dir beide / alle Monitore als eine einheitliche Zeichenfläche darzubieten. Wenn Du sie separieren willst, musst Du das unterhalb des Zusammenbaus machen, und da reicht SendMessage() ganz gewiss nicht aus, da musst Du Systemfunktionen aufrufen.
    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!
    Ich sag nur: InterOp, WinAPI, P/Invoke, korrekte Reihenfolge und Typisierung der Unmanaged-Struct-Daten, ...
    Ich hab mal was gebastelt. Codetechnisch bestimmt noch ausbaufähig und vielleicht ne Grundlage für mehr. Wichtig: Dieses Programm schaut erstmal nach verschiedenen Videoadaptern. Das führt dazu, das (mit bestehendem Code) nur solche MultiMonitorSituationen erkannt und behandelt werden können, in denen beide Monitore laufen und kein Duplikat von Monitor 1 auf Monitor 2 auftaucht => Bildschirmerweiterung muss aktiv sein, kein Cloning.
    Spekulatius: Ich könnte mir vorstellen, dass beim Cloning wohl einfach die Daten von VideoAdapter1 an den 2. Monitor weitergereicht werden, während bei "Erweiterung" VideoAdapter 2 aktiviert wird und eigene Daten an Monitor 2 schickt.
    Aufgrund begrenzter heimischer Monitoranzahl konnte ich erstmal nur mit meinem Beamer testen. Damit läuft's.

    Infoquelle: zahlreiche. Neben MSDN und vielen anderen Seiten letztenendes dieser stackoverflow-Thread
    Dateien
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „VaporiZed“ ()