在Windows 7中通过批处理文件使计算机休眠


14

我想制作一个批处理文件,一段时间后它将使我的计算机休眠。

我发现最接近的东西是将其置于待机状态,但其工作方式与键盘上的“睡眠”按钮不同(启动时间更长,在单击鼠标时不会唤醒)。有任何想法吗?在Python或C#中会更容易吗?

上面提到的不太理想的技术是在cmd提示符下调用此命令:

Rundll32.exe powrprof.dll,SetSuspendState

只需将倒计时部分添加到.bat中,然后执行。
Apache


休眠是完全不同的,但是,我猜这就是正确的解决方案。
Apache

我相信rundll与休眠状态相同。进入睡眠状态后,单击鼠标,然后在几秒钟内出现登录屏幕...休眠状态必须重新检查BIOS,硬盘驱动器,并将保存的状态从硬盘驱动器传输到ram,然后启动Windows。睡眠的唯一缺点是如果您断电并且存储在ram中的已保存状态丢失(并且较旧的pc实际上会留下更多组件,如PSU和风扇)。
赛宾2010年

Answers:


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分钟后批处理将运行sleep命令。

(可选)您可以防止取消倒数计时(如果您在批处理窗口中按任意键):

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

关于如何用鼠标唤醒的小技巧:

转到: 开始->控制面板->鼠标。

替代文字

在“鼠标属性”窗口中,单击“ 硬件”选项卡,然后从设备列表中选择鼠标。通常,这里只列出一只鼠标,但这取决于您连接到计算机的硬件。从列表中选择鼠标后,单击“ 属性”按钮。

替代文字

现在,在鼠标的“ 属性”窗口中,单击常规”选项卡上的“ 更改设置”按钮。

替代文字

在打开的窗口中,单击“ 电源管理”选项卡,然后选中标题为“ 允许该设备唤醒计算机 ”的选项。单击此窗口上的“ 确定”按钮,然后在仍打开的“ 鼠标属性”窗口上单击“ 确定”按钮。从现在开始,您可以通过单击鼠标按钮或四处移动鼠标将Windows 7从睡眠模式唤醒。

替代文字


3
哇,您真的很喜欢回答问题:)
Omu,2010年


2

工作解决方案!
我必须使用该PsShutdown实用程序来允许正常睡眠(主要问题是SetSuspendState不允许唤醒计时器唤醒计算机)。我要进入睡眠的批处理文件是1条简单的代码:

PsShutdown -d -t 2

请阅读“我如何推荐软件”以获取有关如何推荐软件的一些提示。您应该至少提供一个链接,有关软件本身的一些其他信息,以及如何使用它来解决问题。
DavidPostill

1
这在我的电脑上不起作用...
mrbengi

1

.NET抢救。此解决方案无需更改PC配置(关闭休眠)即可使计算机进入睡眠状态。批量运行此命令:

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来避免禁用休眠模式。

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
请注意,由于DLL并非旨在接受rundll32的参数,因此rundll32会忽略您为其提供的参数(因此SetSuspendState始终处于休眠状态)。
罗德尼

-1:这是完全错误的。在OP所需的操作系统下无法使用。
nc4pk

rundll32没有传递参数,因此为什么必须禁用Hibernate使其起作用。默认的args告诉它始终休眠,但是如果禁用了休眠,则DLL API默认为休眠状态。
罗德尼


0

只需创建一个批处理文件并插入以下行:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
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.