Automatisieren Sie, sodass das Schließen des Laptopdeckels nichts bewirkt, wenn und nur wenn ein externer Monitor angeschlossen ist

Automatisieren Sie, sodass das Schließen des Laptopdeckels nichts bewirkt, wenn und nur wenn ein externer Monitor angeschlossen ist

Bitte nicht als Duplikat markieren, bevor Sie nicht alles gelesen haben. Ich habe die anderen Beiträge gelesen und sie lösen mein Problem nicht.

Ich verwende einen Laptop mit einem externen Display. Wenn das Display angeschlossen ist, möchte ich den Deckel schließen, damit nichts passiert. Wenn das Display jedoch nicht angeschlossen ist, möchte ich den Deckel schließen, damit der Laptop in den Ruhezustand wechselt.

Was ich jetzt mache, ist, in meinen Einstellungen „Deckel schließen“ auf „Nichts tun“ zu stellen, wenn ich das externe Display verwende, und versuche daran zu denken, es wieder zurückzusetzen, wenn ich das Display abtrenne. Aber ich vergesse es oft und dann bleibt mein Laptop stundenlang eingeschaltet, obwohl ich denke, dass er in den Ruhezustand gegangen ist, und entlädt den Akku.

Ich verwende AutoHotkey bereits. Wenn es also eine einfache Möglichkeit gibt, ein externes Display in AutoHotkey zu erkennen, wäre das ein Anfang. Dann könnte ich zwei Energiesparpläne erstellen und zwischen ihnen wechseln (ist das in AutoHotkey möglich?).

Ich habe bereits sysget und MonitorCount ausprobiert, aber das funktioniert nicht, da die Anzahl der Monitore sowohl 1 ist, wenn ich nur den externen Monitor habe, als auch wenn ich nur den Laptop-Monitor habe.

Antwort1

Ich kenne keine eindeutigen Antworten auf Ihr Problem. Aber es gibt ein paar Dinge, die Sie versuchen könnten:

  1. Laptop vor dem Zuklappen kurz ans Stromnetz anschließen.Sie können das Schließen des Deckels so einstellen, dass beim Einstecken nichts passiert, das Gerät jedoch in den Ruhezustand wechselt, wenn es nicht eingesteckt ist. Wenn Sie also Ihren Monitor verwenden, können Sie den Laptop einstecken, den Deckel schließen und ihn dann wieder ausstecken (der Laptop bleibt aktiv).
  2. Schließen Sie den Laptop direkt nach dem Einschalten.Meiner Erfahrung nach wechselt der Laptop nicht in den Ruhezustand, wenn Sie ihn direkt nach dem Einschalten schließen. (Wahrscheinlich, weil Windows noch keinen der Prozesse geladen hat, die den Ruhezustand veranlassen, wenn Sie den Deckel schließen.)
  3. Drücken Sie die Tastenkombination "[WIN]+X,U,S", um in den Ruhezustand zu wechselnEiner meiner Computer macht nichts, außer herunterzufahren, wenn ich den Deckel schließe, also habe ich mir angewöhnt, die Tastenkombination zum Ruhezustand zu verwenden:Halten Sie die Windows-Taste gedrückt und drücken Sie „x“. Lassen Sie sie los und drücken Sie dann die Tasten „u“ und „s“, ohne sie gedrückt zu halten.Wenn Sie den Dreh erst einmal raus haben, kann die Verwendung dieser Tastenkombination wesentlich effizienter sein, als den Ruhezustand des Computers über das Startmenü zu veranlassen.

Antwort2

Sie können natürlich grundsätzlich alles in AHK tun. Sie können Pläne erstellen, einen winzigen Screenshot der genauen Schaltfläche und Position erstellen, die Sie aktivieren möchten, und dann ein AHK-Skript schreiben, um den Power-Dialog zu öffnen, anhand Ihres PNG/JPG nach genau diesem Plan zu suchen, darauf zu klicken und dann den Power-Dialog zu schließen.

Dies ist vielleicht nicht die beste Option, aber es ist eine Möglichkeit. Sie können sich geplante Aufgaben ansehen, da ich glaube, dass taskschd.msc den aktuellen Energiesparplan ermitteln kann.

Antwort3

Keine vollständige Antwort, aber vielleicht einige Hinweise:

Monitore haben Namen. Hier ist beispielsweise ein Screenshot eines Programms namens ClickMonitorDDC, mit dem ich die Helligkeit meines Monitors nach Bedarf über die Taskleiste und einen Shortcut ändere:

Ein Screenshot, der die Namen von zwei angeschlossenen Monitoren zeigt: Der interne Laptop-Monitor und ein angeschlossener Dell-Monitor.

Bildschirmfoto

Hier istetwas, das ich mit Autohotkey gefunden habezum Suchen von Modellnummern in AutoHotKey.

Und schließlich ist hieretwas über das Ändern von Energiesparplänen über AutoHotKey.

Antwort4

Hinweis: Ich bin kein Autohotkey-Benutzer.

Hier ist, was ich gefunden habe beidieser Link?

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance force

; Defines getMonitorInputSource
; Finds monitor handle
getMonitorHandle()
{
  ; Initialize Monitor handle
  hMon := DllCall("MonitorFromPoint"
    , "int64", 0 ; point on monitor
    , "uint", 1) ; flag to return primary monitor on failure

    
  ; Get Physical Monitor from handle
  VarSetCapacity(Physical_Monitor, 8 + 256, 0)

  DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
    , "int", hMon   ; monitor handle
    , "uint", 1   ; monitor array size
    , "int", &Physical_Monitor)   ; point to array with monitor

  return hPhysMon := NumGet(Physical_Monitor)
}

destroyMonitorHandle(handle)
{
  DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)
}

getMonitorInputSource()
{
  handle := getMonitorHandle()
  DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"
    , "int", handle
    , "char", 0x60 ;VCP code for Input Source Select
    , "Ptr", 0
    , "uint*", currentValue
    , "uint*", maximumValue)
  destroyMonitorHandle(handle)
  return currentValue
}

MouseLock := False

!+l::
    If (!MouseLock && getMonitorInputSource() == 4) {
        MouseLock := True
        BlockInput, MouseMove
        return
        }

    Else {
        MouseLock := False
        BlockInput, MouseMoveOff
        return
        }

#If (getMonitorInputSource() == 4 && !MouseLock)
XButton2::
    If (!WinExist("ahk_exe Magnify.exe")) {
        Send, #=
        return
        }
    If (WinExist("ahk_exe Magnify.exe")) {
        Send, #{Esc}
        return
        }

#If (getMonitorInputSource() == 4 && MouseLock)
XButton2::
    If (!WinExist("ahk_exe Magnify.exe")) {
        Send, #=
        BlockInput, MouseMoveOff
        return
        }
    If (WinExist("ahk_exe Magnify.exe")) {
        Send, #{Esc}
        BlockInput, MouseMove
        return
        }

verwandte Informationen