Laden...

Multimonitor: Monitore per Programm deaktivieren

Erstellt von Asmodis vor 10 Jahren Letzter Beitrag vor 7 Jahren 7.547 Views
Hinweis von herbivore vor 10 Jahren

Siehe auch ChangeDisplaySettingsEx - Aktivierung/Deaktivierung weiterer Monitor

A
Asmodis Themenstarter:in
3 Beiträge seit 2013
vor 10 Jahren
Multimonitor: Monitore per Programm deaktivieren

Hi,
ich würde gerne mit einem Programm zwei von drei Bildschirmen abschalten (wie über Anpassen -> Bildschirmauflösung -> und dann in den Bildschirmeinstellungen "Bildschirm trennen"). Nach Möglichkeit sollte der aktuelle Status irgendwie noch gespeichert werden können, sodass dieser wiederhergestellt werden kann. In Zweiten Bildschirm / Erweiterten Desktop deaktivieren gibt es ja eigentlich auch schon einen Ansatz dazu, allerdings kommt der Thread dann leider nicht wirklich zu einer Lösung meines Problems: SendMessage funktioniert für meine Zwecke nicht wirklich, da die Bildschirme wirklich getrennt werden und nicht bei einer Mausbewegung wieder aktiviert werden sollen(*). Lösungen über Kommandozeilen für den Grafiktreiber werden wohl auch eher nicht funktionieren, da der dritte Monitor über die OnBoard-Karte läuft, Nvidia-Karten packen ja irgendwie nicht mehr als zwei Monitore gleichzeitig 😛.

Ich hoffe, ihr habt eine Idee zu diesem Problem, Ansätze würden mir schon sehr helfen 🙂

(*) Hintergrund: ich benutze hier drei Bildschirme, was aber bei diversen Spielen, in denen man per Maus am Bildschirmrand über die Karte scrollt eher schlecht ist - die Maus wandert dann "aus dem Spiel heraus" auf den nächsten Bildschirm

MfG,
Asmodis

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Asmodis,

und Treffer wie Turn on/off monitor und Complete Guide on How To Turn A Monitor On/Off/Standby, die man bei einer Google-Suche nach Turn off monitor via code (C#) bekommt, helfen alle nichts?

herbivore

A
Asmodis Themenstarter:in
3 Beiträge seit 2013
vor 10 Jahren

Hallo herbivore,

vielen Dank schonmal für die Antwort - die beiden Seiten habe ich tatsächlich auch vorher schon gefunden, Nr. 2 zum Beispiel wird aber schon in Nr. 1 erwähnt, wobei ein Benutzer schreibt, dass diese Lösung nicht in Windows 7 funktionieren soll. Die Alternative Turn your monitor off in C#, die genannt wird, muss ich aber irgendwie überlesen haben - das werde ich dann mal ausprobieren. Ich melde mich wieder, wenn ich Ergebnisse habe 😃

C
168 Beiträge seit 2010
vor 10 Jahren

Hallo Asmodis,

hatte das selbe Problem und bin dann nach ein bisschen suchen auch auf SendMessage gestoßen welches auch in Turn your monitor off in c# beschrieben wird

Das mit der Maus kannst du soweit ich weiß nicht verhindern da man durch Windows nicht soviel Kontrolle über die Bildschirme hat, ich hab zu mindestens noch kein Programm gesehen was die Bildschirme Komplett ausschaltet.

Mehr als Stromsparmodus ist nicht drin würde ich sagen, und das Bedeutet grundsätzlich auch das bei einer Mausbewegung automatisch die Bildschirme wieder an gehen. Du kannst natürlich auf das MouseMove event reagieren und die Bildschirme wieder in Stromsparmodus versetzen so mach ich es zu mindestens momentan, da ich keine andere Lösung gefunden habe.

Ich würde mich natürlich freuen wenn du ne bessere Lösung findest, aber mir hat es damals gereicht. Viel glück 😃

Ich hab gelesen das man es bei machen Rechnern im Bios deaktivieren kann, dass eine Mausbewegung die Bildschirme wieder aufweckt.

Gruß Crone

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

16.842 Beiträge seit 2008
vor 10 Jahren

Man könnte spezifischer werden und den Monitor im Gerätemanager deaktivieren bzw. über den Nvidia bzw AMD/ATI Treiber gehen.

C
168 Beiträge seit 2010
vor 10 Jahren

genau die Idee mit dem Gerätemanager ist mir auch grade eingefallen, aber ich konnte dort nur etwas finden um den PC aus den Sleepmode zu wecken.

Real programmers don't comment their code - it was hard to write, it should be hard to understand.

16.842 Beiträge seit 2008
vor 10 Jahren

Win32 API function to programmatically enable/disable device
Hab jetzt nicht alles angeschaut aber ist sicherlich ein Blick wert; auch wenn die Funktionen sich evtl. mit Windows 8 geändert haben.
Das Prinzip mit den Guids ist sicherlich aber ein vielversprechender Weg.

To verify that you can't disable, go into Device Manager and right-click on your mouse driver. If you see a disable option, you can use SetupDi to disable it. If no disable option, you're out of luck... welcome to IOCTL-land!

Alle meine Monitore erfüllen das Kriterium (selbst der angeschlossene TV).

U
1.688 Beiträge seit 2007
vor 10 Jahren

Noch ein Stichwort: EnumDisplayDevices

Um dies in C# verwenden zu können, musst Du die API Funktion(en) über P/Invoke importieren.

Von dieser Funktion ausgehend, wirst Du sicherlich über "enable", "disable", "monitor", "display" u.ä. weitere Informationen finden können.

A
Asmodis Themenstarter:in
3 Beiträge seit 2013
vor 10 Jahren

Ich melde mich hier mal zurück:
Die Sendmessage-Methode ist für mich definitiv unbrauchbar, da sich die Monitore tatsächlich nur bis zur nächsten Mausbewegung deaktivieren lassen.

Die Methode über den Gerätemanager lieferte bei mir leider mit einem manuellen Test auch ein nicht so tolles Ergebnis: Ich kann im Gerätemanager die Monitore deaktivieren, Auswirkungen scheint das aber irgendwie keine zu haben. Habe ich da an irgendwas noch nicht gedacht?

Am vielversprechendsten ist im Moment EnumDisplayDevices im Zusammenspiel mit ChangeDisaplySettingsEx. Ich habe auch schon auf einer Microsoft-Webseite den KB-Artikel KB306399: PRB: ChangeDisplaySettingsEx Does Not Detach a Monitor from the Desktop gefunden, der Beispielcode für genau dieses Problem zu zeigen scheint.
Als zweiten Ansatz hätte ich dann noch den .NET Wrapper for ChangeDisplaySettingsEX auf Codeproject gefunden. Das werd ich mir wohl auch mal näher ansehen. Als letzten Ausweg hatte ich mir auch schonmal überlegt, mit dem ProcessMonitor einfach mal zu beobachten, was beim manuellen deaktivieren der Displays so passiert - das ist aber ein riesen Haufen an Daten den ich eher nicht durchsehen will 8o - jetzt gehts aber sowieso erstmal noch ein bisschen raus, das Wetter geniesen 😁

Danke für die vielen Antworten bis hierhin schonmal 🙂

F
3 Beiträge seit 2017
vor 7 Jahren

Hattest du eine funktionierende Lösung gefunden?