连接外接显示器时关闭睡眠模式

连接外接显示器时关闭睡眠模式

当我连接到外部显示器时,我想关闭笔记本电脑而不让它进入睡眠状态。当我没有连接到外部显示器时,我想关闭盖子让笔记本电脑进入睡眠状态。
我知道我可以通过手动切换电源设置来实现这一点,但我想要一些自动的东西。有什么想法吗?我们可以跟踪外部显示器连接吗?
Windows 10

答案1

  1. 确定(或创建,如果需要)两个电源方案,一个启用睡眠按钮,一个禁用。

  2. 使用命令powercfg /l确定这些方案的 GUID。

  3. 安装 AutoHotKey 并设置每次启动 Windows 后启动此监控脚本。每次连接和断开监视器时,AutoHotKey 都会为您运行脚本,切换电源方案:

    消息监听(0x219,“MsgMonitor”)
    MsgMonitor(wParam,lParam,msg)
    {
        如果 (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 替换为您在步骤中确定的 GUID2

资料来源:

答案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. 安装 AutoHotKey

打开记事本并粘贴以下代码。保存为 AHK 并运行。

此 autohotkey 脚本检测显示器数量和主显示器。如果显示器数量大于 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 */
     }

相关内容