使计算机进入睡眠状态(不是休眠状态)的命令是什么?


63

我想通过命令行将Windows PC(Windows 7)置于睡眠状态(以便可以绑定到键盘上的宏按钮)。

PC上的电源按钮已设置为可让计算机进入睡眠状态(但它位于地板上,我懒得伸手去拿)恰好是我想要的(在混合电源模式下睡眠,以防失去电源)

关闭菜单上的sleep命令也可以使用。

我发现的大多数信息都说要使用;

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

但这会使计算机进入休眠模式。我确实禁用了休眠模式,但是使用了混合睡眠。

那么,用于使计算机进入睡眠状态(不是休眠状态)的命令是什么?


5
rundll32.exe PowrProf.dll,SetSuspendState不推荐。有危险。(因为它破坏堆栈,因为它并没有与函数签名符合要求Rundll32。那么不可预知的不好的事情可能发生,因为雷蒙德陈警告 ...)
阿龙托马

Answers:


13

我找到了解决方案。我安装了一个名为AutoHotKey的免费软件,并记录了调用开始菜单->睡眠到脚本文件中的步骤。然后,我将脚本文件编译为独立的可执行文件SleepWin7.exe。

现在,我只需运行SleepWin7.exe,即可​​将计算机置于混合睡眠状态。

如果仅需要,您可以卸载AutoHotKey。


更新:当用户未登录时,即Windows 7登录屏幕,上述解决方案不起作用。(我的计算机在每个星期日的凌晨4点醒来,以执行每周备份,而无需用户登录即可完成。)在这种情况下,Wizmo程序仍然可以运行:

wizmo.exe安静待机!


3
这是一个AutoHotKey脚本(使用键盘);发送{LWINDOWN} {LWINUP} WinWait,“开始”菜单,IfWinNotActive,“开始”菜单,“ WinActivate”,“开始”菜单,WinWaitActive,“开始”菜单,发送,{TAB} {UP} {RIGHT} s
Eric L 2010年

这是我最终使用的解决方案。因为它支持混合睡眠。
埃里克·L

+1感觉很脏,但可以。我必须将最后一个“发送”部分更改为:“发送,{RIGHT} {RIGHT} s”。顺便说一句,我几乎给你一个建议卸载AHK的-1,因为那是不可原谅的:)
demoncodemonkey 2011年

我还将其添加到脚本的开头,以确保命令进入桌面窗口,并防止它们丢失:WinActivate,ahk_class Progman
demoncodemonkey 2011年

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


4
太好了!+1 ...
studiohack

9
这很棒,但是Sleeeeeeeeeeeeep的位置在哪里
demoncodemonkey 2011年

7
备用快捷方式使我的Win7机器进入休眠状态:(
用户

5
@demoncodemonkey:Standbyyyyyyyyyyyy = Sleeeeeeeeeeeeeeep :) –RăzvanFlavius
Panda

11
显然,它不是:superuser.com/a/331545/21887,因此使用此方法被认为是危险的,因此不建议这样做。(它破坏了堆栈。)
亚伦·托马

16

请参阅Wizmo的免费实用程序,它可以完成很多事情。
您要查找的命令可能是:

wizmo待机


Wizmo看起来很酷!几乎让我想我是不是一个MAC变形金刚迷
trolle3000

该实用程序不需要安装。不错的简单工具。
Artur Carvalho

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


7

我已经使用此SLEEP.EXE实用程序多年了。它运作良好,您不必记住要为暂挂模式(默认形式为“ sleep”)使用什么参数。


SLEEP.EXE在Windows 7 Pro SP1上对我有用。父页面还列出了许多其他有用的Windows命令行工具。谢谢,@ jjlin!
CODE READ

6

要禁用休眠模式,您需要使用

powercfg -h off

现在,rundll32 powrprof.dll,SetSuspendState将使工作站处于stanby模式

[编辑]

实际上,我无法设置混合睡眠,因为我有一台笔记本电脑(移动台上没有此状态),对于混合睡眠,您需要启用休眠模式,并且有人说rundll32 powrprof.dll,SetSuspendState会触发默认睡眠控制面板\电源管理设置中的“模式”。请尝试如果rundll32 powrprof.dll,SetSuspendState混合睡眠给出一些结果。


这也会禁用混合睡眠,因此有点违反了目标
Eric L

rundll32 powrprof.dll,SetSuspendState混合睡眠仍然使计算机进入休眠状态。谢谢你的主意。
Eric L

rundll32不适用于调用SetSuspendState,因此它获取错误的参数值。因此,如果您没有故意禁用它,它总是会导致休眠。
SergeyT 2016年

5

制作一个bat文件,其中600是以秒为单位的延迟。

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h关闭

%windir%\ System32 \ rundll32.exe powrprof.dll,SetSuspendState备用


这是使计算机进入睡眠状态的好方法,并且非常容易让其他想要减轻睡眠的人进入。
莫里西

有创意的答案!
Jane Panda

不要使用rundll32.exe来调用SetSuspendState:它不是为此而设计的。在这里
SergeyT,2016年

4

如果您有能力编译.NET程序,则以下命令将执行此操作

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

注意:您不需要按照rundll32 powrprof.dll,SetSuspendState命令要求禁用休眠模式。如果需要,您还可以使用PowerState.Hibernate它将使计算机休眠。

您可以使用此命令在任何版本的Visual Studio中轻松编译EXE 。只需创建一个控制台应用程序并添加对该System.Windows.FormsDLL 的引用。


1
上面引用的Wizmo基本上已经做到了-使用它似乎是等效的。它是由史蒂夫·吉布森(Steve Gibson)编写的,而且是免费的,因此可能比我手工编码同一件事要好!
stevemidgley 2011年

+1。在这里寻找类似的内容superuser.com/q/310045/84229
用户

您甚至不必使用Visual Studio进行编译。而是csc.exe可以使用命令行编译器。它已经安装在所有现代Windows版本中。
SergeyT '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.