Qual é o comando a ser usado para colocar o computador no modo de suspensão (não hibernar)?

63

Quero colocar meu PC com Windows (Windows 7) em um estado de suspensão via linha de comando (para que eu possa ligar ao botão macro no teclado).

O botão liga / desliga do PC está configurado para, mas o computador dorme (mas está no chão e tenho preguiça de alcançá-lo) exatamente como eu quero (dorme usando o modo híbrido, no caso de falta de energia)

O comando de suspensão no menu de desligamento também funciona.

a maioria das informações que encontrei diz para usar;

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

Mas isso coloca o computador no modo de hibernação. Eu tenho hibernação desativada, mas usando sono híbrido.

Então, qual é o comando a ser usado para colocar o computador em suspensão (não em hibernação)?

Eric L
fonte
5
rundll32.exe PowrProf.dll,SetSuspendStatenão é recomendado. É perigoso. (Porque ele corrompe a pilha, como ele não cumprir com a assinatura da função exigida pelo Rundll32. Então imprevisíveis coisas ruins podem acontecer, como Raymond Chen adverte ...)
Aaron Thoma
Relacionados: superuser.com/questions/42124/...
Nayuki

Respostas:

13

Eu encontrei uma solução. Instalei um programa freeware chamado AutoHotKey e gravei as etapas para invocar o Menu Iniciar -> Dormir em um arquivo de script. Em seguida, compilei o arquivo de script em um SleepWin7.exe executável autônomo.

Agora, simplesmente executo o SleepWin7.exe para colocar meu computador em suspensão híbrida.

Você pode desinstalar o AutoHotKey se for tudo o que precisa.


Atualização: a solução acima não funciona quando o usuário não está logado, ou seja, a tela de login do Windows 7. (Meu computador acorda às 4h todos os domingos para realizar backup semanal, o que é feito sem o login do usuário.) Nesse caso, o programa Wizmo ainda funciona:

espera silenciosa do wizmo.exe!

Andy Lee
fonte
3
Aqui está um script AutoHotKey (usando o teclado); Enviar, {LWINDOWN} {LWINUP} WinWait, menu Iniciar, IfWinNotActive, menu Iniciar,, WinActivate, menu Iniciar, WinWaitActive, menu Iniciar, Enviar, {TAB} {UP} {RIGHT} s
Eric L
Esta é a solução que acabei usando. como ele suporta o sono híbrido.
Eric L
+1 Parece sujo, mas funciona. Eu tive que alterar a última parte de envio para: "Enviar, {DIREITA} {DIREITA} s". BTW eu quase deu-lhe uma -1 para recomendar para desinstalar AHK, pois isso seria :) imperdoável
demoncodemonkey
Eu também adicionou isto o início do roteiro para garantir os comandos ir para a janela de desktop, e impedi-los de se perder: WinActivate, ahk_class Progman
demoncodemonkey
11
Depois de mudar para o Windows 8, agora estou usando o NirCmd (muito leve) e deixa o computador em suspensão híbrida; nircmd.exe standbymais informações podem ser encontradas aqui -> nirsoft.net/utils/nircmd.html
Eric L
73

Espero que você ache isso útil.

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

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

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

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

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

Cuidado: o rundll32.exe não deve ser usado para iniciar o powerprof.dll . Em vez disso, você deve chamar SetSuspendState diretamente. Isso pode ser feito usando o Powershell - crie um arquivo, por exemplo, sleep.ps1, com o conteúdo abaixo.

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

Em seguida, execute-o usando powershell -File C:\your-path\sleep.ps1. Você pode primeiro executar o comando Set-ExecutionPolicy RemoteSignedpara permitir a execução de scripts do PowerShell.

O script acima causa uma suspensão do sistema, que será suspensa ou hibernada dependendo da sua configuração atual de hibernação. Para alterar essa configuração na linha de comando, execute powercfg -h off(ou on) na linha de comando como administrador.

imoatama
fonte
4
whoa nice! +1 ...
studiohack
9
Isso é ótimo, mas onde está o um para Sleeeeeeeeeeeeep
demoncodemonkey
7
O atalho de espera colocou minha máquina Win7 em hibernação :(
user
5
@demoncodemonkey: Standbyyyyyyyyyyyyy = Sleeeeeeeeeeeeep :)
Răzvan Flavius Panda
11
Aparentemente, não é: superuser.com/a/331545/21887 Portanto, é considerado perigoso usar este método e não recomendado. (Ela corrompe a pilha.)
Aaron Thoma
16

Veja o utilitário gratuito do Wizmo , que pode fazer muitas coisas.
O comando que você está procurando é provavelmente:

wizmo standby

harrymc
fonte
Wizmo parece muito legal! Quase me faz desejar que eu não era um fanboy mac
trolle3000
O utilitário não precisa ser instalado. Boa ferramenta simples.
Artur Carvalho
2
wizmo.exe quiet standbysuprime, indiscutivelmente, sinais sonoros irritantes wizmo.exe.
Aaron Thoma
14

Você pode criar um arquivo com a extensão .ps1 (powershell) como "sleep.ps1" e escrever o seguinte:

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

Eu uso isso quando tenho algo em execução e tenho que sair do PC e não quero desligá-lo. Então, mudo o script para ficar assim:

$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)

E agora, quando executo, apenas digito os minutos que quero esperar até dormir.

Você pode executar isso a partir da linha cmd escrevendo

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

Se você nunca executou um script do PowerShell antes, convém executar primeiro

Set-ExecutionPolicy RemoteSigned

no PowerShell para habilitar a execução de scripts. Isso só precisa ser executado uma vez.

Artur Carvalho
fonte
Os nomes das suas variáveis ​​não estão ao contrário?
Ullallulloo
11

Com o Sysinternals PsTools [ download ]:

psshutdown -d

usando a ferramenta de linha de comando PsShutdown .

(Você pode preferir esta solução se você já baixou o PsTools, é bastante usado. Fora isso, essa abordagem é equivalente a usar .)wizmoquiet standby

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

Aaron Thoma
fonte
7

Eu tenho usado este utilitário SLEEP.EXE há anos. Funciona bem e você não precisa se lembrar de quais argumentos dar para o modo de suspensão (sua forma padrão de "suspensão").

jjlin
fonte
SLEEP.EXE funciona para mim, no Windows 7 Pro SP1. A página pai também lista muitas outras ferramentas de linha de comando de aparência útil para Windows. Obrigado, @jjlin!
Leia-CODE
6

para desativar o modo de hibernação, você precisa usar

powercfg -h off

agora, rundll32 powrprof.dll, SetSuspendState colocará sua estação no modo de espera

[EDITAR]

na verdade, não consigo configurar um sono híbrido porque tenho um laptop (um estado que não está disponível em estações móveis); para o sono híbrido, é necessário ter a hibernação ativada e alguns dizem que o rundll32 powrprof.dll, SetSuspendState aciona o sono padrão no painel de controle \ configurações de gerenciamento de energia. tente se rundll32 powrprof.dll, sono híbrido SetSuspendState fornecer alguns resultados.


fonte
Isto também desativa suspensão híbrida, por isso derrota meio o propósito
Eric L
rundll32 powrprof.dll, o sono híbrido SetSuspendState ainda coloca o computador em hibernação. obrigado pela ideia.
Eric L
O rundll32 não foi projetado para chamar SetSuspendState, portanto, obtém valores de parâmetro incorretos. É por isso que sempre causa hibernação se você não a desativou intencionalmente.
Sergeyt
5

Faça um arquivo bat, onde 600 é um atraso em segundos.

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h desligado

% windir% \ System32 \ rundll32.exe powrprof.dll, Suporte em espera do SetSuspendState

dim77x
fonte
Ótima maneira de colocar o computador em modo de suspensão e muito fácil de enviar para outra pessoa que deseja ter o sono programado.
Maurycy
Resposta criativa!
Jane Panda
Não use o rundll32.exe para chamar SetSuspendState: ele não foi projetado para isso. Veja explicações aqui
SergeyT
4

Se você é competente na compilação de um programa .NET, o comando a seguir fará isso

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

Nota: Você não precisa desativar a hibernação, conforme exigido pelo rundll32 powrprof.dll,SetSuspendStatecomando. Você também pode usar o PowerState.Hibernateque hibernará a máquina, se desejar.

Você pode compilar facilmente um EXE com esse comando em qualquer versão do Visual Studio . Basta criar um aplicativo de console e adicionar uma referência à System.Windows.FormsDLL.

Simon
fonte
11
O Wizmo citado acima basicamente já fez isso - usá-lo parece o equivalente. E é escrito por Steve Gibson e gratuito, então provavelmente melhor do que o que eu conseguiria codificar manualmente a mesma coisa!
stevemidgley
+1. Procurando algo assim aqui superuser.com/q/310045/84229
user
Você nem precisa usar Visual Studiopara compilar. Em vez disso, o compilador de linha de comando csc.exepode ser usado. Ele já está instalado em todas as versões modernas do Windows.
Sergeyt