阻止计算机进入休眠或是睡眠的方法

1.通过cmd命令行来实现

参考:计算机睡眠功能命令,使用WINDOWS命令行进入睡眠模式_齐妹爱了爱了的博客-CSDN博客

Windows仅允许硬件电源按钮,或“开始菜单/开始屏幕”电源按钮进入睡眠(待机)模式,并没有提供直接进入睡眠模式的命令行工具。

方法1:

如果你的PC上禁用了休眠模式,则可以使用以下命令进入睡眠模式:

C:WindowsSystem32rundll32.exe powrprof.dll,SetSuspendState 0,1,0

但是,如果你启用了休眠模式(默认情况下就是这样),以上命令将使PC休眠,而不是进入睡眠。因此需要这样写:

powercfg -h off

C:WindowsSystem32rundll32.exe powrprof.dll,SetSuspendState 0,1,0

powercfg -h on

第一行禁用了休眠模式,第二行使得PC进入睡眠状态,第三行再允许休眠模式。

注:第1行和第3行都需要管理员权限。

方法2:

Add-Type -Assembly System.Windows.Forms

[System.Windows.Forms.Application]::SetSuspendState(“Suspend”, $false, $true)

再运行Powershell调用之,即进入睡眠模式:

powershell -File C:your-pathsleep.ps1

如果 错说无权运行脚本,先运行这个命令(需管理员权限):

powershell Set-ExecutionPolicy RemoteSigned

方法3:

下载SysInternals的PsShutdown工具,此工具可以在不禁用休眠,也不用提升至管理员权限的情况下使PC进入睡眠状态,这也是优选的方法:

psshutdown.exe -d -t 0 -accepteula

2.过滤窗口的消息函数

参考:如何禁止或暂停Windows的自动屏保、休眠等节电模式_dvlinker的博客-CSDN博客_windows自动休眠

 Windows在执行电源相关设置的事务时,会发送 WM_POWERBROADCAST消息,我们可以截获到该消息, 相关代码如下所示。其中wParam参数指定了即将执行的系统命令类型。值PBT_APMQUERYSUSPEND表明此时执行的是待机,休眠的请求,过滤掉这个消息,就可以阻止系统进入待机或休眠等模式。截获到该通知消息,直接返回BROADCAST_QUERY_DENY即可,

    //为相关窗口类添加虚函数WindowProc    

        但是对于WM_POWERBROADCAST消息,在Win7/Win8中是不会在UAC控制下的程序中广播的,要收到该消息可以关闭UAC,或者manifest文件来提权。并且在Win7/Win8中,如果按上述方法收到WM_POWERBROADCAST消息,是截不到PBT_APMQUERYSUSPEND wParam值的,目前的办法是截获到WM_POWERBROADCAST消息就处理,不比对wParam参数值。

3.

??????参考:  Delphi WinAPI SetThreadExecutionState – 防止系统在应用程序运行时进入睡眠状态或关闭显示器。 – 滔Roy – 博客园

MSDN说法:

The SetThreadExecutionState function cannot be used to prevent the user from putting the computer to sleep. Applications should respect that the user expects a certain behavior when they close the lid on their laptop or press the power button.

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月15日
下一篇 2022年3月15日

相关推荐