Какую команду использовать, чтобы перевести компьютер в спящий режим (не в спящий режим)?

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, если это все, что вам нужно.


Обновление: вышеупомянутое решение не работает, когда пользователь не вошел в систему, то есть Windows 7 Login Screen. (Мой компьютер просыпается в 4 часа утра каждое воскресенье, чтобы выполнять еженедельное резервное копирование, которое выполняется без входа пользователя.) В этом случае программа Wizmo все еще работает:

wizmo.exe тихий режим ожидания!

Энди Ли
источник
3
Вот скрипт AutoHotKey (с использованием клавиатуры); Отправить, {LWINDOWN} {LWINUP} WinWait, меню «Пуск», IfWinNotActive, меню «Пуск», WinActivate, меню «Пуск», WinWaitActive, меню «Пуск», отправить, {TAB} {UP} {ПРАВА} {ПРАВА} s
Эрик Л,
Это решение, которое я в конечном итоге использовал. как это поддерживает гибридный сон.
Эрик Л
+1 Это кажется грязным, но это работает. Я должен был изменить последнюю часть отправки на: «Отправить, {RIGHT} {RIGHT} s». Кстати, я почти дал вам -1 за рекомендацию удалить AHK, так как это было бы непростительно :)
demoncodemonkey
Я также добавил это в начало скрипта, чтобы гарантировать, что команды идут в окно рабочего стола, и предотвратить их потерю: 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чтобы включить сценарии powershell для запуска.

Приведенный выше скрипт вызывает приостановку системы, которая будет либо в спящем режиме, либо в режиме гибернации, в зависимости от текущих настроек режима гибернации. Чтобы изменить этот параметр из командной строки, запустите powercfg -h off(или on) из командной строки от имени администратора.

imoatama
источник
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 Standby

harrymc
источник
Wizmo выглядит довольно круто! Почти заставляет меня желать, чтобы я не был фанатом Mac
trolle3000
Утилита не должна быть установлена. Хороший простой инструмент.
Артур Карвалью
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

С Sysinternals PsTools [ скачать ]:

psshutdown -d

используя инструмент командной строки PsShutdown .

(Вы можете предпочесть это решение, если вы уже загрузили PsTools, оно довольно широко используется. В остальном этот подход эквивалентен использованию .)wizmoquiet standby

Источник: https://superuser.com/a/331545/21887

Аарон Тома
источник
7

Я использую эту утилиту SLEEP.EXE в течение многих лет. Он работает хорошо, и вам не нужно запоминать, какие аргументы выдавать для режима приостановки (его стандартная форма "sleep").

jjlin
источник
У меня работает SLEEP.EXE , на Windows 7 Pro SP1. На родительской странице также перечислены многие другие полезные инструменты командной строки для Windows. Спасибо, @jjlin!
КОД-ЧИТАНИЕ
6

чтобы отключить режим гибернации нужно использовать

powercfg -h off

теперь, rundll32 powrprof.dll, SetSuspendState переведет вашу станцию ​​в режим ожидания.

[РЕДАКТИРОВАТЬ]

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


источник
Это также отключает гибридный сон, так что это своего рода побеждает цель
Eric L
rundll32 powrprof.dll, SetSuspendState гибридного сна по-прежнему переводит компьютер в спящий режим. спасибо за идею
Эрик Л
rundll32 не предназначен для вызова SetSuspendState, поэтому он получает неправильные значения параметров. Вот почему это всегда вызывает гибернацию, если вы не отключили ее намеренно.
SergeyT
5

Создайте файл bat, где 600 - задержка в секундах.

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h выключен

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

dim77x
источник
Отличный способ уложить компьютер в спящий режим, и очень легко отправить кого-то еще, кто хочет спать по расписанию.
Мориси
Креативный ответ!
Джейн Панда
Не используйте 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