No lo marque como duplicado antes de leerlo completo. He leído las otras publicaciones y no resuelven mi problema.
Estoy usando una computadora portátil con una pantalla externa. Cuando la pantalla está conectada, me gustaría cerrar la tapa para no hacer nada. Sin embargo, cuando la pantalla no está conectada, me gustaría cerrar la tapa para que la computadora portátil entre en modo de suspensión.
Lo que estoy haciendo ahora es configurar "cerrar la tapa" para "no hacer nada" en mi configuración cuando uso la pantalla externa, y trato de acordarme de volver a configurarlo una vez que desconecto la pantalla. Pero a menudo lo olvido y luego mi computadora portátil permanece encendida durante horas cuando creo que se ha ido a dormir, agotando la batería.
Ya uso autohotkey, así que si hay una forma sencilla de detectar una pantalla externa en AutoHotkey, sería un comienzo. Entonces podría crear dos planes de energía y cambiar entre ellos (¿es posible en AutoHotkey?).
Ya probé sysget, MonitorCount pero eso no funciona porque la cantidad de monitores es 1 tanto cuando tengo solo el monitor externo como cuando solo tengo el monitor de la computadora portátil.
Respuesta1
No conozco ninguna respuesta sólida a tu problema. Pero hay algunas cosas que puedes probar:
- Enchufando brevemente el portátil antes de cerrarlo.Puede configurar el cierre de la tapa para que no haga nada cuando esté enchufado, pero que se suspenda si no está enchufado. Entonces, cuando esté usando su monitor, puede enchufar la computadora portátil, cerrar la tapa y luego desenchufarla (la computadora portátil permanecerá despierta). )
- Cerrar la computadora portátil inmediatamente después de encenderla.En mi experiencia, si cierras la computadora portátil inmediatamente después de encenderla, no entrará en modo de suspensión. (Probablemente porque Windows aún no ha cargado ninguno de los procesos que le indican que entre en suspensión cuando cierra la tapa).
- Presionando la tecla de acceso directo "[WIN]+X,U,S" para dormirUna de mis computadoras no hace nada más que apagarse cuando cierro la tapa, así que me he acostumbrado a usar el atajo de suspensión:Mantenga presionada la tecla de Windows y presione "x". Suelte y luego presione las teclas "u" y "s" sin mantenerlas presionadas.Una vez que lo domines, usar este acceso directo puede ser mucho más eficiente que ir al menú de inicio para suspender la computadora.
Respuesta2
Por supuesto, básicamente puedes hacer cualquier cosa en AHK. Puede crear planos, tomar una pequeña captura de pantalla del botón exacto y la ubicación que desea habilitar y luego escribir un script AHK para abrir el cuadro de diálogo de encendido, buscar ese plan exacto según su png/jpg, hacer clic en él y luego cerrar. el diálogo de poder.
Quizás esta no sea la mejor opción, pero es una opción. Puede consultar las tareas programadas, ya que creo que taskchd.msc tiene la capacidad de determinar el plan de energía actual.
Respuesta3
No es una respuesta completa, pero quizás algunos consejos:
Los monitores tienen nombres. Por ejemplo, aquí hay una captura de pantalla de un programa que uso para cambiar el brillo de mi monitor a pedido mediante el uso de la barra de tareas y el shotcut llamado ClickMonitorDDC:
Una captura de pantalla que muestra los nombres de dos monitores conectados: el de la computadora portátil interna y el de Dell conectado.
Aquí estáalgo que encontré usando autohotkeypara buscar números de modelo en AutoHotKey.
Y finalmente, aquí estáalgo sobre cambiar planes de energía a través de AutoHotKey.
Respuesta4
Nota: no soy un usuario de autohotkey.
Esto es lo que encontré eneste enlace?
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
; Defines getMonitorInputSource
; Finds monitor handle
getMonitorHandle()
{
; Initialize Monitor handle
hMon := DllCall("MonitorFromPoint"
, "int64", 0 ; point on monitor
, "uint", 1) ; flag to return primary monitor on failure
; Get Physical Monitor from handle
VarSetCapacity(Physical_Monitor, 8 + 256, 0)
DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
, "int", hMon ; monitor handle
, "uint", 1 ; monitor array size
, "int", &Physical_Monitor) ; point to array with monitor
return hPhysMon := NumGet(Physical_Monitor)
}
destroyMonitorHandle(handle)
{
DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)
}
getMonitorInputSource()
{
handle := getMonitorHandle()
DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"
, "int", handle
, "char", 0x60 ;VCP code for Input Source Select
, "Ptr", 0
, "uint*", currentValue
, "uint*", maximumValue)
destroyMonitorHandle(handle)
return currentValue
}
MouseLock := False
!+l::
If (!MouseLock && getMonitorInputSource() == 4) {
MouseLock := True
BlockInput, MouseMove
return
}
Else {
MouseLock := False
BlockInput, MouseMoveOff
return
}
#If (getMonitorInputSource() == 4 && !MouseLock)
XButton2::
If (!WinExist("ahk_exe Magnify.exe")) {
Send, #=
return
}
If (WinExist("ahk_exe Magnify.exe")) {
Send, #{Esc}
return
}
#If (getMonitorInputSource() == 4 && MouseLock)
XButton2::
If (!WinExist("ahk_exe Magnify.exe")) {
Send, #=
BlockInput, MouseMoveOff
return
}
If (WinExist("ahk_exe Magnify.exe")) {
Send, #{Esc}
BlockInput, MouseMove
return
}