PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zweiten Bildschirm ausschalten, aber ohne Nebeneffekte?


Platos
2023-07-30, 12:39:36
Ich frage mich, ob es möglich ist bei Windows (11) (mit Zustatzsoftware z.B), dass sich der 2. Monitor nach einer bestimmten Zeit (selbst definiert) abschaltet, während dem der 1. Monitor das aber nicht tut (weil man dort ja drauf arbeitet).

Ich rede von "Bildschirm ausschalten" von Windows her, also d.h, dass der Bildschirm schon noch erkannt wird, er einfach schwarz wird. Denn wenn ich ihn manuell ausschalte, wird er natürlich nicht mehr erkannt und alle Fenster von dort, wandern dann zum Monitor 1, was ich nicht will.

Die Idee ist, dass sich die 2 Monitore also quasi unabhängig voneinander in den "Bildschirm aus"-Zustand begeben können. Der 2. Monitor dann mit dem selben Prinzip, wie eben sonst auch. Also d.h keine Bewegung der Maus oder keine Tastaturanschläge (WENN der Fokus auf dem 2. Monitor liegt. Also wenn ich irgendwo in einem Fenster schreibe mit der Tastatur, welches auf dem 1. Monitor liegt, soll das natürlich nicht zählen).

Kennt jemand eine Software, die das kann? Oder irgend eine Möglichkeit, wie ich die unabhängig voneinander abschalten kann (wie gesagt: Einfach den 2. Monitor manuell abschalten geht nicht, da sonst alle Fenster auf Monitor 1 wandern).

Rooter
2023-07-30, 19:23:42
Was soll denn mit den Fenstern auf dem abschaltenden Monitor passieren? Sollen sie dort bleiben, im Nirvana? Oder wie willst du an die wieder dran kommen?

MfG
Rooter

BAGZZlash
2023-07-30, 19:24:50
Ist vielleicht nicht genau das, was Du brauchst, aber ich verwende zu diesem Zweck immer "Blank second screen". Das schaltet den Bildschirm zwar nicht aus, aber macht ihn schwarz, und beeinträchtigt nicht die Iconpositionen auf dem Desktop oder die Positionen der geöffneten Fenster.

Ich habe zwei Links auf das Programm, einen links auf dem Desktop und einen rechts. Es erkennt beim Start anhand der Mausposition, welcher Schirm schwarz werden soll (wenn man schnell genug ist, kann man's auch austricksen). Der Mauszeiger wird auf dem schwarzen Schirm deaktiviert, mit einfachem Linksklick kann man ihn aber wieder anzeigen (und auch wieder ausblenden) lassen. Einfacher Rechtsklick schaltet zwischen schwarz und weiß um (ganz nützlich, wenn man beim Filmeschauen mal kurz Licht braucht), und Doppelklick deaktiviert das Programm.

Achtung, das Ganze funktioniert nur, wenn es genau zwei Bildschirme gibt, wenn diese nebeneinander angeordnet sind, und wenn beide dieselbe Auflösung fahren.

84791

Platos
2023-07-30, 21:04:41
Mittlerweile habe ich auch eine Methode gefunden, wie da manuell geht. Aber eben nicht, wie das automatisch mittels inaktivität geht. Es geht nämlich folgendermassen manuell: Einfach den "Kanal" beim Monitor umschalten (also bei mir von Displayport auf irgend einer der anderen Steckplätze). Dann wechselt der Monitor mangels signal in den Standby, verbraucht (habs gemessen) auch so viel Strom wie da und mein Laptop stellt das wunderbar "im Nirvana" dar.

Nur eben: Wie schaffe ich, dass das automatisch passiert?

Ich habe bei Superuser einige Posts dazu gelesen und nichts gefunden, was wirklich geholfen hat.

Was ich aber NICHT suche ist:

- Irgendwas, was den Rechner dazu bringt, die Fenster vom 2. Monitor auf meinen 1. zu verfrachten (z.B mittels Win+P).
- Irgendetwas, was nur einen schwarzen Bildschirm macht.


Was soll denn mit den Fenstern auf dem abschaltenden Monitor passieren? Sollen sie dort bleiben, im Nirvana? Oder wie willst du an die wieder dran kommen?

MfG
Rooter

Ja, ich soll wieder drann kommen, während dem aber der Monitor so viel Strom wie im Standby verbrauchen soll. Wichtig ist aber, dass das von alleine passiert und ich das nicht manuell machen muss (mittels batch oder so). Also es soll nach ner bestimmten Zeit inaktivität (auf diesem Bildschirm) in den Standby wechseln und wenn ich mit der Maus wieder hingehe, soll der Monitor wieder zurück kommen.

Es ist mir egal, wenn das System die Geschehnisse auf diesem 2. Monitor weiterhin "im nirvana" darstellt. Der Monitor soll einfach kein Strom brauchen.

Und nein, der Monitor soll nicht abgeschaltet werden, er soll in den Standby wechseln. Wenn ich den Rechner in den Standby setzte, speichert er ja auch alles ab, obwohl der Monitor im Standby ist. Genau das soll er auch tun, nur eben soll nur der 2. Monitor in den standby gehen, wenn ich dort keine Aktivität habe.


Ist vielleicht nicht genau das, was Du brauchst, aber ich verwende zu diesem Zweck immer "Blank second screen". Das schaltet den Bildschirm zwar nicht aus, aber macht ihn schwarz, und beeinträchtigt nicht die Iconpositionen auf dem Desktop oder die Positionen der geöffneten Fenster.

Ich habe zwei Links auf das Programm, einen links auf dem Desktop und einen rechts. Es erkennt beim Start anhand der Mausposition, welcher Schirm schwarz werden soll (wenn man schnell genug ist, kann man's auch austricksen). Der Mauszeiger wird auf dem schwarzen Schirm deaktiviert, mit einfachem Linksklick kann man ihn aber wieder anzeigen (und auch wieder ausblenden) lassen. Einfacher Rechtsklick schaltet zwischen schwarz und weiß um (ganz nützlich, wenn man beim Filmeschauen mal kurz Licht braucht), und Doppelklick deaktiviert das Programm.

Achtung, das Ganze funktioniert nur, wenn es genau zwei Bildschirme gibt, wenn diese nebeneinander angeordnet sind, und wenn beide dieselbe Auflösung fahren.

84791

Ja, dass ist nicht das, was ich suche und nützt mir leider nichts. Denn bei einem LCD und schwarzem Bild ist der Stromverbrauch immer noch hoch (abgesehen davon, dass er leider auch nicht die selbe Auflösung hat).

Mein Monitor zieht 17 Watt und wenn er vollständig schwarz ist (mittels dispaly-fusion ausprobiert) zieht er immer noch 16.5Watt (ich nutze die niedrigst mögliche Helligkeitsstufe am Monitor)

Es geht einzig und allein um den Stromverbrauch. Im Standby ist dieser beim Monitor unter 1Watt. Es spielt für mich keine Rolle, dass er leuchtet.

Grendizer
2023-07-30, 21:20:36
Bei 8 Stunden betrieb am Tag sprechen wir von 1,40 Euro im Monat, die man einsparen würde. Mir wäre der Verlust der Flexibilität jederzeit auf die Inhalte der Monitore zuzugreifen so eine Krücke nicht wert.

Platos
2023-07-30, 21:26:48
Bei 8 Stunden betrieb am Tag sprechen wir von 1,40 Euro im Monat, die man einsparen würde. Mir wäre der Verlust der Flexibilität jederzeit auf die Inhalte der Monitore zuzugreifen so eine Krücke nicht wert.

Ok, ich wusste, das jemand kommt und seinen Senf dazu geben muss :rolleyes:

Für die anderen: Wer eine Idee hat, immer gerne her damit. Bin froh um alle ernst gemeinten Ideen. Wer denkt, er müsste mir sagen, warum ich es nicht tun soll: Umdrehen und einen anderen Thread suchen. Damit wäre das jetzt auch gleich geklärt.

Danke :wink:

Grendizer
2023-07-30, 21:32:57
wenn du das unbedingt brauchst schau dir NirCmd an... das Problem wird nur sein, das du laufend Programme öffnen willst, die schon auf Monitor 2 offen sind und sich deshalb nicht auf Monitor 1 öffen.

Ich sag ja, das das nervig ist und die Ersparnis nicht wert.

edit: Ah sorry NirCmd kann nur alle Monitore ausschalten.... ich muss morgen nochmal schauen, was ich damals genutzt habe.

Platos
2023-07-30, 21:38:05
Das kann man alles konfigurieren und ist ok für mich, ich habe auf dem 2. Monitor nicht die selben Programme geöffnet, wie auf dem ersten. Und er soll ja automatisch aktiviert werden, wenn sich "etwas tut".

Bezüglich NirCmd: https://www.nirsoft.net/utils/nircmd.html

Wie mache ich das denn, so dass nur der 2. deaktiviert wird und auch nur dann, wenn keine aktivität da stattfindet. Ich sehe da nur "monitor deaktivieren", aber nicht, wie ich den 2. Monitor deaktiviere oder wie ich mache, dass er sich automatisch deaktiviert, wenn ich mit der Maus nicht da bin.

universaL
2023-07-31, 12:50:59
du solltest den monitor per ddc command den eingang wechseln lassen können, benutze ich hier quasi als kvm-ersatz in verbindung mit einem usb-switch (siehe https://github.com/haimgel/display-switch#readme). den "kvm-ersatz-teil" brauchst du nicht, aber dort ist auch der ddc-teil beschrieben, bzw. verlinkt. das ganze hilft dir hoffentlich weiter :-)

Platos
2023-07-31, 14:22:51
Also brauche ich dafür einen usb-switch ?

PatkIllA
2023-07-31, 15:10:59
Also brauche ich dafür einen usb-switch ?
Nein.
Das An-/umschalten ist aber auch manuell.
Wenn sich etwas tut ist aber auch nichts, was genau definiert ist.

Milchkanne
2023-07-31, 16:55:33
Das KVM-Switch Gedöns war mehr ein Beispiel, dass es irgendwie gehen muss.

Darauf aufbauend:
https://github.com/scottaxcell/winddcutil besorgen

Autohotkey script schreiben, was den Cursor überwacht. Wenn er x-Minuten nicht drüben war, dann ddcutil den Monitor abschalten lassen. Wenn man wieder drüben ist, wieder anschalten. Sollte nicht wahnsinnig aufwändig sein. Berücksichtigt natürlich nicht, wenn drüben gerade ein Video o.ä. läuft. Wenn du da gerade ein PDF offen hast, musst du natürlich alle paar Minuten da rüber wandern. Das wird aber praktisch immer das Problem sein - wenn du nicht irgendwelche Programme da whitelisten kannst.

*edit* Absolut nicht auf viren o.Ä. geprüft. Ich fahre Linux...

Poekel
2023-08-01, 13:29:18
Evtl. geht was mit diesem Tool:
http://www.nirsoft.net/utils/control_my_monitor.html

Hab zuerst mit dem Multi-Monitor-Tool rumgespielt, aber dort werden die Monitor jeweils komplett ausgeschaltet und die Fenster auf den aktivierten verschoben.
Mit ControlMyMonitor werden die Einstellungen für den Monitor angezeigt und können auch geändert werden (der Laptopbildschirm gibt eine Fehlermeldung wieder), so dass ich den Power Mode von an (1) auf Sleep (4) und auf aus (5) stellen kann (aber nicht von aus auf an, dafür muss ich den Monitor physisch anstellen).

Grundsätzlich sollte das also möglich sein (MS hat hier auch was zu den Codes: https://learn.microsoft.com/de-de/windows/win32/monitor/using-the-low-level-monitor-configuration-functions), aber möglicherweise sind die Hersteller ziemlich frei in dem, was sie Monitore machen lassen und welche Codes sie verwenden, so dass Tools vorher wissen müssten, welche Einstellungen was sind und man jedes Mal eine invidiuelle Lösung erstellen müsste?

€: Darauf aufbauend:
https://github.com/scottaxcell/winddcutil besorgen
Wäre in meinen Fall ja einfach folgendes, oder:
winddcutil setvcp <display2> <D6> <1> (an)
winddcutil setvcp <display2> <D6> <4> (sleep)
(hier können aber evtl. noch weitere Monitor-Probleme auftreten? Solange Strom an ist und der Monitor angeschlossen (HDMI) ist, wird er vom Laptop nicht als "aus" identifiziert, ähnlich hat sich ein alter Monitor mit DVI verhalten, während der Fernseher mit HDMI im StandBy korrekt als "aus" identifiziert wird; da könnte vielleicht auch unterschiedliche Anschlüsse unterschiedliche Ergebnisse bringen).

PatkIllA
2023-08-01, 16:07:31
er kann bei sich ja erst mal testen, ob es klappt manuell den Eingang direkt am monitor auf was unbenutztes umzustellen oder einfach auszuschalten.
Da das aber in beide Richtungen manuell ist kann er das auch einfach immer am Monitor machen statt was zu skripten.

Platos
2023-08-01, 16:21:11
Also ControllMyMonitor habe ich ausprobiert. Das funktioniert irgendwie nicht richtig bei mir.

Beim Energiesparmodus: Wenn ich da auf 4 wechsle, wird der Monitor & der Laptopbildschirm kurz schwarz. Dann geht der Laptopbildschirm direkt wieder an, dann wechselt er ein paar mal hin und her (so als würde gerade ein Monitor verbunden werden) und es gehen beide wieder an.

Beim Kanalwechsel: Da ist es so, dass der Bildschirm zwar schwarz wird, aber der Kanal wird gar nicht gewechselt, denn wenn ich warte, passiert einfach nichts (normalerweise wechselt der Monitor bei Kanalwechsel mangels Signal in den Standby). Und ausserdem, wenn ich beim Monitor dann manuell das Signal wechsle, sehe ich, dass er immer noch auf Displayport steht.

Und dann kommt noch dazu: Wenn ich den Kanal dann wieder zurückwechseln will, geht das nicht mehr. Dann muss ich beim Monitor manuell einmal hin und her schalten, damit es wieder geht.

er kann bei sich ja erst mal testen, ob es klappt manuell den Eingang direkt am monitor auf was unbenutztes umzustellen oder einfach auszuschalten.
Da das aber in beide Richtungen manuell ist kann er das auch einfach immer am Monitor machen statt was zu skripten.

Das habe ich doch bestimmt schon 5 mal geschrieben: Ich will nichts manuell machen, es soll automatisch geschehen und zwar aufgrund von Inaktivität auf dem jeweiligen Bildschirm.

Und ich habe ja auch schon geschrieben, dass es funktioniert, den Eingang am Monitor umzustellen. Daher kommt ja überhaupt die Idee mit dem Kanalwechsel.

Das KVM-Switch Gedöns war mehr ein Beispiel, dass es irgendwie gehen muss.

Darauf aufbauend:
https://github.com/scottaxcell/winddcutil besorgen

Autohotkey script schreiben, was den Cursor überwacht. Wenn er x-Minuten nicht drüben war, dann ddcutil den Monitor abschalten lassen. Wenn man wieder drüben ist, wieder anschalten. Sollte nicht wahnsinnig aufwändig sein. Berücksichtigt natürlich nicht, wenn drüben gerade ein Video o.ä. läuft. Wenn du da gerade ein PDF offen hast, musst du natürlich alle paar Minuten da rüber wandern. Das wird aber praktisch immer das Problem sein - wenn du nicht irgendwelche Programme da whitelisten kannst.

*edit* Absolut nicht auf viren o.Ä. geprüft. Ich fahre Linux...

Und woher kriege ich die Befehle, um den Monitor in den Standby zu wechseln oder den Eingangskanal zu wechseln? Ich finde dazu irgendwie nichts. Ich weiss auch nicht, was die windductil.exe eigentlich machen soll ?

PatkIllA
2023-08-01, 16:40:01
Das habe ich doch bestimmt schon 5 mal geschrieben: Ich will nichts manuell machen, es soll automatisch geschehen und zwar aufgrund von Inaktivität auf dem jeweiligen Bildschirm. Da gibt es aber wohl keine Lösung für. Ein paar Pixel werden sich zu oft ändern und die ganzen Inaktivitäts-Ereignisse sind immer systemweit. Solange du da nichts findest brauchst du den zweiten Schritt gar nicht angehen.

Milchkanne
2023-08-01, 17:07:31
Und woher kriege ich die Befehle, um den Monitor in den Standby zu wechseln oder den Eingangskanal zu wechseln? Ich finde dazu irgendwie nichts. Ich weiss auch nicht, was die windductil.exe eigentlich machen soll ?

Das benutzt man (erstmal) auf der Konsole.

ddcutil capabilities

sollte erstmal den Monitor erkennen und alles was gemacht werden kann anzeigen.

Bei mir schaltet z.B.

ddcutil setvcp 0x60 0x11

den Eingang auf HDMI. Wobei du unter Windows offenbar noch eine display-id angeben musst? Die bekommst du mit "ddcutil detect".

Du kannst aber auch mal schreiben, welchen Monitor du hast. Evtl. ist der in der Datenbank.

Wenn dir das reicht, dass als inaktivitätskriterium der Mauszeiger herhält, der nicht auf dem anderen Monitor ist, kann ich mal gucken, ob ich da auf die schnelle was mit Autohotkey gebastelt bekomme.

Platos
2023-08-01, 17:18:43
Ich nutze diesen Monitor: https://www.lg.com/de/monitore/lg-27UD58-B

Und ok, also d.h mit cmd oder wo gibt man die Befehle ein? Und woher kriegst du die commands für das alles?

Und wie installiert man denn winddcutil ? Das verstehe ich nicht so ganz. Da steht nichts bezüglich Installation. Dann könnte ich wenigstens mal testen, ob das mit dem kanalwechsel (oder dem standby) überhaupt funktioniert.

Und ja, Mauszeiger reicht mir völlig als inaktivitäts-Ding.

Und das wäre natürlich super, weil ich bin bei Autohotkey sehr schlecht bzw. konnte ich mich nie damit anfreunden, weil ich scripts selber erstellen muss :D

Poekel
2023-08-01, 18:05:41
Und wie installiert man denn winddcutil ? Das verstehe ich nicht so ganz. Da steht nichts bezüglich Installation. Dann könnte ich wenigstens mal testen, ob das mit dem kanalwechsel (oder dem standby) überhaupt funktioniert.

So wie ich das verstehe, ist das einfach eine ausführbare exe, die mit den entsprechenden Parametern ausgeführt wird, und Control My Monitor dürfte wohl mehr oder weniger das Gleiche nur mit grafischer Oberfläche machen.

Letzteres scheint mir halt besser zu sein, um auf die Schnelle die passenden Informationen darzustellen und durchzutesten (wie geschrieben, Laptop-Bildschirm hat er mir bei gar keine Infos angezeigt, habe dann gestoppt und auf den Monitor gewechselt und da dann einfach bei Power Mode mit +1 (F8) die 3 möglichen Modi durchgegangen).

Hast du mal versucht, HDMI anstatt DP bzw. umgekehrt zu probieren (oder einen Adapter zwischenzuschalten)? Ebenfalls möglich ist auch, dass jeder Hersteller sein eigenes Süppchen kocht, wie die Monitore bzw Windows reagieren (ich kann den Monitor ausstellen und der Bildschirm wird weiterhin erweitert, solange der Monitor angeschlossen ist), wenn diese an oder aus (und dazwischen) gestellt werden.

Platos
2023-08-01, 18:42:54
Wie kann man denn den Monitor abschalten mittels ControllMyMonitor?

Und HDMI geht nicht. Mein Monitor hat 2 dummy-anschlüsse ^^ 4k60 geht nur über Displayport, die anderen sind eig. nutzlos^^

Aber wie gesagt, bei mir geht das mit ControllMyMonitor nicht so ganz. Sowohl Kanal wechseln wie auch der Standby geht nicht mit dieser Software. Wie geht das ganz ausschalten mittels Software?

Milchkanne
2023-08-01, 23:19:48
Ich nutze diesen Monitor: https://www.lg.com/de/monitore/lg-27UD58-B

Ok, der ist nicht in der Datenbank. Da musst du leider mithelfen.


Und ok, also d.h mit cmd oder wo gibt man die Befehle ein? Und woher kriegst du die commands für das alles?

Du musst eine eingabeaufforderung starten (start -> cmd -> enter oder so) die winddcutil.exe (https://github.com/scottaxcell/winddcutil/raw/main/x64/Release/winddcutil.exe) an einen Ort kopieren, wo du mit der Konsole gerade bist. Dann gibt ein

winddcutil detect
winddcutil capabilities

und schick mir, was da steht. Zur not ein Screenshot.



Und wie installiert man denn winddcutil ? Das verstehe ich nicht so ganz.

Einfach runterladen (https://github.com/scottaxcell/winddcutil/raw/main/x64/Release/winddcutil.exe) und an den Ort kopieren, wo du mit der Konsole gerade bist.


Und das wäre natürlich super, weil ich bin bei Autohotkey sehr schlecht bzw. konnte ich mich nie damit anfreunden, weil ich scripts selber erstellen muss :D

Installier mal Autohotkey (https://www.autohotkey.com/download/ahk-v2.exe) und klick auf die Datei im Anhang (entzippen) doppelt. Das ist jetzt nur ein test. Das prüft ob die Maus über x-position 1000 ist und nach einer Minute wird eine Meldung angezeigt. Ich bin auf Linux und kann das nicht testen. Es ist ca 10 Jahre her, dass ich was mit Autohotkey gemacht habe... Vielleicht ist das totaler murks...

Ich brauche noch die Auflösugen deiner beiden Monitore und welcher jetzt rechts steht - also welche jetzt abgeschaltet werden soll.

Platos
2023-08-02, 11:13:23
Habe das jetzt mal gemacht. Habe das mit winddcutil per Pn geschickt, da ich nicht weiss, ob man das besser nicht online öffentlich postet.

Und das mit autohotkey hat das ergeben (siehe Anhang Bild).

Display 0 ist der Laptopbildschirm (also Hauptbildschirm) und Display 1 ist der 2. Bildschirm (also der angeschlossene Monitor, der ausgeschaltet werden soll). Steht in der Pn.

Die Auflösung von Display0 ist 3240x2160 und von Display1 3840x2160. Ist die Skalierung auch wichtig? Display0 hat 175% Skalierung bei Windows und Display1 150%

Poekel
2023-08-02, 11:46:55
Wie kann man denn den Monitor abschalten mittels ControllMyMonitor?

ControlMyMonitor dürfte nichts andere machen als die Low Level Konfigurationen und möglichen Werte aufzulisten, anzuzeigen und, wenn möglich, ändern zu lassen, also nichts anderes, als das, was man mit winddcutil auch macht, nur mit GUI und automatisiert.
Insofern ist es wohl nicht notwendig, aber evtl. hilfreich, um schnell zu verifizieren, ob die gewünschte Option vorhanden ist und der Befehl funktioniert.

Bei meinem Monitor wird unter Power Mode die Optionen 1, 4 und 5 dargestellt und wenn ich die da mit der Wert +1 erhöhen Option durchgehe, geht der Monitor auf Sleep (1 von 4) und danach auf aus (5).

Milchkanne
2023-08-02, 12:55:29
Und das mit autohotkey hat das ergeben (siehe Anhang Bild).


War ja klar, wenn ich das nicht selber debuggen kann, ist das echt doof... Ich überleg gleich nochmal.

Deine ddcutil Daten waren leider nicht so hilfreich. Du hast das schon richtig gemacht, aber der Output ist für mich nicht so leicht verständlich.

Mach mal "ddcutil getvcp 1 60" und schick mir den Output.

Bis auf deinen Usernamen des Rechners ist da aber nicht viel geheimes drin. Das sind Daten deines Monitors, die sind bei jedem (gleichen) Monitor gleich.

Milchkanne
2023-08-02, 13:35:37
hier nochmal ein Versuch. Das könnte jetzt schon klappen. Du musst aber ziemlich sicher noch deine Eingänge ändern. Bei einem Monitor würde z.B. "10" und "11" funktionieren. Bei nem anderen sind das "01" und "03" oder "0f".
Ich hab den Timeout jetzt zum testen mal auf 6 Sekunden gestellt. *edit* winddcutil muss im gleichen Ordner wie die ahk Datei sein.

Man könnte auch experimentieren, ob man den Monitor gleich DPMS off schalten kann. Keine Ahnung ob Windows den dann wieder anmachen will oder nicht. Kannst ja einfach mal probieren:

winddcutil setvcp 1 D6 04

bzw.

winddcutil setvcp 1 D6 01

(die Werte D6 und 01/04 sind VESA standard... müsste gehen)

Platos
2023-08-02, 18:51:14
Ok, also ich habe jetzt mal den Befehl winddcutil setvcp 1 D6 04 ausprobiert. Der macht genau das gleiche, wie mit ControlMyMonitor mit dem Wert 4. Es macht den zweiten Monitor kurz schwarz und dann stellt er gleich wieder ein.

Der Befehl winddcutil setvcp 1 D6 05 stellt den Monitor erfolgreich sofort aus, aber einstellen kann ich ihn dann mit winddcutil setvcp 1 D6 01 nicht mehr. Da steht dann "failed to set vcp feature". Auch mit ControllMyMonitor ist es genau gleich. Ich muss ihn dann also manuell einstellen.

Das Skript habe ich probiert, funktioniert aber nicht (es hat übrigens neben dem Mauscursor ständig ein kleiner Kasten mit zahlen, die sich ständig ändern. Vermutlich Pxelkoordinaten oder sowas?). Ich habe auch die Werte auf 15 und 16 gestellt (15 ist laut ControlMyMonitor der aktuelle Wert, wenn ich bei Displayport bin).

Ich habe auch die beiden befehle in "winddcutil.exe setvcp 1 D6" abzuändern und die Werte oben auf 5 und 1 gestellt (zum ausschalten). Hat aber auch nicht funktioniert. Wenn ich es selber bei cmd eingebe, funktioniert das ausschalten aber.

Und das habe ich auch noch eingegeben: C:\Users\NAME\Documents\winddcutil-main\x64\Release>winddcutil getvcp 1 60
VCP 60 f

Habe jetzt gecheckt, dass der VCP Code bei der Software ControllMyMonitor abgelesen werden kann und auch die Werte.

Wenn ich bei cmd winddcutil setvcp 1 60 18 eingebe, passiert nichts. Mit 17, 16 und 0 auch nicht. Es wird kurz ein bruchteil einer Sekunde schwarz und wechselt sofort wieder zurück.

Es scheint wohl so, dass ich einfach Pech habe und mein Monitor oder mein Laptop nicht will? Vlt. liegt es am Kabel, dass USB-C zu Displayport ist.

Die einzige Möglichkeit, die mir einfällt, ist, dass ich den Monitor mittels "winddcutil setvcp 1 D6 05" automatisch ausstellen lasse (wegen Inaktivität) und dann eben manuell am Monitor-Knopf wieder einstelle, wenn ich ihn brauche. Das wäre irgendwie noch brauchbar, denke ich. Weil so stellt er sich wenigstens automatisch aus, wenn ich ihn nicht brauche.

So sieht das übrigens aus:

Poekel
2023-08-02, 19:47:29
So sieht das übrigens aus:
Der Monitor müsste laut Screen doch 2 sein, nicht 1; und zumindest laut Anzeige gibt es bei D6 auch nur die Optionen 1 und 4.

Platos
2023-08-02, 20:21:28
Der Monitor müsste laut Screen doch 2 sein, nicht 1; und zumindest laut Anzeige gibt es bei D6 auch nur die Optionen 1 und 4.

Also "display 2" ist glaube ich einfach so die interne Bezeichnung. Es ist aber 1 laut winddcutil und es funktioniert auch mit 1.

Und ja, da steht nur 1 und 4, aber trotzdem 5 als höchstwert. Und dieser ist ausschalten anscheinend. Das funktioniert, aber einschalten nicht mehr :D
4 funktioniert nicht.

Milchkanne
2023-08-02, 21:35:19
Die werte 16, 17, 18 sind sicherlich dezimal, musst du noch in Hex umwandeln.

Das floatende Fenster war für mich zum debuggen. Die Zeile mit dem "tooltip" einfach ein Semikolon vorschreiben.

Probier mal:

winddcutil setvcp 1 60 12

Das müsste auf nen anderen Ausgang schalten. Ich hab aber gerade sorge, dass er sich dann von Windows abmeldet und nicht wieder zurück schalten kann. Probier dann mal:

winddcutil detect

oder

winddcutil setvcp 1 60 0f

Mach das auch mal, wenn du ihn mit "setvcp 1 D6 05" ausgeschaltet hast. Oder lass dann controlmymonitor mal laufen. Ich hab gerade sorge, dass der dann einfach nicht mehr am System angemeldet ist und keine Befehle mehr annimmt... Im Standby würde es vielleicht noch gehen...

Milchkanne
2023-08-02, 22:27:53
Also bei mir ist das so. Ich kann auf nen anderen Anschluss wechseln, dann ist der Monitor aber natürlich weg und ich kann ihn nicht wieder einschalten.

Ich kann ihn aber per DPMS d6 04 ausschalten und dann wieder mit d6 01 einschalten. Dann ist der Monitor aber auch weg. Es funktioniert also genau einmal. Moment. Mit d6 05 geht er ganz aus, dann mit d6 01 auch wieder an und ist dann auch weiterhin erreichbar.

Ich muss mir gleich mal ein start/shutdown script schreiben, was den Monitor beim hochfahren an und beim runterfahren ausmacht. Da spar ich 2 ganze mal den Zeigefinger heben am Tag.

Platos
2023-08-03, 11:09:54
Ok, ich habe das jetzt ausprobiert. Es ist eig. alles so, wie bei ControllMyMonitor.

Wenn ich winddcutil setvcp 1 60 12

schreibe, stellt der Bildschirm schwarz, aber er wechselt nicht in den Energiesparmodus, wie er es tut, wenn ich beim Monitor manuell den Eingang wechsle. Ebenfalls ist es so, dass wenn ich mit dem Monitor dann den Eingang manuell wechsle, er immer noch auf Displayport steht. Er ist also einfach schwarz, aber man sieht, dass die Beleuchtung noch an ist. Zurück kann ich aber nicht mehr mittels software/befehl. Auch nicht mit "winddcutil setvcp 1 60 0f" oder "winddcutil setvcp 1 60 f". Mit "winddcutil detect" wird der Monitor aber weiterhin erkannt. Trotzdem kann ich ihn aber irgendwie nicht zurückschalten. Zu mal der Monitor ja so oder so nicht in den Energiesparmodus wechselt.

Mit winddcutil setvcp 1 d6 05 stellt er (wie vorher) erfolgreich ab, aber er lässt sich dann nicht mehr einschalten. Ich kriege dann die Meldung "failed to set vpc feature" und in ControllMyMonitor wird er nicht mehr erkannt.

Mit winddcutil setvcp 1 D6 04 wird der Monitor kurz schwarz und dann sieht es so aus, als würde mein Laptop ihn wieder einstellen (beim Verbinden eines Monitors gibt es so temporäre Änderungen auf dem Desktop des Laptops, so erkenne ich das). Das geht also gar nicht.

Fazit: Nur winddcutil setvcp 1 D6 05 geht. Den Eingang wechseln geht nicht und der Energiesparmodus geht auch nicht. Aber einschalten kann ich ihn nie wieder. Also alles genau so, wie bei ControllMyMonitor.

Aber eben: Eine automatische Abschaltfunktion wäre schon nützlich, dann muss ich nur noch manuell einschalten. Denn das einschalten ist weniger schlimm, wie das ausschalten. Ich kann dann einfach kurz einschalten, wenn ich ihn brauche. Aber ich weiss ja nicht im Vorherein, ob ich den Monitor in 2 Min vlt. wieder brauche. D.h abschalten ist wichtiger wie einschalten.

Ich verstehe allerdings trotzdem nicht, warum bei mir das autohotkey-script keinerlei Wirkung zeigt. Also auch kein abschalten.
Wobei bei mir hat in deinem Script xPostLimit 3240, was die horizontale Auflösung des Laptop-Bildschirm ist, also nicht die des Monitors, den ich abschalten will. Soll das so sein?

Poekel
2023-08-03, 12:39:17
Vielleicht ist das Problem auch laptopspezifisch und abhängig von modifizierten Grafiktreibern, Powereinstellungen oder auch nur Einstellungen, was bei geschlossener Klappe passieren soll?
Habe hier z. B. immer mal wieder Probleme mit angeschlossenen Monitoren gehabt, wenn er bei geschlossener Klappe in den Schlaf geschickt werden sollte, und dann ein Neustart anlag.

Platos
2023-08-03, 14:23:08
Also Grafiktreiber habe ich keinen modifizierten. Habe den von nvidia bzw. intel für die iGPU (die im Normalfall aktiv ist). Kann aber natürlich schon sein, dass das Laptopspezifisch ist (oder Monitorspezifisch für den 2. Monitor).

Und die Energieeinstellungen sind normal/default, bis auf wann in den Energiesparmodus gewechselt werden soll (und Schnellstart deaktiviert und Ruhemodus aktiviert).

Und der Bildschirm zuklappen löst den Energiesparmodus aus, aber ich habe ihn nicht zugeklappt während dem ich das alles ausprobierte.

Würde ja irgendwie auch keinen Sinn ergeben, denn dann hätte ich ja gar nicht 2 Monitore, wenn einer zugeklappt ist. Dann hätte ich ja nur einen und ich könnte einfach auf den normalen Energiesparmodus zurückgreifen.

Poekel
2023-08-03, 14:57:33
Und der Bildschirm zuklappen löst den Energiesparmodus aus, aber ich habe ihn nicht zugeklappt während dem ich das alles ausprobierte.
Die Idee dahinter war, ob es vielleicht möglich sein könnte, dass mögliche Probleme bei der Konstellation externer Monitor - Laptop - geschlossener Deckel (oder eben irgendwelche vom Hersteller veränderten Stromspareinstellungen) verhindern, dass der Monitor in den Schlafmodus geht, wenn der Laptop aktiv ist.
Gibt ja genügend Laptops mit Spezialtreibern und Spezialsoftware verwendet werden sollen.

Platos
2023-08-03, 18:33:07
Ich habe es mal mit meinem Desktop-PC ausprobiert. Wenn ich da den selben Monitor + den TV nutze und dann das selbe mit dem Monitor mache, wie jetzt mit dem Laptop+Monitor, passiert auch genau das gleiche.

Also es sollte am Monitor liegen, denke ich.

RavenTS
2023-08-05, 16:16:47
Vielleicht noch eine Zwischenlösung falls das per Software nicht klappt:
Mein LG-Monitor hat die Funktion "Automat. Standby", die ihn auch bei regulärer Anzeige nach einer gewissen Zeit in den Standby schickt. Will man das verhindern muss man kurz eine der Gerätetasten drücken.

Platos
2023-08-05, 19:37:20
Ja, meiner auch, aber das ist aus 2 Gründen nicht Zielführend:

a) kann ich da keine 3 Minuten einstellen
b) selbst wenn, dann müsste ich ja im regulären Betrieb alle 3 Minuten ne Taste drücken.

Niedrigst möglicher Wert ist bei mir da übrigens 4 Stunden:freak:

Milchkanne
2023-08-11, 08:43:00
Ich war mal kurz weg. Kann ich noch irgendwas helfen? Nutzt du das jetzt irgendwie? Nur abschalten sollte ja gehen...
?

Platos
2023-08-11, 10:04:09
Ja also das Skript funktioniert ja bei mir irgendwie nicht komischerweise.

Wenn das funktionieren würde mit der Abschaltfunktion (dann eben ohne Einschalten, weil das ja nicht geht), würde mir das schon viel bringen.

Also abschalten mittels "winddcutil setvcp 1 D6 05" ist das einzige, was geht.

Milchkanne
2023-08-11, 23:02:37
Probiers hiermit mal. Ich hab den Tooltip mal gelassen, ich bin mir immernoch nicht ganz sicher, wie deine Monitoraufteilung ist. Beweg den Cursor mal an den zu dem Monitor, der abgeschaltet werden soll. Also wenn der rechte abgeschaltet werden soll, dann an den rechten Rand des linken Monitors. Dann sagst du mir die erste Zahl, die im Tooltip steht und welcher Monitor jetzt rechts und links steht.

Platos
2023-08-13, 16:36:24
Danke für die Rückmeldung. Habe es erst jetzt gesehen, sorry.

Ich habe es mal ausprobiert. Also abschalten geht, aber der Monitor wird direkt ausgeschalten, wenn ich die .ahk Datei starte. Wenn ich ihn dann von Hand wieder einschalte (es geht ja nur von Hand), dann stellt er auch wieder nach kurzer Zeit aus. Manchmal geht es etwas länger, bis er ausschaltet, aber meistens ziemlich direkt. Aber er schaltet auch aus, wenn ich auf dem 2. Monitor bin mit der Maus. Wenn ich den Timer ändere auf 0.5 anstatt 0.1 ändert sich auch nichts.

Und bezüglich rechts & links. Also mein 2. Monitor (der, der abgeschaltet werden soll) ist auf der rechten Seite. D.h wenn ich auf dem 1. Monitor zum rechten Rand gehe, komme ich zum 2. Monitor. Das heisst der, der abgeschalten werden soll muss der rechte Monitor sein (der 2. Monitor).

Ich nehme mal an, das meinst du mit rechts und links oder ?

Tooltips zeigt mir an erster Stelle eine 2 an auf dem linken Monitor am rechten Rand. Die ganze Zahl ist aber ziemlich gross. Ich kann aber nicht ganz (also bis zum letzten Pixel) des linken Monitor gehen, sonst rutsche ich automatisch zum rechten Monitor mit der Maus.

Milchkanne
2023-08-13, 22:24:18
Lösch mal aus der Zeile mit tooltip alles nach xpos. Also aus

tooltip xpos . " " . timer . " " . state

mach nur

tooltip xpos

bislang waren das drei Zahlen. Erst die x-position (an der habe ich interesse), dann ein Timer, dann ein interner Statuswert. Kommentier dann noch Zeile 57 aus (das ist die Zeile nach "; MsgBox "switch on"". Mach da einfach ein Semikolon vor die Zeile).

Platos
2023-08-15, 08:00:23
Ok, habe ich gemacht.

Ausschalten tut es damit auch wieder, aber auch wieder direkt nach aktivieren des Skripts. Wenn ich den Monitor dann manuell einschalte, schaltet es manchmal direkt wieder aus und manchmal irgendwie nicht. Aber wenn es mal nicht direkt ausstellt, dann nicht nach Ablauf der eingestellten zeit, denn wenn ich die Zeit von 0.1 auf 0.5 Stelle, ändert sich auch nichts daran.

Solange der 2. Monitor noch nicht abgestellt ist, ist die Zahl -554, wenn ich beim linken Monitor ganz nach rechts gehe. Wenn er ausgestellt ist wäre die Zahl 2610. Vielleicht liegt das an der Skalierung in Windows.

Milchkanne
2023-08-15, 10:16:35
Kommentier einfach mal die beiden "Run executable" Zeilen aus (Semikolon davor), dann sollte er nicht mehr ausschalten.

Dann den wert im Tooltip anzeigen. Dann den einen Monitor abschalten und gucken, ob der Wert sich ändert...

Platos
2023-08-15, 11:15:38
Ok, habs ausprobiert. Es ist wie folgt (2. Monitor ist der Rechte und 1. Monitor der Linke):

Grundsätzlich ist der Wert 2610, wenn der 2. Monitor ausgeschaltet ist und -554, wenn er eingeschaltet ist.

Es ist jetzt aber so: Die Zahl wechselt nicht von alleine, wenn der 2. Monitor ein- bzw. ausgeschalten wird. Die Zahl wechselt von -554 zu 2610 erst dann, wenn der 2. Monitor ausgeschalten ist und ich mit der Maus auf dem 1. Monitor bin und einen Mausklick mache (es braucht den Mausklick).

Und wenn ich den 2. Monitor einschalte, wechselt die Zahl erst zu -554, wenn ich auf dem 2. Monitor mit der Maus hingehe und einen Klick mache.

Und wenn ich das Skript erstmalig starte, ist die Zahl 2610 wenn der 2. Monitor eingeschaltet ist. Also auch hier muss ich zuerst einmalig auf den 2. Monitor gehen und mit der Maus irgendwo klicken, damit es -554 wird.

Ich habe so die Vermutung, dass dadurch das Skript immer gleich den 2. Monitor ausschaltet, weil das nicht automatisch wechselt, sondern erst nach einem Mausklick auf dem jeweiligen Monitor.

Danke übrigens für deine ganze Hilfe hier die ganze Zeit!

Milchkanne
2023-08-16, 10:53:32
Aha. Es fehlt noch ein

CoordMode "Mouse", "Screen"

einfach irgendwo einfügen. z.B. hinter die "executable := " Zeile.

Bislang waren die Coordinaten relativ zum aktiven Fenster. Daher musstest du klicken. Jetzt könnte es besser sein.

Platos
2023-08-16, 11:19:09
Hmm, also wenn ich CoordMode "Mouse", "Screen" eine Zeile unterhalb von executable := "winddcutil.exe" schreibe, muss ich immer noch klicken.

Habe es auch eine Zeile unterhalb davon probiert:

;Run executable . " setvcp " . command . " " . valueOff
state := 1

Wo genau muss ich das einfügen ? Sorry :D
Und mit dahinter meinst du eine Zeile darunter ?

Milchkanne
2023-08-16, 15:26:06
Was für ein Windows hast du denn? Der Tooltip aktualisiert sich nicht einfach so?

Ich hab das jetzt in ner Win10 VM ausprobiert. Ich hab immer ein aktuelles Tooltip da...

Link zu meinem Script (https://0.jaegers.net/?8ba067765c9d5289#5JyTq6WZYntA2GXJ6KDyeHE4gXpUgWu97VbU7z1g1s5h)

Platos
2023-08-17, 10:42:40
Ich habe Win 11 22H2.

Kurz gesagt: Die zahl ist auf dem linken Monitor (wenn ich ganz nach rechts gehe) nun 3239 (beim rechten Monitor ist die Zahl ganz links dann 3780. Ich weiss nicht, wo die Pixel dazwischen sein sollen). Ich habe nicht gemerkt, dass nun die Zahl ganz rechts 3229 ist, weil ich mich gestern nur darauf fixiert habe, ob die Zahl automatisch auf -554 wechselt. Das hat sie nicht, deswegen nahm ich an, ich müsste wieder klicken (habe ich aber nicht). Die Zahl bleibt jetzt bei 3239, egal ob ich klicke oder nicht. D.h ich denke, es funktioniert jetzt.

Wie auch immer:

Ich habe dann das Skript damit nochmals ausprobiert, indem ich das ";" bei Zeile 70 rausgelöscht habe. Es war aber immer noch gleich und funktionierte nicht richtig. Es stellte direkt ab, wenn ich das Skript erstmalig startete und wenn ich den Monitor manuell wieder einschaltete, stellte er nach ~ 10 Sekunden wieder ab, egal welchen Timer ich oben einstellte (0.1 oder 0.5 z-B).

Ich habe dann mal dein Skript mit meinem verglichen und versucht zu verstehen, was da anders ist. Ich habe dann gesehen, dass in deinem Skript in Zeile 64 "timeout*60*1000" steht. Habe dann verstanden, dass timeout eine Variable ist und zwar die, die ich eben oben selber definiere (0.1 usw). Bei dem Skript von post #40 (das ich ja benutze) steht aber in Zeile 64 "10*1000". Jetzt verstehe ich auch, warum bei mir die Zahl bei "timeout" nie einen Effekt hatte. Ich habe jetzt bei Zeile 64 auch "timeout*60*1000" hingeschrieben und jetzt geht es!

Der Monitor stellt aber beim erstmaligen Ausführen des Skripts weiterhin direkt aus. Wozu ich zum 2. Unterschied komme, der bei deinem Skript ganz anders ist und zwar Zeile 51. Da steht bei dir nämlich "if xpos < xPosLimit" und bei dem Skript aus Post #40 steht "if xpos > xPosLimit".

Ich habe dann nochmals alle Tooltips eingeschalten und jetzt verstehe ich auch, dass der 2. Wert der Timer ist und der 3. Wert der Zustand, der da im Skript definiert wird (0 & 1, wobei bei 0 der Monitor ausgeschalten wird nach dem Timeout).

Wenn ich "if xpos > xPosLimit" nehme, dann sehe ich, wie in den Tooltips der Timer anfängt zu zählen, wenn ich auf dem rechten Monitor bin (soweit ja logisch, weil dort ist die Zahl grösser wie meine 3240). Eigentlich wäre das ja falsch, denn der Timer soll doch nur losgehen, wenn ich auf dem linken monitor bin (also "if xpos < xPosLimit"). Das komische ist jetzt aber, dass der rechte Monitor trotzdem nur dann ausschaltet, wenn ich auf dem linken Monitor die Zeit abwarte (der Timer in den Tooltips bleibt aber logischerweise stehen, wenn ich auf dem linken Monitor bin, weil die Zahl ja dort kleiner wie 3240 ist). Aber das Skript tut in dem Moment, was ich will. Er stellt den rechten Monitor nur ab, wenn ich mit der Maus auf dem linken Monitor bin und dort die Zeit abwarte. Aber ich verstehe nicht, warum das Skript das tut. Weil der Timer läuft ja auf dem linken Monitor gar nicht (laut tooltips) und trotzdem funktioniert das Skript so.

Das Ding ist nämlich: Wenn ich "if xpos < xPosLimit" nehme, stellt der Monitor nicht ab, wenn ich das Skript erstmalig einschalte. Das Problem ist aber, dass der rechte Monitor dann eben nur noch dann abstellt, wenn ich beim rechten Monitor die Zeit abwarte (das will ich ja aber nicht).

Daher verstehe ich das Skript nicht.

Ich nutzte jetzt das Skript: SetTimer WatchCursor, 100


; Hier die werte für die Ausgänge eintragen
; Bekommt man mit
; winddcutil setvcp 1 60
; (evtl. die 1 durch den Monitorwert ersetzen)

;valueOff := 10
;valueOn := 11

;DPMS Off/On
;valueOff := 04
valueOff := 05
valueOn := 01


; command := Monitor#, command
; commands:
; 60 = Input Source
; D6 = Power mode
;command:= "1 60" ; Monitor 1, input source
;command:= "0 D6" ; Monitor 0, command DPMS
command:= "1 D6" ; Monitor 1, command DPMS


; Hier Monitorauflösung des linken Monitors eintragen
xPosLimit := 3240
;xPosLimit := 0

; Timeout eintragen (Minuten)
timeout := 0.3

timer := 0
state := 0
executable := "winddcutil.exe"
CoordMode "Mouse", "Screen"

;FileInstall executable, A_WorkingDir . "/" . executable, 1
WatchCursor()
{
global timeout
global timer
global state
global valueOff
global valueOn
global executable
global command
MouseGetPos &xpos, &ypos
tooltip xpos . " " . timer . " " . state
if xpos > xPosLimit
{
timer := A_TickCount
if state == 1
{
; change input back
; MsgBox "switch on"
;Run executable . " setvcp " . command . " " . valueOn
state := 0
}
}
else
{
if (A_TickCount-timer) > timeout*60*1000
{
if state == 0
{
; change input
; MsgBox "switch off"
Run executable . " setvcp " . command . " " . valueOff
state := 1
}
}
}
}

Grundsätzlich kann ich ja damit leben, da dieses Skript grundsätzlich jetzt funktioniert, ausser dass es beim erstmaligen ausführen den Monitor direkt ausstellt. Das passiert ja nur ein einziges mal, könnte also damit leben. Aber falls du noch eine Idee hast, warum das passiert, wäre das natürlich auch nicht schlecht.

Milchkanne
2023-08-17, 12:29:24
Der im Tooltip angezeigte Timer ist die Zeit, in der als letztes auf dem Rechten Monitor gearbeitet wurde. Wenn du auf dem Monitor arbeitest, zählt die immer hoch. Bist du auf dem linken Monitor, wird die Zahl nicht mehr aktualisiert und mit der aktuellen Zeit verglichen. Ist die dann größer als der Timeout, wird abgeschaltet. Du hast recht, der Timeout war irgendwie nie aktiviert und ich hatte das jetzt erst korrigiert. Das < oder > hat halt damit zu tun, welcher Monitor rechts oder links steht und wie Windows das behandelt. Ich hatte das nochmal geändert....

Dein Problem... ist vermutlich folgende Zeile:

timer := 0

Der erste Vergleich "A_TickCount-timer > Timeout" ist damit praktisch immer true. Ersetze die Zeile timer:=0 durch

timer := A_TickCount

dann sollte es gehen.

Platos
2023-08-17, 13:10:11
Ahh, ja ok das ergibt Sinn. So habe ich das noch nicht gesehen.

Und tatsächlich, jetzt funktioniert es und es stellt beim Starten des Skripts nicht direkt der Monitor ab.

Also d.h das Skript funktioniert jetzt soweit:)

Danke nochmals für die ganze Hilfe!

Milchkanne
2023-08-17, 14:29:35
Ja gerne.

Es wurmt mich ja doch, dass dein Monitor sich nicht wieder anschalten lässt. Bei mir geht das.

Spiel nochmal mit allen DPMS werten rum. Bei dem Monitor hier geht ausschalten mit valueOff = 04 und Einschalten mit 01. Bei nem anderen (wenn ich mich recht erinnere) aus mit 05 und an mit 01... (Du musst dann natürlich die Zeile mit "execute ... valueon" auch auskommentieren)