¿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)?


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

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!


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.


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


¡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.


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


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").


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.


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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.