Desligar o modo de suspensão quando um monitor externo estiver conectado

Desligar o modo de suspensão quando um monitor externo estiver conectado

Quando estou conectado a um monitor externo, gostaria de fechar o laptop sem que ele entre no modo de suspensão. Quando não estou conectado a um monitor externo, gostaria que o fechamento da tampa colocasse o laptop em suspensão.
Sei que posso conseguir isso alterando manualmente as configurações de energia, mas gostaria de algo automático. Qualquer ideia? Podemos rastrear a conexão do monitor externo?
Janelas 10

Responder1

  1. Determine (ou crie, se necessário) dois esquemas de energia, um com o botão de suspensão ativado e outro desativado.

  2. Usando o comando powercfg /ldetermine os GUIDs desses esquemas.

  3. Instale o AutoHotKey e configure o lançamento deste script de monitoramento após cada inicialização do Windows. Cada vez que o monitor for conectado e desconectado, o AutoHotKey executará o script para você, alternando o esquema de energia:

    OnMessage(0x219, "MsgMonitor")
    MsgMonitor(wParam, lParam, msg)
    {
        if (wParam = 7) {
            Execute, powercfg /s 381b4222-f694-41f0-9685-ff5bb260df2e
        } Outro {
            Execute, powercfg /s 381b4222-0001-2222-3333-000000000000
        }
        MsgBox verifica %wParam% e %lParam% e decide executar programas com %msg%
    }
    ;wParam: 7 lParam: 0 monitor conectado
    ;wParam: 32772 lParam: 8977536 deve estar desconectado

Importante:Substitua os GUIDs de amostra no código acima pelos GUIDs determinados na etapa2.

Fontes:

Responder2

A solução @miroslavv não funcionou para mim. Alterei o script da seguinte maneira.

  • Você ainda precisa criar duas configurações de economia de energia
  • O script AutoHotKey normalmente é executado na inicialização.
  • O evento capturado é um pouco diferente (WM_DISPLAYCHANGE)
  • Você deve identificar o nome da instância do monitor principal no powershell get-WmiObject ou no gerenciador de dispositivos ou ...
  • Os UUIDs de configuração de energia também são codificados em script.
    /*
       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
    }

}

Responder3

A solução @miroslavv funcionou, porém quando você remove o monitor externo, ele não retorna à configuração de energia original. Veja como eu fiz isso.

  1. Crie um plano de energia que desative a suspensão quando a tampa estiver fechada.
  2. Crie um plano de energia que NÃO desative o sono quando a tampa estiver fechada.
  3. Instale o AutoHotKey

Abra o bloco de notas e cole o código abaixo. Salve como AHK e execute.

Este script autohotkey detecta a contagem de monitores e o monitor primário. Se a contagem do monitor for maior que 1, a configuração de energia será alterada. Não se esqueça de colar os esquemas de energia correspondentes.

Se funcionar, você pode executar este script na inicialização pressionando Win + R, digitar shell:startupe colar o script lá.

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

informação relacionada