使用 Windows 任务计划程序让 Windows 在没有批处理文件的情况下进入睡眠状态

Jaz*_*mov 3 windows scheduled-tasks

如何在不使用批处理文件的情况下使用任务计划程序使 Windows 10 在特定时间进入睡眠状态?

Ben*_*n N 7

像往常一样在任务计划程序的触发器窗口中设置您的时间。在“常规”选项卡上,让任务以 身份运行可能是最简单的SYSTEM,并且无论用户是否登录都可以运行。不需要最高权限。

由于rundll32一般情况下已弃用和危险,我们将使用 PowerShell 正确调用睡眠功能。将程序/脚本字段设置为powershell.exe. 把它放在添加参数字段中:

-command add-type -assemblyname System.Windows.Forms; [System.Windows.Forms.Application]::SetSuspendState([System.Windows.Forms.PowerState]::Suspend, $false, $false)
Run Code Online (Sandbox Code Playgroud)

add-type命令导入包含托管SetSuspendState方法的 Forms 程序集。第二个命令调用该方法,使计算机进入睡眠状态,但允许唤醒事件退出睡眠状态。(如果您不希望唤醒事件继续工作,请将最后一个更改$false$true。)


Jaz*_*mov 0

  1. 创建一个新任务。
  2. 决定如何设置“常规”选项卡(我建议选择“无论用户是否登录都运行”)。
  3. 我选择“以最高权限运行”,但这取决于您的要求。
  4. 创建一个触发器来描述您希望任务运行的时间。
  5. 创建一个新的Action——这是关键步骤:Action必须是“启动程序”。

“程序/脚本”值应为:rundll32.exe “添加参数(可选):”值应为:powrprof.dll,SetSuspendState sleep “开始于(可选):”值应留空。

观察“SetSuspendState”参数的情况很重要!“setsuspendstate”不起作用!

  1. 保存您的任务并测试运行它。

  • **危险!** `rundll32` 已[弃用](https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643)。此外,“sleep”不是 [`SetSuspendState`](https://msdn.microsoft.com/en-us/library/windows/desktop/aa373201(v=vs.85).aspx) 的有效参数,其中只需要三个布尔值。因此,传递字符串只是偶然的,并且可能会破坏函数的堆栈。 (2认同)