Спящий компьютер через командный файл в Windows 7


14

Я хочу сделать командный файл, который будет спать мой компьютер после определенного периода времени.

Самая близкая вещь, которую я нашел, - это поместить ее в режим ожидания, но, похоже, она работает не так, как кнопка сна на моей клавиатуре (более длительная загрузка, не просыпается при щелчке мыши). Есть идеи? Будет ли проще в Python или C #?

Упомянутый выше менее идеальный метод вызывает это в командной строке cmd:

Rundll32.exe powrprof.dll,SetSuspendState

Просто добавьте отсчетную часть в .bat и выполните это после этого.
Apache

выглядит как дубликат superuser.com/questions/83437/…
akira

Гибернация совершенно разная, но, думаю, это правильное решение.
Apache

Я верю, что Рендл - это то же самое, что и спящий. В спящем режиме вы щелкаете мышью, и ваш экран входа в систему появляется через пару секунд ... Гибернация должна перепроверить биос, жесткие диски и перенести сохраненное состояние с жесткого диска на RAM, а затем загрузить Windows. Единственный недостаток сна - это если вы теряете энергию, а сохраненное состояние, сохраненное в оперативной памяти, теряется (а более старые устройства фактически оставляют больше компонентов, таких как блок питания и вентиляторы).
Saebin

Ответы:


26

Просто команда

rundll32.exe powrprof.dll,SetSuspendState

Есть ли спящий режим системы , но если вы напишите это:

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

И отключите спящий режим командой:

powercfg -hibernate off

Теперь ваша система засыпает и просыпается при движении мыши, если выбрано для нее устройство (прокрутите вниз, чтобы узнать, как это сделать).

Пакетный таймер:

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

Где 1200 - секунды, что означает, что через 20 минут пакетная команда будет запускать команду сна.

При желании вы можете предотвратить отмену обратного отсчета (если вы нажмете любую клавишу в окне пакета):

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

Небольшой HOWTO о пробуждении с помощью мыши:

Перейдите: Пуск -> Панель управления -> Мышь.

альтернативный текст

В окне « Свойства мыши» щелкните вкладку « Оборудование » и выберите мышь в списке устройств. Как правило, здесь указывается только одна мышь, но это зависит от оборудования, подключенного к вашему компьютеру. Когда вы выбрали свою мышь из списка, нажмите кнопку Свойства .

альтернативный текст

Теперь в окне « Свойства» для мыши нажмите кнопку « Изменить настройки» на вкладке « Общие ».

альтернативный текст

В открывшемся окне перейдите на вкладку « Управление питанием » и установите флажок « Разрешить этому устройству активировать компьютер» . Нажмите кнопку ОК в этом окне и нажмите кнопку ОК в окнах свойств мыши, которые все еще открыты. Отныне вы можете вывести Windows 7 из спящего режима, нажав кнопку мыши или переместив мышь.

альтернативный текст


3
вау, чувак, тебе очень нравится отвечать на вопросы :)
Ому,


2

Рабочий раствор!
Мне пришлось использовать PsShutdownутилиту, чтобы обеспечить нормальный сон (основная проблема - SetSuspendStateне дать тайме разбудить машину). Мой пакетный файл для сна состоит из 1 простой строки:

PsShutdown -d -t 2

Пожалуйста, прочитайте, Как я рекомендую программное обеспечение для некоторых советов относительно того, как Вы должны рекомендовать программное обеспечение. Вы должны предоставить хотя бы ссылку, некоторую дополнительную информацию о самом программном обеспечении и о том, как его можно использовать для решения поставленной задачи.
DavidPostill

1
Это не сработало в моем компьютере ...
mrbengi

1

.NET на помощь. Это решение переводит компьютер в спящий режим без необходимости изменения конфигурации компьютера (отключения гибернации). Запустите эту команду в пакетном режиме:

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

Вы можете использовать либо ::Suspendдля сна, или ::Hibernate(как работают другие ответы). Документация для SetSuspendState.

Поскольку System.Windows.Formsпространство имен не загружается по умолчанию (это происходит в Powershell ISE), для этого вам необходимо сначала загрузить сборку.

оригинальный ответ


0

Вы можете попробовать SetSystemPowerState, чтобы избежать отключения Hiberanate.

rundll32.exe kernel32.dll, SetSystemPowerState

Обратите внимание, что добавление 1,0 или 1 0 или даже выполнение Rundll32.exe powrprof.dll, SetSuspendState 0 0 1 или Rundll32.exe powrprof.dll, SetSuspendState 0,0,1, что аргументы (0,0,1) ничего не значат.

Powrprof.dll, SetSuspendState не анализирует аргументы стиля rundll32 и поэтому игнорирует их. Вот почему вы должны отключить спящий режим.


1
Это полезно для Windows XP, а не для Vista или новее.
Родни

1
Обратите внимание, что rundll32 игнорирует аргументы, которые вы ему предоставляете (поэтому SetSuspendState всегда спит), поскольку библиотека DLL не предназначена для приема аргументов из rundll32.
Родни

-1: Это совершенно неправильно. Он не работает под желаемой операционной системой OP.
nc4pk

rundll32 НЕ передает аргументы, поэтому вам нужно отключить Hibernate, чтобы он работал. Аргументы по умолчанию говорят, что он всегда находится в режиме гибернации, но если режим гибернации отключен, по умолчанию DLL API переходит в спящий режим.
Родни

0

На этот вопрос уже дан ответ.

powercfg -h выкл. и запуск / мин. "C: \ WINDOWS \ System32 \ rundll32.exe PowrProf.dll, SetSuspendState 0,1,0 & ping -n 3 127.0.0.1> nul & powercfg -h вкл. и выйти

Смотрите следующее:

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


1
Если вы считаете, что этот вопрос является дубликатом, не стесняйтесь пометить его как таковой.
Моисей

0

Просто создайте командный файл и вставьте следующие строки:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.