¿Cómo puedo usar un archivo .bat para hacer que la computadora vuelva a dormir cada vez que se activa inesperadamente?

3

https://c1.staticflickr.com/1/623/22056481124_6cb41164ee_b.jpg
Wake History Count - 1
Wake History [0]
Wake Source Count - 1
Wake Source [0]

https://c1.staticflickr.com/1/763/21680581753_ce45aa17a1_b.jpg
Wake History Count - 1
Wake History [0]
Wake Source Count - 0
(No se muestra Wake Source)

Si presiono una tecla para activar mi computadora desde el modo de suspensión, el resultado será el que se muestra en la captura de pantalla 1.
Si la computadora se despierta inesperadamente, el resultado será el que se muestra en la captura de pantalla 2.
He probado varios métodos, pero en realidad no hay forma de evitar que la computadora se active inesperadamente.
El problema no surgió hasta que actualicé mi Windows 7 a Windows 10 el mes pasado, por lo que creo que el problema radica en Windows 10 en lugar de mi computadora, a la que no se han realizado cambios de hardware.
En Visor de sucesos, los sucesos que ocurren cuando se despierta inesperadamente son exactamente los mismos que los que se producen cuando se despierta normalmente (es decir, me despierto de forma manual)
en la configuración de energía, bajo condiciones, despertando el equipo para ejecutar la tarea ha sido desactivado .
Mediante el Programador de tareas, un archivo .bat se puede ejecutar automáticamente cada vez que la computadora se activa, ya sea de forma inesperada o normal.
¿Qué comandos se pueden usar en el archivo para que la computadora vuelva a dormir automáticamente cada vez que se despierte inesperadamente?

Matthew Wai
fuente

Respuestas:

1

Prueba esto:

powercfg -lastwake | findstr /I /C:"Type:"
if %errorlevel% == 0 (
    echo woken up by something
) else (
    echo woken up unexpectedly
)

En resumen, solo busca Type:en la salida de powercfg -lastwakey, si no existe, supone que la máquina se despertó inesperadamente.

Si realmente desea que la máquina vuelva a dormir, reemplace la segunda echocon lo siguiente:

powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on

Tenga en cuenta que su computadora podría entrar en un bucle donde se despierta, ejecuta este script, vuelve a dormir, se despierta, ejecuta este script, vuelve a dormir y así sucesivamente.

Ricardo
fuente
En mi computadora, if %errorlevel% == 0no funciona, pero if errorlevel 0funciona.
Matthew Wai
Lo acabo de probar. Cuando se despierta normalmente, Type:será 0 y 1. Cuando se despierte inesperadamente, Type:también será 0 y 1. No hay diferencias. ¿Que puedo hacer?
Matthew Wai el
¿Por qué deshabilitas y habilitas la hibernación? Eso parece totalmente innecesario?
Tonny el
No, he suprimido powercfg -h offy powercfg -h on, y sólo tiene que utilizar rundll32.exe powrprof.dll,SetSuspendState 0,1,0. El problema es que el nivel de error del despertar normal es el mismo que el del despertar inesperado. Lo he intentado if errorlevel 2, pero ese no es el resultado de una vigilia normal e inesperada.
Matthew Wai el
@Tonny Descubrí que si no deshabilitas la hibernación primero rundll32.exe powrprof.dll,SetSuspendState 0,1,0, hibernará la computadora en lugar de ponerla en suspensión. Si hay una mejor manera de hacer esto, ¡soy todo oídos!
Richard