Qual è il comando da utilizzare per mettere il computer in modalità sospensione (non ibernazione)?


63

Voglio mettere il mio PC Windows (Windows 7) in uno stato di sospensione tramite riga di comando (in modo da poter associare al pulsante macro sulla tastiera).

Il pulsante di accensione del PC è impostato su ma il computer è in modalità di sospensione (ma è sul pavimento e sono troppo pigro per abbassarlo) esattamente come lo voglio (dorme usando la modalità ibrida in caso di perdita di energia)

Anche il comando sleep nel menu di spegnimento funziona.

la maggior parte delle informazioni che ho trovato dice di usare;

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

Ma questo mette il computer in modalità ibernazione. Ho l'ibernazione disabilitato ma usando il sonno ibrido.

Quindi, qual è il comando da utilizzare per mettere il computer in sospensione (non in letargo)?


5
rundll32.exe PowrProf.dll,SetSuspendStatenon è raccomandato È pericoloso. (Perché corrompe lo stack, poiché non è conforme alla firma della funzione richiesta da Rundll32. Quindi possono accadere cose imprevedibili, come avverte Raymond Chen ...)
Aaron Thoma,

Risposte:


13

Ho trovato una soluzione Ho installato un programma freeware chiamato AutoHotKey e registrato i passaggi per richiamare il menu Start -> Sospensione in un file di script. Quindi ho rispettato il file di script in un eseguibile autonomo SleepWin7.exe.

Ora eseguo semplicemente SleepWin7.exe per mettere il mio computer in modalità sospensione ibrida.

È possibile disinstallare AutoHotKey se questo è tutto ciò di cui hai bisogno.


Aggiornamento: la soluzione precedente non funziona quando l'utente non ha effettuato l'accesso, ovvero la schermata di accesso a Windows 7. (Il mio computer si sveglia alle 4 del mattino ogni domenica per eseguire il backup settimanale, che viene eseguito senza il login dell'utente.) In tal caso, il programma Wizmo funziona ancora:

wizmo.exe standby silenzioso!


3
Ecco uno script AutoHotKey (usando la tastiera); Invia, {LWINDOWN} {LWINUP} WinWait, menu Start, IfWinNotActive, menu Start,, WinActivate, menu Start, WinWaitActive, menu Start, Invia, {TAB} {UP} {RIGHT} s
Eric L

Questa è la soluzione che ho finito per usare. in quanto supporta il sonno ibrido.
Eric L,

+1 Sembra sporco ma funziona. Ho dovuto modificare l'ultima parte Invia a: "Invia, {DESTRA} {DESTRA} s". A proposito, ti ho quasi dato un -1 per aver consigliato di disinstallare AHK, poiché sarebbe imperdonabile :)
demoncodemonkey

Ho anche aggiunto questo all'inizio dello script per garantire che i comandi vadano nella finestra del desktop e impedire che vadano persi: WinActivate, ahk_class Progman
demoncodemonkey

1
Dopo essere passato a Windows 8, ora sto usando NirCmd (molto leggero) e mette il computer in modalità sospensione ibrida; nircmd.exe standbymaggiori informazioni possono essere trovate qui -> nirsoft.net/utils/nircmd.html
Eric L

73

Spero che li trovi utili.

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

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

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

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

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

Attenzione: rundll32.exe non deve essere utilizzato per avviare powerprof.dll . Dovresti invece chiamare direttamente SetSuspendState. Questo può essere fatto usando Powershell: crea un file, ad esempio sleep.ps1, con i seguenti contenuti.

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

Quindi eseguirlo usando powershell -File C:\your-path\sleep.ps1. Potrebbe essere necessario eseguire prima il comando Set-ExecutionPolicy RemoteSignedper abilitare l'esecuzione degli script PowerShell.

Lo script precedente provoca una sospensione del sistema, che si spegnerà o andrà in letargo in base all'impostazione di ibernazione corrente. Per modificare tale impostazione dalla riga di comando, eseguire powercfg -h off(o on) dalla riga di comando come amministratore.


4
che bello! +1 ...
studiohack

9
Questo è fantastico, ma dov'è quello per Sleeeeeeeeeeeeep
demoncodemonkey

7
La scorciatoia di standby mette in letargo la mia macchina Win7 :(
utente

5
@demoncodemonkey: Standbyyyyyyyyyyyyy = Sleeeeeeeeeeeeep :)
Răzvan Flavius ​​Panda

11
Apparentemente non lo è: superuser.com/a/331545/21887 Quindi è considerato pericoloso utilizzare questo metodo e non è raccomandato. (Corrompe lo stack.)
Aaron Thoma il

16

Guarda l'utilità gratuita di Wizmo , che può fare moltissime cose.
Il comando che stai cercando è probabilmente:

wizmo standby


Wizmo ha un bell'aspetto! Quasi mi fa venire voglia di non essere un
fan di

L'utilità non deve essere installata. Simpatico strumento semplice.
Artur Carvalho,

2
wizmo.exe quiet standbysopprime probabilmente bip fastidiosi wizmo.exe.
Aaron Thoma,

14

Puoi creare un file con estensione .ps1 (powershell) come "sleep.ps1" e scrivere questo:

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

Lo uso quando ho qualcosa in esecuzione e devo lasciare il pc e non voglio spegnerlo. Quindi cambio la sceneggiatura in questo modo:

$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 ora quando lo eseguo, inserisco solo i minuti che voglio aspettare fino a dormire.

Puoi eseguirlo dalla riga cmd scrivendo

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

Se non hai mai eseguito uno script di PowerShell prima, ti consigliamo di eseguirlo per la prima volta

Set-ExecutionPolicy RemoteSigned

in PowerShell per abilitare l'esecuzione degli script. Questo deve essere eseguito solo una volta.


I nomi delle tue variabili non sono al contrario?
Ullallulloo,


7

Uso questa utility SLEEP.EXE da anni. Funziona bene e non devi ricordare quali argomenti dargli per la modalità di sospensione (la sua forma predefinita di "sleep").


SLEEP.EXE funziona per me, su Windows 7 Pro SP1. La pagina principale elenca anche molti altri strumenti da riga di comando dall'aspetto utile per Windows. Grazie, @jjlin!
CODICE READ

6

per disabilitare la modalità di ibernazione è necessario utilizzare

powercfg -h off

ora, rundll32 powrprof.dll, SetSuspendState metterà la tua stazione in modalità stanby

[MODIFICARE]

in realtà non riesco a configurare una sospensione ibrida perché ho un laptop (uno stato che non è disponibile sulle stazioni mobili), per la sospensione ibrida è necessario abilitare l'ibernazione e alcuni dicono che rundll32 powrprof.dll, SetSuspendState attivano la sospensione predefinita modalità nelle impostazioni del pannello di controllo \ risparmio energia. provare se rundll32 powrprof.dll, sospensione ibrida SetSuspendState danno alcuni risultati.


Questo disabilita anche il sonno ibrido, quindi sconfigge lo scopo
Eric L

rundll32 powrprof.dll, la sospensione ibrida SetSuspendState mette ancora in sospensione il computer. grazie per l'idea.
Eric L,

rundll32 non è progettato per chiamare SetSuspendState, quindi ottiene valori di parametro errati. Ecco perché provoca sempre l'ibernazione se non l'hai disabilitato intenzionalmente.
SergeyT

5

Crea un file bat, dove 600 è un ritardo in secondi.

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h off

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


Ottimo modo per mettere il computer in modalità sospensione e molto semplice per inviare qualcun altro che vuole avere il sonno programmato.
Maurycy,

Risposta creativa!
Jane Panda,

Non utilizzare rundll32.exe per chiamare SetSuspendState: non è progettato per questo. Vedi le spiegazioni qui
SergeyT

4

Se sei competente a compilare un programma .NET, il seguente comando farà questo

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

Nota: non è necessario disabilitare l'ibernazione come richiesto dal rundll32 powrprof.dll,SetSuspendStatecomando. È inoltre possibile utilizzare PowerState.Hibernateche ibernerà la macchina se lo si desidera.

È possibile compilare facilmente un file EXE con questo comando con qualsiasi versione di Visual Studio . Basta creare un'applicazione console e aggiungere un riferimento alla System.Windows.FormsDLL.


1
Wizmo sopra citato sostanzialmente lo ha già fatto - usarlo sembra l'equivalente. Ed è scritto da Steve Gibson e gratuito, quindi probabilmente migliore di quello che otterrei scrivere a mano la stessa cosa!
Stevemidgley,

+1. Cerchi qualcosa di simile qui superuser.com/q/310045/84229
utente

Non devi nemmeno usare Visual Studioper compilare. Al contrario, è csc.exepossibile utilizzare il compilatore della riga di comando . È già installato in tutte le versioni moderne di Windows.
SergeyT
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.