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


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!


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.


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


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.


Czy nazwy zmiennych nie są wstecz?
Ullallulloo,


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


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.


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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.