Jakiego polecenia należy użyć, aby uśpić komputer (nie hibernować)?

63

Chcę przełączyć komputer z systemem Windows (Windows 7) w stan uśpienia za pomocą wiersza polecenia (dzięki czemu mogę przypisać przycisk makra na klawiaturze).

Przycisk zasilania na komputerze jest skonfigurowany tak, aby komputer spał (ale leży na podłodze i jestem zbyt leniwy, aby zejść w dół) dokładnie tak, jak tego chcę (śpi w trybie hybrydowym na wypadek utraty zasilania)

Działa także polecenie uśpienia w menu zamykania.

większość informacji, które znalazłem, mówi o użyciu;

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

Ale to powoduje przejście komputera w tryb hibernacji. Mam hibernację wyłączoną, ale korzystam ze snu hybrydowego.

Jakiego polecenia użyć, aby uśpić komputer (nie hibernować)?

Eric L.
źródło
5
rundll32.exe PowrProf.dll,SetSuspendStatenie jest zalecane. To jest niebezpieczne. (Ponieważ psuje stos, ponieważ nie spełnia wymaganej przez niego sygnatury funkcji Rundll32. Wtedy mogą się zdarzyć nieprzewidziane złe rzeczy, jak ostrzega Raymond Chen …)
Aaron Thoma

Odpowiedzi:

13

Znalazłem rozwiązanie. Zainstalowałem darmowy program o nazwie AutoHotKey i zapisałem kroki, aby wywołać Menu Start -> Uśpij się w pliku skryptu. Następnie dostosowałem plik skryptu do autonomicznego pliku wykonywalnego SleepWin7.exe.

Teraz po prostu uruchamiam SleepWin7.exe, aby przełączyć komputer w tryb uśpienia hybrydowego.

Możesz odinstalować AutoHotKey, jeśli to wszystko, czego potrzebujesz.


Aktualizacja: powyższe rozwiązanie nie działa, gdy użytkownik nie jest zalogowany, tj. Ekran logowania do systemu Windows 7. (Mój komputer budzi się o 4 rano w każdą niedzielę, aby wykonać cotygodniowe kopie zapasowe, co odbywa się bez logowania użytkownika.) W takim przypadku program Wizmo nadal działa:

wizmo.exe cichy tryb gotowości!

Andy Lee
źródło
3
Oto skrypt AutoHotKey (za pomocą klawiatury); Wyślij, {LWINDOWN} {LWINUP} WinWait, menu Start, IfWinNotActive, menu Start, WinActivate, menu Start, WinWaitActive, menu Start, Wyślij, {TAB} {UP} {PRAWO} s
Eric L
To rozwiązanie, z którego ostatecznie skorzystałem. ponieważ obsługuje hybrydowy sen.
Eric L
+1 To wydaje się brudne, ale działa. Musiałem zmienić ostatnią część Send na: „Send, {RIGHT} {RIGHT} s”. BTW Prawie dałem ci -1 za zalecenie odinstalowania AHK, ponieważ byłoby to niewybaczalne :)
demoncodemonkey
Dodałem to również na początku skryptu, aby upewnić się, że polecenia przechodzą do okna pulpitu i zapobiec ich zgubieniu: WinActivate, ahk_class Progman
demoncodemonkey
1
Po przejściu na system Windows 8 używam teraz NirCmd (bardzo lekki) i przełącza komputer w tryb uśpienia hybrydowego; nircmd.exe standbywięcej informacji można znaleźć tutaj -> nirsoft.net/utils/nircmd.html
Eric L
72

Mam nadzieję, że okażą się one przydatne.

Zamknąć %windir%\System32\shutdown.exe -s

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

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

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

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

Przestroga: nie należy używać programu rundll32.exe do uruchamiania pliku powerprof.dll . Zamiast tego powinieneś wywołać SetSuspendState bezpośrednio. Można to zrobić za pomocą programu Powershell - utwórz plik, np. Sleep.ps1, z poniższą zawartością.

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

Następnie uruchom go za pomocą powershell -File C:\your-path\sleep.ps1. Może być konieczne uruchomienie polecenia, Set-ExecutionPolicy RemoteSignedaby umożliwić uruchamianie skryptów PowerShell.

Powyższy skrypt powoduje zawieszenie systemu, które będzie uśpione lub hibernowane w zależności od bieżącego ustawienia hibernacji. Aby zmienić to ustawienie z wiersza polecenia, uruchom powercfg -h off(lub on) z wiersza polecenia jako administrator.

imoatama
źródło
4
whoa nice! +1 ...
studiohack
9
To wspaniale, ale gdzie jest ten dla Sleeeeeeeeeeeeep
demoncodemonkey
7
Skrót w trybie gotowości przestawia moją maszynę Win7 w stan hibernacji :(
użytkownik
5
@demoncodemonkey: Standbyyyyyyyyyyyyy = Sleeeeeeeeeeeeep :)
Răzvan Flavius ​​Panda
11
Najwyraźniej nie: superuser.com/a/331545/21887 Dlatego używanie tej metody jest niebezpieczne i nie jest zalecane. (To psuje stos.)
Aaron Thoma
16

Zobacz bezpłatne narzędzie Wizmo , które potrafi wiele rzeczy.
Polecenie, którego szukasz, to prawdopodobnie:

wizmo standby

harrymc
źródło
Wizmo wygląda całkiem fajnie! Prawie sprawia, że ​​żałuję, że nie byłem
fanem Maca
Narzędzie nie musi być instalowane. Ładne proste narzędzie.
Artur Carvalho
2
wizmo.exe quiet standbytłumi prawdopodobnie denerwujące dźwięki wizmo.exe.
Aaron Thoma,
14

Możesz utworzyć plik z rozszerzeniem .ps1 (powershell), taki jak „sleep.ps1” i napisać to:

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

Używam tego, gdy mam coś uruchomionego i muszę opuścić komputer i nie chcę go wyłączać. Więc zmieniam skrypt, aby wyglądał tak:

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

A teraz, kiedy go uruchamiam, wprowadzam minuty, które chcę poczekać do snu.

Możesz uruchomić to z linii cmd, pisząc

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

Jeśli nigdy wcześniej nie uruchamiałeś skryptu PowerShell, najpierw musisz go uruchomić

Set-ExecutionPolicy RemoteSigned

w PowerShell, aby umożliwić działanie skryptu. To musi być uruchomione tylko raz.

Artur Carvalho
źródło
Czy nazwy zmiennych nie są wstecz?
Ullallulloo,
11

Z Sysinternals PsTools [ pobierz ]:

psshutdown -d

za pomocą narzędzia Wiersz polecenia PsShutdown .

(Możesz preferować to rozwiązanie, jeśli już pobrałeś PsTools, jest ono dość szeroko stosowane. Poza tym to podejście jest równoważne z użyciem ).wizmoquiet standby

Źródło: https://superuser.com/a/331545/21887

Aaron Thoma
źródło
7

Używam tego narzędzia SLEEP.EXE od lat. Działa dobrze i nie musisz pamiętać, jakie argumenty podać w trybie zawieszenia (domyślna forma „uśpienia”).

jjlin
źródło
SLEEP.EXE działa dla mnie na Windows 7 Pro SP1. Strona nadrzędna zawiera także wiele innych przydatnych narzędzi wiersza poleceń dla systemu Windows. Dzięki, @jjlin!
CODE-REaD
6

aby wyłączyć tryb hibernacji, musisz użyć

powercfg -h off

teraz rundll32 powrprof.dll, SetSuspendState przełączy twoją stację w tryb gotowości

[EDYTOWAĆ]

właściwie nie mogę skonfigurować uśpienia hybrydowego, ponieważ mam laptopa (stan, który nie jest dostępny na stacjach mobilnych), dla uśpienia hybrydowego musisz mieć włączoną hibernację, a niektórzy twierdzą, że rundll32 powrprof.dll, SetSuspendState wyzwala uśpienie domyślne tryb w panelu sterowania \ ustawienia zarządzania energią. spróbuj, jeśli rundll32 powrprof.dll, uśpienie hybrydowe SetSuspendState da jakieś wyniki.


źródło
To także wyłącza sen hybrydowy, więc w pewnym sensie pokonuje cel
Eric L
rundll32 powrprof.dll, uśpienie hybrydowe SetSuspendState nadal wprowadza komputer w stan hibernacji. dzięki za pomysł.
Eric L
rundll32 nie jest przeznaczony do wywoływania SetSuspendState, więc otrzymuje nieprawidłowe wartości parametrów. Dlatego zawsze powoduje hibernację, jeśli nie została wyłączona celowo.
SergeyT
5

Zrób plik nietoperza, gdzie 600 to opóźnienie w sekundach.

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h wyłączony

% windir% \ System32 \ rundll32.exe powrprof.dll, tryb gotowości SetSuspendState

dim77x
źródło
Świetny sposób na uśpienie komputera i bardzo łatwe wysłanie kogoś, kto chce się przespać.
Maurycy
Kreatywna odpowiedź!
Jane Panda,
Nie używaj rundll32.exe do wywoływania SetSuspendState: nie jest do tego przeznaczony. Zobacz wyjaśnienia tutaj
SergeyT
4

Jeśli jesteś kompetentny w kompilowaniu programu .NET , zrobi to następująca komenda

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

Uwaga: Nie musisz wyłączać hibernacji, jak wymaga tego rundll32 powrprof.dll,SetSuspendStatepolecenie. Możesz także użyć, PowerState.Hibernatektóry zahibernuje maszynę, jeśli chcesz.

Za pomocą tego polecenia można łatwo skompilować plik EXE z dowolną wersją programu Visual Studio . Wystarczy utworzyć aplikację konsoli i dodać odwołanie do System.Windows.Formsbiblioteki DLL.

Szymon
źródło
1
Cytowany powyżej Wizmo w zasadzie już to zrobił - używanie go wydaje się równoważne. Jest napisany przez Steve'a Gibsona i jest darmowy, więc prawdopodobnie lepszy niż to, co dostałbym za ręczne kodowanie tego samego!
stevemidgley
+1. Szukasz czegoś takiego tutaj superuser.com/q/310045/84229
użytkownik
Nie musisz nawet używać Visual Studiodo kompilacji. Zamiast tego csc.exemożna użyć kompilatora wiersza polecenia . Jest już zainstalowany we wszystkich nowoczesnych wersjach systemu Windows.
SergeyT