Sospensione di un computer tramite file batch in Windows 7


14

Voglio creare un file batch che dormirà il mio computer dopo un certo periodo di tempo.

La cosa più vicina che ho trovato è metterlo in standby, ma sembra funzionare in modo diverso rispetto al pulsante di sospensione sulla mia tastiera (avvio più lungo, non si riattiva al clic del mouse). Qualche idea? Sarebbe più facile in Python o C #?

La tecnica meno adatta di cui sopra si chiama così nel prompt cmd:

Rundll32.exe powrprof.dll,SetSuspendState

Basta aggiungere una parte del conto alla rovescia in .bat ed eseguirlo successivamente.
Apache,


L'ibernazione è totalmente diversa, ma sì, questa è la soluzione corretta immagino.
Apache,

Credo che la cosa rundll sia la stessa dell'ibernazione. Con la sospensione, fai clic con il mouse e la schermata di accesso è lì in un paio di secondi ... l'ibernazione deve ricontrollare il BIOS, i dischi rigidi e trasferire lo stato salvato dal disco rigido a RAM e quindi avviare Windows. L'unico inconveniente di dormire è se si perde energia e si perde lo stato salvato memorizzato nel ram (e i PC più vecchi lasciano effettivamente più componenti come PSU e ventole).
Saebin,

Risposte:


26

Basta comandare

rundll32.exe powrprof.dll,SetSuspendState

Il sistema va in letargo , ma se scrivi questo:

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

E disattiva l' ibernazione con il comando:

powercfg -hibernate off

Ora il tuo sistema si addormenterà e si risveglierà spostando il mouse se selezionato un dispositivo per esso (scorri verso il basso per sapere come).

Lancia un timer:

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

Dove 1200 è secondi, il che significa che dopo 20 minuti il ​​batch eseguirà il comando sleep.

Opzionalmente è possibile impedire la cancellazione del conto alla rovescia (se si preme un tasto qualsiasi nella finestra batch):

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

Little HOWTO sul risveglio con il mouse:

Vai a: Start -> Pannello di controllo -> Mouse.

testo alternativo

Nella finestra Proprietà mouse , fare clic sulla scheda Hardware e selezionare il mouse dall'elenco dei dispositivi. Normalmente, ci sarà un solo mouse elencato qui, ma dipenderà dall'hardware che hai collegato al tuo computer. Dopo aver selezionato il mouse dall'elenco, fare clic sul pulsante Proprietà .

testo alternativo

Ora nella finestra Proprietà del mouse, fai clic sul pulsante Modifica impostazioni nella scheda Generale .

testo alternativo

Nella finestra che si apre, fai clic sulla scheda Risparmio energia e seleziona l'opzione Autorizza questo dispositivo a riattivare il computer . Fare clic sul pulsante OK in questa finestra e fare clic sul pulsante OK nella finestra Proprietà mouse ancora aperta. Da ora in poi, puoi riattivare Windows 7 dalla modalità sospensione facendo clic su un pulsante del mouse o spostando il mouse.

testo alternativo


3
caspita, ti piace davvero rispondere alle domande :)
Omu,


2

Soluzione di lavoro!
Ho dovuto utilizzare l' PsShutdownutilità per consentire una corretta sospensione (il problema principale è SetSuspendStateche i timer di riattivazione non possono riattivare la macchina). Il mio file batch per dormire è 1 riga semplice:

PsShutdown -d -t 2

Si prega di leggere Come posso raccomandare il software per alcuni suggerimenti su come dovresti raccomandare il software. È necessario fornire almeno un collegamento, alcune informazioni aggiuntive sul software stesso e su come può essere utilizzato per risolvere il problema nella domanda.
David Post

1
Questo non ha funzionato nel mio pc ...
Mrbengi,

1

.NET in soccorso. Questa soluzione mette il computer in modalità sospensione senza la necessità di modificare la configurazione del PC (disattivando l'ibernazione). Esegui questo comando in batch:

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

Puoi usare sia ::Suspendper dormire, sia ::Hibernate(come funzionano le altre risposte). Documentazione per SetSuspendState.

Poiché lo System.Windows.Formsspazio dei nomi non viene caricato per impostazione predefinita (come avviene in Powershell ISE), è necessario caricare prima l'assemblaggio per quello.

risposta originale


0

È possibile provare SetSystemPowerState per evitare di disabilitare Hiberanate.

rundll32.exe kernel32.dll, SetSystemPowerState

Si noti che aggiungendo 1,0 o 1 0 o persino facendo powrprof.dll Rundll32.exe, SetSuspendState 0 0 1 o powrprof.dll Rundll32.exe, SetSuspendState 0,0,1 che gli argomenti (0,0,1) non significano NULLA.

Powrprof.dll, SetSuspendState non analizza gli argomenti in stile rundll32 e quindi li ignora. Ecco perché devi disabilitare l'ibernazione.


1
Ciò è utile per Windows XP, non per Vista o versioni successive.
Rodney,

1
Nota che rundll32 ignora gli argomenti forniti (quindi perché SetSuspendState va sempre in letargo) poiché la DLL non è progettata per accettare argomenti da rundll32.
Rodney,

-1: Questo è assolutamente sbagliato. Non funziona con il sistema operativo desiderato dell'OP.
nc4pk,

rundll32 NON sta passando gli argomenti, quindi perché devi disabilitare Hibernate per farlo funzionare. Gli arg predefiniti dicono che vanno sempre in letargo, ma se l'ibernazione è disabilitata per impostazione predefinita l'API DLL viene disattivata.
Rodney,


0

Basta creare un file batch e inserire le seguenti righe:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
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.