Ruhemodus ausschalten bei Anschluss eines externen Displays

Ruhemodus ausschalten bei Anschluss eines externen Displays

Wenn ich an ein externes Display angeschlossen bin, möchte ich den Laptop schließen, ohne dass er in den Ruhezustand wechselt. Wenn ich nicht an ein externes Display angeschlossen bin, möchte ich, dass das Schließen des Deckels den Laptop in den Ruhezustand versetzt.
Ich weiß, dass ich dies erreichen kann, indem ich die Energieeinstellungen manuell ändere, aber ich hätte gerne etwas Automatisches. Irgendeine Idee? Können wir die Verbindung zum externen Display verfolgen?
Windows 10

Antwort1

  1. Bestimmen Sie (oder erstellen Sie bei Bedarf) zwei Energieschemata, eines mit aktivierter und eines mit deaktivierter Standby-Taste.

  2. Bestimmen Sie mithilfe des Befehls powercfg /ldie GUIDs dieser Schemata.

  3. Installieren Sie AutoHotKey und richten Sie dieses Überwachungsskript so ein, dass es bei jedem Start von Windows gestartet wird. Jedes Mal, wenn der Monitor angeschlossen und getrennt wird, führt AutoHotKey das Skript für Sie aus und wechselt das Energieschema:

    BeiNachricht(0x219, "MsgMonitor")
    MsgMonitor(wParam, lParam, msg)
    {
        wenn (wParam = 7) {
            Führen Sie „powercfg /s 381b4222-f694-41f0-9685-ff5bb260df2e“ aus.
        } Anders {
            Führen Sie „powercfg /s 381b4222-0001-2222-3333-000000000000“ aus.
        }
        MsgBox prüft %wParam% und %lParam% und entscheidet, ob Programme mit %msg% ausgeführt werden sollen
    }
    ;wParam: 7 lParam: 0 Monitor angeschlossen
    ;wParam: 32772 lParam: 8977536 sollte auf getrennt stehen

Wichtig:Ersetzen Sie die Beispiel-GUIDs im obigen Code durch die GUIDs, die Sie in Schritt2.

Quellen:

Antwort2

Die Lösung von @miroxlav hat bei mir nicht funktioniert. Ich habe das Skript wie folgt geändert.

  • Sie müssen noch zwei Energiesparkonfigurationen erstellen
  • Das AutoHotKey-Skript wird normalerweise beim Start ausgeführt.
  • Das abgefangene Ereignis ist etwas anders (WM_DISPLAYCHANGE)
  • Sie müssen den Namen Ihrer Hauptmonitorinstanz über Powershell get-WmiObject oder den Geräte-Manager oder ... ermitteln.
  • Auch die UUIDs der Energiekonfiguration sind im Skript fest codiert.
    /*
       Please note that it is not sufficient to count the number of monitors because the
       main monitors goes off line when you close the lid.
       Which resets the count to... 1
       So instead, we just make our decision on the presence of a different monitor than the known
       main one (hardcoded id, SN is a poor criterion).
    */

    /*  
        Subscribe to windows event
        0x7E = WM_DISPLAYCHANGE
    */
    OnMessage(0x7E, "MsgMonitor")

    MsgMonitor(wParam, lParam, msg) {

    /* Sleep 2 sec because there is a delay before display is known to WMI */
    Sleep 2000

    /* default */
    strComputer := "."

    /* This is the one for my PC... */
    myMonitor := "DISPLAY\LGD056E\4&13419694&0&UID265988_0"

    objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" . strComputer . "\root\wmi")
    colItems := objWMIService.ExecQuery("Select * FROM WMIMonitorID")._NewEnum

    hasExternal := false

    While colItems[objItem]
    if objItem.instanceName != myMonitor {
        hasExternal := True
    }

    if ( hasExternal ) {
        /* this is the power config that does not set laptop to sleep on lid closing */event
        Run, powercfg /s a48ebd52-0590-400d-b032-ac7f4302c0e1
    } Else {
        /* this instead is the power config that does set laptop to sleep on lid closing event */
        Run, powercfg /s 377a8558-bff4-4f51-ab43-626b1aa5a65f
    }

}

Antwort3

Die Lösung von @miroxlav hat funktioniert, aber wenn Sie das externe Display entfernen, wird es nicht auf die ursprüngliche Energieeinstellung zurückgesetzt. So habe ich es gemacht.

  1. Erstellen Sie einen Energiesparplan, der den Ruhezustand deaktiviert, wenn der Deckel geschlossen ist.
  2. Erstellen Sie einen Energiesparplan, der den Ruhezustand NICHT deaktiviert, wenn der Deckel geschlossen ist.
  3. Installieren Sie AutoHotKey

Öffnen Sie den Editor und fügen Sie den folgenden Code ein. Als AHK speichern und ausführen.

Dieses Autohotkey-Skript erkennt die Anzahl der Monitore und den primären Monitor. Wenn die Anzahl der Monitore größer als 1 ist, wird die Energieeinstellung geändert. Vergessen Sie nicht, die entsprechenden Energieschemata einzufügen.

Wenn dies funktioniert, können Sie dieses Skript beim Start ausführen, indem Sie Win + R drücken, dann shell:startupdas Skript eingeben und dort einfügen.

OnMessage(0x219, "MsgMonitor")
     MsgMonitor(wParam, lParam, msg)
     {

        SysGet, MonitorCount, MonitorCount
        SysGet, MonitorPrimary, MonitorPrimary

        count := 0
        Loop, %MonitorCount%
        {
            count++
        }

        IfLessOrEqual, count, 1
            Run, powercfg /s c7046c63-d4a3-4246-910c-c994cd704433 /* no external monitor power setting */
        Else
            Run, powercfg /s 3791f438-87b9-4243-89a1-00c797e02c84 /* external monitor connected */
     }

verwandte Informationen