외부 디스플레이가 연결된 경우 절전 모드 끄기

외부 디스플레이가 연결된 경우 절전 모드 끄기

외부 디스플레이에 연결된 경우 절전 모드로 전환하지 않고 노트북을 닫고 싶습니다. 외부 디스플레이에 연결되어 있지 않을 때 덮개를 닫으면 노트북이 절전 모드로 전환되도록 하고 싶습니다.
전원 설정을 수동으로 전환하면 이 작업을 수행할 수 있다는 것을 알고 있지만 자동으로 설정하고 싶습니다. 어떤 아이디어? 외부 디스플레이 연결을 추적할 수 있나요?
윈도우 10

답변1

  1. 두 가지 전원 구성표를 결정(또는 필요한 경우 생성)합니다. 하나는 절전 버튼이 활성화되고 다른 하나는 비활성화됩니다.

  2. 명령을 사용하여 powercfg /l이러한 체계의 GUID를 결정합니다.

  3. AutoHotKey를 설치하고 Windows를 시작할 때마다 이 모니터링 스크립트를 실행하도록 설정하세요. 모니터가 연결되거나 연결 해제될 때마다 AutoHotKey는 전원 구성표를 전환하는 스크립트를 실행합니다.

    온메시지(0x219, "MsgMonitor")
    MsgMonitor(wParam, lParam, 메시지)
    {
        if (wParam = 7) {
            실행, powercfg /s 381b4222-f694-41f0-9685-ff5bb260df2e
        } 또 다른 {
            실행, powercfg /s 381b4222-0001-2222-3333-000000000000
        }
        MsgBox는 %wParam% 및 %lParam%을 확인하고 %msg%로 프로그램을 실행하도록 결정합니다.
    }
    ;wParam: 7 lParam: 0 모니터가 연결됨
    ;wParam: 32772 lParam: 8977536은 연결이 끊어져야 합니다.

중요한:위 코드의 샘플 GUID를 단계에서 결정한 GUID로 바꿉니다.2.

출처:

답변2

@miroxlav 솔루션이 나에게 적합하지 않았습니다. 스크립트를 다음과 같이 변경했습니다.

  • 여전히 두 개의 절전 구성을 만들어야 합니다.
  • AutoHotKey 스크립트는 일반적으로 시작 시 실행됩니다.
  • 잡힌 이벤트가 약간 다릅니다(WM_DISPLAYCHANGE)
  • powershell get-WmiObject 또는 장치 관리자에서 기본 모니터 인스턴스 이름을 식별해야 합니다.
  • 전원 구성 UUID도 스크립트에 하드 코딩되어 있습니다.
    /*
       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
    }

}

답변3

@miroxlav 솔루션이 작동했지만 외부 디스플레이를 제거하면 원래 전원 설정으로 돌아가지 않습니다. 내가 한 방법은 다음과 같습니다.

  1. 덮개가 닫힐 때 절전 모드를 비활성화하는 전원 계획을 만듭니다.
  2. 덮개가 닫혀 있을 때 절전 모드를 비활성화하지 않는 전원 계획을 만드세요.
  3. 오토핫키 설치

메모장을 열고 아래 코드를 붙여넣으세요. AHK로 저장하고 실행하세요.

이 자동 핫키 스크립트는 모니터 수와 기본 모니터를 감지합니다. 모니터 수가 1보다 크면 전원 설정이 변경됩니다. 해당 전원 구성표를 붙여넣는 것을 잊지 마세요.

이것이 작동한다면 시작 시 Win + R을 눌러 이 스크립트를 실행한 다음 shell:startup거기에 스크립트를 입력하고 붙여넣을 수 있습니다.

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 */
     }

관련 정보