
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
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.
Usando el comando
powercfg /l
determine los GUID de estos esquemas.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.
- Cree un plan de energía que desactive el modo de suspensión cuando la tapa esté cerrada.
- Cree un plan de energía que NO desactive el modo de suspensión cuando la tapa esté cerrada.
- 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:startup
y 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 */
}