Dormir una computadora a través de un archivo por lotes en Windows 7

14

Quiero hacer un archivo por lotes que duerma mi computadora después de un período de tiempo.

Lo más parecido que he encontrado es ponerlo en modo de espera, pero parece funcionar de manera diferente que el botón de suspensión en mi teclado (un arranque más largo, no se activa al hacer clic con el mouse). ¿Algunas ideas? ¿Sería más fácil en Python o C #?

La técnica menos ideal que se menciona anteriormente es llamar a esto en el indicador de cmd:

Rundll32.exe powrprof.dll,SetSuspendState
Saebin
fuente
Simplemente agregue una parte de cuenta regresiva al .bat y ejecútelo después de eso.
Apache
parece un duplicado de superuser.com/questions/83437/…
akira
La hibernación es totalmente diferente, pero sí, esa es la solución correcta, supongo.
Apache
Creo que lo de Rundll es lo mismo que la hibernación. Con el modo de suspensión, hace clic con el mouse y su pantalla de inicio de sesión está allí en un par de segundos ... la hibernación debe volver a verificar la BIOS, los discos duros y transferir el estado guardado del disco duro a la memoria RAM y luego iniciar las ventanas. El único inconveniente para dormir es si pierde energía y se pierde el estado guardado almacenado en la memoria RAM (y las PC más antiguas en realidad dejan más componentes encendidos, como PSU y ventiladores).
Saebin

Respuestas:

26

Simplemente comando

rundll32.exe powrprof.dll,SetSuspendState

El sistema hiberna , pero si escribe esto:

rundll32.exe powrprof.dll,SetSuspendState 0,1,0

Y apague la hibernación con el comando:

powercfg -hibernate off

Ahora su sistema se dormirá y se activará con el movimiento del mouse si se le selecciona un dispositivo (desplácese hacia abajo para saber cómo).

Lote un temporizador:

timeout /t 1200
rundll32.exe powrprof.dll,SetSuspendState 0,1,0

Donde 1200 son segundos, lo que significa que después de 20 minutos el lote ejecutará el comando de suspensión.

Opcionalmente, puede evitar la cancelación de la cuenta regresiva (si presiona cualquier tecla en la ventana de lote):

timeout /t 1200 /nobreak
rundll32.exe powrprof.dll,SetSuspendState 0,1,0

Pequeño CÓMO sobre despertarse con el mouse:

Vaya a: Inicio -> Panel de control -> Mouse.

texto alternativo

En la ventana Propiedades del mouse , haga clic en la pestaña Hardware y seleccione su mouse de la lista de dispositivos. Normalmente, solo se mostrará un mouse aquí, pero eso dependerá del hardware que haya conectado a su computadora. Cuando haya seleccionado su mouse de la lista, haga clic en el botón Propiedades .

texto alternativo

Ahora, en la ventana Propiedades de su mouse, haga clic en el botón Cambiar configuración en la pestaña General .

texto alternativo

En la ventana que se abre, haga clic en la pestaña Administración de energía y marque la opción titulada Permitir que este dispositivo active la computadora . Haga clic en el botón Aceptar en esta ventana y haga clic en el botón Aceptar en la ventana Propiedades del mouse que aún está abierta. A partir de ahora, puede activar Windows 7 desde el modo de suspensión haciendo clic en un botón del mouse o moviéndolo.

texto alternativo

Anotomix
fuente
3
wow hombre, realmente te gusta responder preguntas :)
Omu
2
shutdown /h

hibernará la computadora (aunque no estoy seguro de suspender).

Stacey Richards
fuente
2

Solución de trabajo!
Tuve que usar la PsShutdownutilidad para permitir un sueño adecuado (el problema principal es SetSuspendStateque no permite que los temporizadores de activación despierten la máquina). Mi archivo por lotes para dormir es 1 línea simple:

PsShutdown -d -t 2
Ritmo P
fuente
Lea Cómo recomiendo el software para obtener algunos consejos sobre cómo debe recomendar el software. Debe proporcionar al menos un enlace, información adicional sobre el software en sí y cómo se puede usar para resolver el problema en la pregunta.
DavidPostill
1
Esto no funcionó en mi pc ...
mrbengi
1

.NET al rescate. Esta solución puso la computadora en suspensión sin necesidad de cambiar la configuración de la PC (apagar la hibernación). Ejecute este comando en lote:

powershell.exe -command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Application]::SetSuspendState([System.Windows.Forms.PowerState]::Suspend, $false, $false)"

Puedes usarlo ::Suspendpara dormir o ::Hibernate(como funciona la otra respuesta). Documentación para SetSuspendState.

Como el System.Windows.Formsespacio de nombres no se carga de forma predeterminada (sí lo hace en Powershell ISE), primero debe cargar el ensamblaje para eso.

respuesta original

Velda
fuente
0

Puede probar SetSystemPowerState para evitar tener que deshabilitar Hiberanate.

rundll32.exe kernel32.dll, SetSystemPowerState

Tenga en cuenta que al agregar 1,0 o 1 0 o incluso al hacer Rundll32.exe powrprof.dll, SetSuspendState 0 0 1 o Rundll32.exe powrprof.dll, SetSuspendState 0,0,1, los argumentos (0,0,1) no significan NADA.

Powrprof.dll, SetSuspendState no analiza los argumentos de estilo rundll32 y, por lo tanto, los ignora. Es por eso que debes deshabilitar la hibernación.

Rodney
fuente
1
Esto es útil para Windows XP, no para Vista o posterior.
Rodney
1
Tenga en cuenta que rundll32 ignora los argumentos que le da (de ahí que SetSuspendState siempre hiberne) ya que la DLL no está diseñada para aceptar argumentos de rundll32.
Rodney
-1: Esto es totalmente incorrecto. No funciona bajo el sistema operativo deseado del OP.
nc4pk
rundll32 NO pasa los argumentos, por lo tanto, tiene que deshabilitar Hibernate para que funcione. Los argumentos predeterminados le dicen que hiberne siempre, pero si la hibernación está deshabilitada, la API DLL se pone en suspensión por defecto.
Rodney
0

Simplemente cree un archivo por lotes e inserte las siguientes líneas:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
Chris Fischer
fuente