Desactivar el modo de suspensión cuando se conecta una pantalla externa

Desactivar el modo de suspensión cuando se conecta una pantalla externa

Cuando estoy conectado a una pantalla externa, me gustaría cerrar la computadora portátil sin que entre en suspensión. Cuando no estoy conectado a una pantalla externa, me gustaría que al cerrar la tapa la computadora portátil entre en suspensión.
Sé que puedo lograr esto cambiando manualmente la configuración de energía, pero me gustaría algo automático. ¿Alguna idea? ¿Podemos rastrear la conexión de la pantalla externa?
ventanas 10

Respuesta1

  1. Determine (o cree, si es necesario) dos combinaciones de energía, una con el botón de suspensión habilitado y otra con el botón deshabilitado.

  2. Usando el comando powercfg /ldetermine los GUID de estos esquemas.

  3. Instale AutoHotKey y configure el inicio de este script de monitoreo después de cada inicio de Windows. Cada vez que el monitor se conecta y desconecta, AutoHotKey ejecutará el script por usted, cambiando la combinación de energía:

    OnMessage(0x219, "Monitormensaje")
    MsgMonitor(wParam, lParam, msg)
    {
        si (wParam = 7) {
            Ejecutar, powercfg /s 381b4222-f694-41f0-9685-ff5bb260df2e
        } Demás {
            Ejecutar, powercfg /s 381b4222-0001-2222-3333-000000000000
        }
        MsgBox verifica %wParam% y %lParam% y decide ejecutar programas con %msg%
    }
    ;wParam: 7 lParam: 0 monitor conectado
    ;wParam: 32772 lParam: 8977536 debe estar desconectado

Importante:Reemplace los GUID de muestra en el código anterior con los GUID que determinó en el paso2.

Fuentes:

Respuesta2

La solución @miroxlav no me funcionó. Cambié el guión de la siguiente manera.

  • Aún tienes que crear dos configuraciones de ahorro de energía.
  • El script AutoHotKey normalmente se ejecuta al inicio.
  • El evento capturado es un poco diferente (WM_DISPLAYCHANGE)
  • Debe identificar el nombre de la instancia de su monitor principal desde powershell get-WmiObject o el administrador de dispositivos o...
  • Los UUID de configuración de energía también están codificados en el 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
    }

}

Respuesta3

La solución @miroxlav funcionó, sin embargo, cuando retira la pantalla externa, no volverá a la configuración de energía original. Así es como lo hice.

  1. Cree un plan de energía que desactive el modo de suspensión cuando la tapa esté cerrada.
  2. Cree un plan de energía que NO desactive el modo de suspensión cuando la tapa esté cerrada.
  3. Instalar AutoHotKey

Abra el bloc de notas y pegue el código a continuación. Guarde como AHK y ejecute.

Este script de autohotkey detecta el recuento de monitores y el monitor principal. Si el recuento del monitor es mayor que 1, cambiará la configuración de energía. No olvides pegar los esquemas de energía correspondientes.

Si esto funciona, puede ejecutar este script al inicio presionando Win + R, luego escriba shell:startupy pegue el script allí.

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

información relacionada