我按照本指南创建了 2 个睡眠和唤醒任务:https://www.groovypost.com/howto/schedule-wake-sleep-windows-automatically/
如果我独立运行睡眠任务,PC 将进入睡眠状态并通过鼠标移动事件唤醒。
如果我安排唤醒任务并将 PC 设置为睡眠键盘按钮,它将通过计划任务唤醒。
因此,任务可以独立运行,但不在任务事件链中运行。
我已尝试过:
- 禁用休眠
powercfg -h off
- 在“设置”->“电源选项”中允许唤醒定时器(设置为“启用”)
- 在 BIOS 中启用与事件计时器和唤醒相关的所有内容
- 睡眠和清醒任务之间暂停超过 5 分钟
- 萨满用手鼓跳舞
更多截图:
无法下载软件。PC 和笔记本电脑上的行为相同。到目前为止,挣扎已经持续了 2 天……
答案1
$script = '$signature = @"
[DllImport("powrprof.dll")]
public static extern bool SetSuspendState(bool Hibernate,bool ForceCritical,bool DisableWakeEvent);
"@
$func = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name "SetSuspendStateFunction" -passThru
$func::SetSuspendState($false,$true,$false)'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($script)
$encodedCommand = [Convert]::ToBase64String($bytes)
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-encodedCommand $encodedCommand"
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 1 -At 16:43
Register-ScheduledTask -TaskName "Sleep" -Action $action -Trigger $trigger -Force
$action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c echo hello"
$settings = New-ScheduledTaskSettingsSet -WakeToRun
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 1 -At 16:44
Register-ScheduledTask -TaskName "Wake" -Action $action -Settings $settings -Trigger $trigger -Force
奇迹般有效 :)
另外不要使用 RUNDLL32,因为
Rundll32 只能调用明确编写为由 Rundll32 调用的 DLL 中的函数。
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/rundll32#remarks