¿Cuál es el comando a utilizar para poner su computadora en suspensión (no hibernar)?

63

Quiero poner mi PC con Windows (Windows 7) en un estado de suspensión a través de la línea de comandos (para poder vincularme al botón de macro en el teclado).

El botón de encendido de la PC está configurado para que la computadora duerma (pero está en el suelo y soy demasiado vago para alcanzarlo) exactamente como lo quiero (duerme usando el modo híbrido en caso de que pierda energía)

El comando de suspensión en el menú de apagado también funciona.

la mayoría de la información que encontré dice usar;

%windir%\system32\rundll32.exe PowrProf.dll, SetSuspendState 0,1,0

Pero esto pone a la computadora en modo de hibernación. Tengo la hibernación desactivada pero uso el sueño híbrido.

Entonces, ¿cuál es el comando a utilizar para poner su computadora en suspensión (no hibernar)?

Eric L
fuente
55
rundll32.exe PowrProf.dll,SetSuspendStateno es recomendado. Es peligroso. (Debido a que corrompe la pila, ya que no cumple con la firma de la función exigida por él Rundll32. Entonces pueden ocurrir cosas imprevisibles, como advierte Raymond Chen ...)
Aaron Thoma
Relacionado: superuser.com/questions/42124/…
Nayuki

Respuestas:

13

Encontré una solución. Instalé un programa gratuito llamado AutoHotKey y grabé los pasos para invocar Menú Inicio -> Suspender en un archivo de script. Luego cumplí el archivo de secuencia de comandos en un ejecutable independiente SleepWin7.exe.

Ahora simplemente ejecuto SleepWin7.exe para poner mi computadora en suspensión híbrida.

Puede desinstalar AutoHotKey si esto es todo lo que necesita.


Actualización: la solución anterior no funciona cuando el usuario no está conectado, es decir, la pantalla de inicio de sesión de Windows 7. (Mi computadora se despierta a las 4 am todos los domingos para realizar una copia de seguridad semanal, que se realiza sin inicio de sesión del usuario). En tal caso, el programa Wizmo aún funciona:

wizmo.exe silencioso en espera!

Andy Lee
fuente
3
Aquí hay un script AutoHotKey (usando el teclado); Enviar, {LWINDOWN} {LWINUP} WinWait, Menú de inicio, IfWinNotActive, Menú de inicio,, WinActivate, Menú de inicio, WinWaitActive, Menú de inicio, Enviar, {TAB} {UP} {RIGHT} s
Eric L
Esta es la solución que terminé usando. ya que es compatible con el sueño híbrido.
Eric L
+1 Esto se siente sucio pero funciona. Tuve que cambiar la última parte de Enviar a: "Enviar, {DERECHA} {DERECHA} s". Por cierto, casi te di un -1 para recomendar desinstalar AHK, ya que eso sería imperdonable :)
demoncodemonkey
También agregué esto al comienzo del script para asegurar que los comandos vayan a la ventana del escritorio y evitar que se pierdan: WinActivate, ahk_class Progman
demoncodemonkey
1
Después de cambiar a Windows 8, ahora estoy usando NirCmd (muy ligero) y pone la computadora en suspensión híbrida; nircmd.exe standbyse puede encontrar más información aquí -> nirsoft.net/utils/nircmd.html
Eric L
73

Espero que encuentres estos útiles.

Apagar %windir%\System32\shutdown.exe -s

Reiniciar %windir%\System32\shutdown.exe -r

Desconectarse %windir%\System32\shutdown.exe -l

Colocarse %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

Hibernar %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

Precaución: rundll32.exe no debe usarse para iniciar powerprof.dll . En su lugar, debe llamar a SetSuspendState directamente. Esto se puede hacer con Powershell: cree un archivo, por ejemplo, sleep.ps1, con los siguientes contenidos.

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)

Luego ejecútalo usando powershell -File C:\your-path\sleep.ps1. Es posible que primero deba ejecutar el comando Set-ExecutionPolicy RemoteSignedpara habilitar la ejecución de scripts de PowerShell.

La secuencia de comandos anterior provoca una suspensión del sistema, que se suspenderá o hibernará dependiendo de su configuración de hibernación actual. Para cambiar esa configuración desde la línea de comandos, ejecute powercfg -h off(o on) desde la línea de comandos como administrador.

imoatama
fuente
44
whoa nice! +1 ...
studiohack
99
Esto es genial, pero ¿dónde está el de Sleeeeeeeeeeeeep?
demoncodemonkey
77
El atajo de espera puso mi máquina Win7 en hibernación :(
usuario
55
@demoncodemonkey: Standbyyyyyyyyyyyyy = Sleeeeeeeeeeeeep :)
Răzvan Flavius ​​Panda
11
Aparentemente no: superuser.com/a/331545/21887 Por lo tanto, se considera peligroso usar este método y no se recomienda. (Corrompe la pila.)
Aaron Thoma
16

Vea la utilidad gratuita de Wizmo , que puede hacer muchas cosas.
El comando que estás buscando es probablemente:

wizmo en espera

harrymc
fuente
¡Wizmo se ve muy bien! Casi me hace desear no ser un
fanático de
La utilidad no necesita ser instalada. Buena herramienta simple.
Artur Carvalho
2
wizmo.exe quiet standbysuprime los pitidos posiblemente molestos por wizmo.exe.
Aaron Thoma
14

Puede crear un archivo con extensión .ps1 (powershell) como "sleep.ps1" y escribir esto:

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)

Lo uso cuando tengo algo ejecutándose y tengo que dejar la PC y no quiero apagarlo. Entonces cambio el script para que se vea así:

$minutes = read-host "Enter minutes to wait until sleep";
$secs= 60*$minutes;
Start-sleep -s $secs

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)

Y ahora, cuando lo ejecuto, solo ingreso los minutos que quiero esperar hasta dormir.

Puede ejecutar esto desde la línea cmd escribiendo

powershell -File C:\your-path\sleep.ps1

Si nunca antes ha ejecutado un script de PowerShell, primero querrá ejecutar

Set-ExecutionPolicy RemoteSigned

en PowerShell para habilitar la ejecución de scripts. Esto solo debe ejecutarse una vez.

Artur Carvalho
fuente
¿No están los nombres de sus variables al revés?
Ullallulloo
11

Con Sysinternals PsTools [ descargar ]:

psshutdown -d

usando la herramienta de línea de comandos PsShutdown .

(Es posible que prefiera esta solución si ya ha descargado PsTools, es bastante utilizado. Aparte de eso, este enfoque es equivalente a usar ).wizmoquiet standby

Fuente: https://superuser.com/a/331545/21887

Aaron Thoma
fuente
7

He estado usando esta utilidad SLEEP.EXE durante años. Funciona bien, y no tiene que recordar qué argumentos darle para el modo de suspensión (su forma predeterminada de "suspensión").

jjlin
fuente
SLEEP.EXE funciona para mí, en Windows 7 Pro SP1. La página principal también enumera muchas otras herramientas de línea de comandos de aspecto útil para Windows. Gracias @jjlin!
LECTURA DE CÓDIGOS
6

para deshabilitar el modo de hibernación necesita usar

powercfg -h off

ahora, rundll32 powrprof.dll, SetSuspendState pondrá su estación en modo de espera

[EDITAR]

en realidad no puedo configurar una suspensión híbrida porque tengo una computadora portátil (un estado que no está disponible en estaciones móviles), para la suspensión híbrida necesita tener habilitada la hibernación y algunos dicen que rundll32 powrprof.dll, SetSuspendState activan la suspensión predeterminada modo en la configuración de panel de control \ administración de energía. intente si rundll32 powrprof.dll, el sueño híbrido SetSuspendState dan algunos resultados.


fuente
Esto también deshabilita el sueño híbrido, por lo que frustra el propósito
Eric L
rundll32 powrprof.dll, la suspensión híbrida SetSuspendState todavía pone la computadora en hibernación. Gracias por la idea.
Eric L
rundll32 no está diseñado para llamar a SetSuspendState, por lo que obtiene valores de parámetros incorrectos. Es por eso que siempre causa hibernación si no la ha deshabilitado intencionalmente.
SergeyT
5

Haga un archivo bat, donde 600 es retraso en segundos.

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h apagado

% windir% \ System32 \ rundll32.exe powrprof.dll, SetSuspendState Standby

dim77x
fuente
Excelente manera de poner la computadora en modo de suspensión, y muy fácil de enviar a alguien que quiera dormir programado.
Maurycy
Respuesta creativa!
Jane Panda
No use rundll32.exe para llamar a SetSuspendState: no está diseñado para eso. Ver explicaciones aquí
SergeyT
4

Si eres competente compilando un programa .NET, el siguiente comando hará esto

System.Windows.Forms.Application.SetSuspendState(PowerState.Suspend, 
                                                 false,   /* force */
                                                 true     /* disableWake */);

Nota: No necesita deshabilitar la hibernación como lo requiere el rundll32 powrprof.dll,SetSuspendStatecomando. También puede usar el PowerState.Hibernateque hibernará la máquina si lo desea.

Puede compilar fácilmente un EXE con este comando con cualquier versión de Visual Studio . Simplemente cree una aplicación de consola y agregue una referencia a la System.Windows.FormsDLL.

Simon
fuente
1
Wizmo mencionado anteriormente básicamente ya lo ha hecho, usarlo parece ser el equivalente. Y está escrito por Steve Gibson y es gratis, ¡así que probablemente sea mejor de lo que obtendría codificando a mano lo mismo!
stevemidgley
+1. Buscando algo como esto aquí superuser.com/q/310045/84229
usuario
Ni siquiera tiene que usar Visual Studiopara compilar. En cambio, se csc.exepodría usar el compilador de línea de comandos . Ya está instalado en todas las versiones modernas de Windows.
SergeyT