Uśpienie komputera za pomocą pliku wsadowego w systemie Windows 7

14

Chcę utworzyć plik wsadowy, który po pewnym czasie uśpi mój komputer.

Najbliższą rzeczą, jaką znalazłem, jest przejście w tryb gotowości, ale wydaje się, że działa inaczej niż przycisk uśpienia na mojej klawiaturze (dłuższe uruchamianie, nie budzi się po kliknięciu myszą). Jakieś pomysły? Czy byłoby łatwiej w Pythonie lub C #?

Mniej niż idealna technika wspomniana powyżej nazywa to w wierszu polecenia cmd:

Rundll32.exe powrprof.dll,SetSuspendState
Saebin
źródło
Wystarczy dodać część odliczania do .bat i wykonać to później.
Apache
wygląda jak duplikat superuser.com/questions/83437/…
akira
Hibernacja jest zupełnie inna, ale tak, to chyba właściwe rozwiązanie.
Apache
Wierzę, że Rundll jest taki sam jak hibernacja. W trybie uśpienia klikasz mysz, a ekran logowania pojawia się za kilka sekund ... hibernacja musi ponownie sprawdzić bios, dyski twarde i przenieść zapisany stan z dysku twardego do pamięci RAM, a następnie uruchomić system Windows. Jedyną wadą snu jest utrata zasilania i utrata zapisanego stanu w pamięci RAM (a starsze komputery faktycznie pozostawiają więcej komponentów, takich jak zasilacz i wentylatory).
Saebin

Odpowiedzi:

26

Po prostu rozkaż

rundll32.exe powrprof.dll,SetSuspendState

Czy system hibernuje , ale jeśli napiszesz to:

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

I wyłącz hibernację za pomocą polecenia:

powercfg -hibernate off

Teraz twój system zaśnie i obudzi się po poruszeniu myszą, jeśli wybrałeś dla niego urządzenie (przewiń w dół, aby dowiedzieć się, jak to zrobić).

Partia timera:

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

Gdzie 1200 to sekundy, co oznacza, że ​​po 20 minutach partia uruchomi polecenie uśpienia.

Opcjonalnie możesz zapobiec anulowaniu odliczania (jeśli naciśniesz dowolny klawisz w oknie partii):

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

Mały HOWTO o budzeniu się myszką:

Przejdź do: Start -> Panel sterowania -> Mysz.

alternatywny tekst

W oknie Właściwości myszy kliknij kartę Sprzęt i wybierz mysz z listy urządzeń. Zwykle na liście znajduje się tylko jedna mysz, ale zależy to od sprzętu podłączonego do komputera. Po wybraniu myszy z listy kliknij przycisk Właściwości .

alternatywny tekst

Teraz w oknie Właściwości myszy kliknij przycisk Zmień ustawienia na karcie Ogólne .

alternatywny tekst

W oknie, które zostanie otwarte, kliknij kartę Zarządzanie energią i zaznacz opcję Zezwalaj temu urządzeniu na wybudzanie komputera . Kliknij przycisk OK w tym oknie i kliknij przycisk OK w oknie właściwości myszy, które jest nadal otwarte. Od tej chwili możesz obudzić system Windows 7 z trybu uśpienia, klikając przycisk myszy lub poruszając myszą.

alternatywny tekst

Anotomix
źródło
3
wow człowieku, naprawdę lubisz odpowiadać na pytania :)
Omu
2
shutdown /h

hibernuje komputer (choć nie jestem pewien co do zawieszenia).

Stacey Richards
źródło
2

Działające rozwiązanie!
Musiałem użyć tego PsShutdownnarzędzia, aby umożliwić prawidłowe spanie (głównym problemem jest to, SetSuspendStateże liczniki budzenia nie budzą komputera). Mój plik wsadowy do spania to 1 prosta linia:

PsShutdown -d -t 2
P Tempo
źródło
Przeczytaj Jak polecić oprogramowanie, aby uzyskać porady dotyczące tego, jak powinieneś polecać oprogramowanie. Powinieneś podać przynajmniej link, dodatkowe informacje o samym oprogramowaniu oraz o tym, jak można go użyć do rozwiązania problemu w pytaniu.
DavidPostill
1
To nie działało na moim komputerze ...
mrbengi
1

.NET na ratunek. To rozwiązanie uśpiło komputer bez konieczności zmiany konfiguracji komputera (wyłączenie hibernacji). Uruchom to polecenie wsadowo:

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

Możesz użyć albo ::Suspenddo snu, albo ::Hibernate(w taki sposób, w jaki działają inne odpowiedzi). Dokumentacja dla SetSuspendState.

Ponieważ System.Windows.Formsprzestrzeń nazw nie jest domyślnie ładowana (robi to w Powershell ISE), musisz najpierw załadować zespół w tym celu.

oryginalna odpowiedź

Velda
źródło
0

Możesz spróbować SetSystemPowerState, aby uniknąć konieczności wyłączania Hiberanacji.

rundll32.exe kernel32.dll, SetSystemPowerState

Zauważ, że dodanie 1,0 lub 1 0 lub nawet wykonanie Rundll32.exe powrprof.dll, SetSuspendState 0 0 1 lub Rundll32.exe powrprof.dll, SetSuspendState 0,0,1 oznacza, że ​​argumenty (0,0,1) oznaczają NIC.

Powrprof.dll, SetSuspendState nie analizuje argumentów stylu rundll32 i dlatego je ignoruje. Dlatego musisz wyłączyć hibernację.

Rodney
źródło
1
Jest to przydatne w systemie Windows XP, a nie Vista lub nowszym.
Rodney
1
Zauważ, że rundll32 ignoruje podane argumenty (dlatego też SetSuspendState zawsze hibernuje), ponieważ biblioteka DLL nie jest zaprojektowana do przyjmowania argumentów z rundll32.
Rodney
-1: Jest to całkowicie błędne. Nie działa w pożądanym systemie operacyjnym OP.
nc4pk
rundll32 NIE przekazuje argumentów, dlatego musisz wyłączyć Hibernację, aby działał. Domyślne argumenty każą zawsze hibernować, ale jeśli hibernacja jest wyłączona, interfejs API DLL domyślnie przechodzi w tryb uśpienia.
Rodney,
0

Na to pytanie już udzielono odpowiedzi.

powercfg -h off & start / min "" C: \ WINDOWS \ System32 \ rundll32.exe PowrProf.dll, SetSuspendState 0,1,0 & ping -n 3 127.0.0.1> nul & powercfg -h on & exit

Zobacz:

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

Josh
źródło
1
Jeśli uważasz, że to pytanie jest duplikatem, możesz je oflagować jako takie.
Mojżesz
0

Wystarczy utworzyć plik wsadowy i wstawić następujące wiersze:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
Chris Fischer
źródło