Яку команду потрібно використовувати для того, щоб перевести комп'ютер у режим сну (а не у сплячку)?


63

Я хочу перевести свій ПК з Windows (Windows 7) у стан сну за допомогою командного рядка (тому я можу прив’язатись до макро-кнопки на клавіатурі).

Кнопка живлення на ПК налаштована, але комп'ютер не повинен спати (але він лежить на підлозі, і я лінивий дотягнутися до нього) саме так, як я хочу (спить, використовуючи гібридний режим, якщо я втрачу живлення)

Команда сну в меню вимкнення також працює.

більшість інформації, яку я знайшов, говорить про використання;

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

Але це переводить комп’ютер у сплячий режим. У мене сплячий режим відключений, але використовують гібридний сон.

Отже, яку команду потрібно використовувати для того, щоб перевести комп'ютер у режим сну (а не в сплячку)?


5
rundll32.exe PowrProf.dll,SetSuspendStateне рекомендується. Це небезпечно. (Тому що вона розкладає стек, так як він НЕ відповідати підпису функції необхідної від Rundll32. Тоді непередбачувані погане може статися, так як Реймонд Чен попереджає ...)
Аарон THOMA

Відповіді:


13

Я знайшов рішення. Я встановив безкоштовну програму під назвою AutoHotKey і записав кроки, щоб викликати меню "Пуск" -> Сон у файл сценарію. Потім я виконав файл сценарію в автономний виконуваний SleepWin7.exe.

Тепер я просто запускаю SleepWin7.exe, щоб перевести комп'ютер у режим гібридного сну.

Ви можете видалити AutoHotKey, якщо це все, що вам потрібно.


Оновлення: вищевказане рішення не працює, коли користувач не входить у систему, тобто екран 7 для входу в Windows 7. (Мій комп’ютер прокидається о 4 ранку щонеділі, щоб виконувати резервну копію щотижня, що робиться без входу користувача.) У такому випадку програма Wizmo все ще працює:

wizmo.exe тихий режим очікування!


3
Ось сценарій AutoHotKey (за допомогою клавіатури); Надіслати, {LWINDOWN} {LWINUP} WinWait, меню "Пуск", IfWinNotActive, меню "Пуск",, WinActivate, меню "Пуск", WinWaitActive, меню "Пуск", "Надіслати", {TAB} {UP} {ВПРАВО} s
Eric L

Це рішення, яке я закінчив використовувати. оскільки він підтримує гібридний сон.
Ерік Л

+1 Це відчуває себе брудно, але це працює. Мені довелося змінити останню частину надіслати на "Надіслати, {ВПРАВО} {ПРАВО} s". До речі, я майже дав вам -1 за рекомендацію видалити AHK, оскільки це було б
недозволено

Я також додав це до початку сценарію, щоб переконатися, що команди переходять у вікно робочого столу, і запобігти їх втраті: WinActivate, ahk_class Progman
demoncodemonkey

1
Після переходу на Windows 8 я зараз використовую NirCmd (дуже невелика вага), і він переводить комп'ютер у гібридний сон; nircmd.exe standbyбільше інформації можна знайти тут -> nirsoft.net/utils/nircmd.html
Eric L

73

Сподіваюся, ви знайдете ці корисні.

Закрити %windir%\System32\shutdown.exe -s

Перезавантажте %windir%\System32\shutdown.exe -r

Відхід %windir%\System32\shutdown.exe -l

Режим очікування %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

Зимує %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

Увага: rundll32.exe не слід використовувати для запуску powerprof.dll . Натомість слід зателефонувати SetSuspendState безпосередньо. Це можна зробити за допомогою Powershell - створити файл, наприклад, sleep.ps1, із наведеним нижче вмістом.

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

Потім запустіть його за допомогою powershell -File C:\your-path\sleep.ps1. Можливо, спочатку потрібно запустити команду, Set-ExecutionPolicy RemoteSignedщоб дозволити запуск сценаріїв shell.

Вищеописаний сценарій спричиняє призупинення роботи системи, яка перебуває у режимі сну або в сплячому режимі залежно від поточного режиму сну. Щоб змінити це налаштування з командного рядка, запустіть powercfg -h off(або on) з командного рядка як адміністратор.


4
приємно! +1 ...
studiohack

9
Це чудово, але де такий для Sleeeeeeeeeeeeep
demoncodemonkey

7
Ярлик у режимі очікування перевів мій апарат Win7 у сплячку :(
користувач

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

11
Мабуть, це не так: superuser.com/a/331545/21887 Тому використовувати цей метод небезпечно і не рекомендується. (Це псує стек.)
Аарон Тома

16

Дивіться безкоштовну утиліту Wizmo , яка може зробити дуже багато речей.
Команда, яку ви шукаєте, ймовірно:

режим очікування


Wizmo виглядає досить круто! Майже змушує мене побажати, щоб я не був
фан-маком

Утиліту не потрібно встановлювати. Хороший простий інструмент.
Артур Карвальо

2
wizmo.exe quiet standbyпригнічує напевно дратівливі звукові сигнали мимо wizmo.exe.
Аарон Тома

14

Ви можете створити файл з розширенням .ps1 (powershell) на зразок "sleep.ps1" і написати це:

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

Я використовую це, коли у мене щось працює, і я повинен залишити ПК і не хочу його вимикати. Тому я змінюю сценарій, щоб виглядати так:

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

І тепер, коли я його запускаю, я просто вводя хвилини, які хочу почекати до сну.

Ви можете запустити це з рядка cmd, записавши

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

Якщо ви ніколи раніше не запускали сценарій PowerShell, спершу потрібно запустити

Set-ExecutionPolicy RemoteSigned

в PowerShell, щоб увімкнути запуск сценарію. Це потрібно виконати лише один раз.


Чи не є імена ваших змінних назад?
Ullallulloo

11

За допомогою PsTools Sysinternals [ завантажити ]:

psshutdown -d

за допомогою інструменту командного рядка PsShutdown .

(Ви можете скористатися цим рішенням, якщо ви вже завантажили PsTools, воно досить широко використовується. Крім цього, цей підхід еквівалентний використанню .)wizmoquiet standby

Джерело: https://superuser.com/a/331545/21887


7

Я використовую цю утиліту SLEEP.EXE роками. Він працює добре, і вам не потрібно пам’ятати, які аргументи, щоб надати його для режиму призупинення (його типова форма «сну»).


SLEEP.EXE працює для мене в Windows 7 Pro SP1. На батьківській сторінці також перелічено безліч інших корисних на вигляд інструментів командного рядка для Windows. Дякую, @jjlin!
CODE-READ

6

щоб вимкнути сплячий режим, який потрібно використовувати

powercfg -h off

тепер, rundll32 powrprof.dll, SetSuspendState переведе станцію в режим очікування

[EDIT]

насправді я не можу налаштувати гібридний сон, тому що у мене ноутбук (стан, який недоступний для мобільних станцій), для гібридного сну потрібно активувати сплячку, а деякі кажуть, що rundll32 powrprof.dll, SetSuspendState запускає сон за замовчуванням режиму в налаштуваннях панелі керування \ управління живленням. будь ласка, спробуйте, якщо rundll32 powrprof.dll, гібридний сон SetSuspendState дасть певні результати.


Це також вимикає гібридний сон, тому він начебто перемагає мету
Ерік Л

rundll32 powrprof.dll, гібридний сон SetSuspendState все ще вводить комп'ютер у сплячку. дякую за ідею.
Ерік Л

rundll32 не призначений для виклику SetSuspendState, тому він отримує неправильні значення параметрів. Ось чому це завжди спричиняє сплячку, якщо ви її навмисно не відключили.
SergeyT

5

Створіть файл bat, де 600 затримується в секундах.

ping -n 600 -w 1 127.0.0.1> нуль

powercfg -h вимкнено

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


Чудовий спосіб увімкнути комп'ютер спати, і дуже просто відправити когось іншого, хто хоче перенести сон.
Мерісі

Творча відповідь!
Джейн Панда

Не використовуйте rundll32.exe для виклику SetSuspendState: він не призначений для цього. Пояснення дивіться тут
SergeyT

4

Якщо ви вмієте компілювати програму .NET, це зробить наступна команда

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

Примітка: Вам не потрібно відключати сплячку, як того вимагає rundll32 powrprof.dll,SetSuspendStateкоманда. Ви також можете використовувати те, PowerState.Hibernateщо буде зимувати машину, якщо ви хочете.

Ви можете легко скласти EXE за допомогою цієї команди з будь-якою версією Visual Studio . Просто створіть консольний додаток і додайте посилання на System.Windows.FormsDLL.


1
Wizmo, згаданий вище, в основному вже зробив це - використання цього виглядає як еквівалент. І це написано Стівом Гібсоном і безкоштовно, так що, мабуть, краще, ніж те, що я отримав би в коді те саме!
stevemidgley

+1. Шукаєте щось подібне тут superuser.com/q/310045/84229
користувач

Вам навіть не потрібно використовувати Visual Studioдля компіляції. Натомість csc.exeможе бути використаний компілятор командного рядка . Він уже встановлений у всіх сучасних версіях Windows.
SergeyT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.