在 Windows 7 中在睡眠前安排任务并推迟睡眠事件直到任务运行

Nor*_*ize 5 skype windows-7 sleep scheduled-tasks

请注意,这与我发现的其他问题(我确实搜索过)不同,例如:关闭笔记本电脑的盖子时有什么方法可以执行某些操作吗?

我使用了相同的技巧在事件 #42(系统、内核电源、事件 42)上安排任务,但问题是任务 - 至少在我的情况下 -进入睡眠之前实际上并没有运行。似乎时间表执行它并同时进入睡眠状态。如果任务需要更长的时间来执行,那么运气不好。

我有一个批处理文件,它可以:

@echo off
cd /d %~dp0
taskkill /t /im skype.exe
sleep 2
taskkill /t /f /im skype.exe
sleep 1
Run Code Online (Sandbox Code Playgroud)

我的任务在睡觉前没有执行。机器立即进入睡眠状态,因为我可以看到 LED 熄灭并在不到 1 秒的时间内听到 HDD 的咔嗒声,而我希望它在进入睡眠状态前保持 3 秒。

似乎调度程序启动的任务并没有推迟睡眠事件——这有充分的理由(如果你的任务挂起怎么办?)——但在我的情况下,这很糟糕!

任何人都知道一种方法可以使其按上述预期工作但被事件 42 触发?

干杯

注意:我知道我可以创建一个批处理/程序/任务,它首先杀死 Skype,等待,然后发送睡眠事件,但我希望能够使用事件 42 触发它。其他用户有时会在 Skype 运行时登录到这台机器在不同的帐户中运行,他们使用开始菜单中的正常睡眠条目将其发送到睡眠状态,而不是自定义批处理/程序。

NOTE2还尝试使用 Windows\System32 中的 taskkill 和 sleep 的完整路径。这会杀死 Skype.exe,然后等待 2 秒钟,然后强行杀死 Skype.exe,然后再等待 1 秒钟。这是由于 Skype for Win 7 x64 中的一个错误导致从睡眠中唤醒后挂起 Skype。与其等待 Microsoft 修复这个非常陈旧、令人沮丧且被过度报告的错误,我想实施我自己的修复程序。

rob*_*rt4 4

事件 42 发生得太晚(在流程结束时,没有时间\n做任何有用的事情),因为它的目的是作为后续诊断的“文档”\n,而不是事情发生之前的通知。\n(我不\n)了解 MSFT 版主如何提供建议?)

\n\n

不幸的是,我还没有找到解决您问题的有效解决方案,\n但我确信 Windows 确实提供了事件前通知,\n虽然不在事件日志中。\n这意味着您必须创建/使用一个始终运行的后台应用程序(〜“守护程序”),捕获此预待机通知,然后执行您喜欢的任何操作。
\n我不知道现有的应用程序可以执行此操作,\n我也不知道相关的 Windows API;但在提供更好的答案之前,以下是一些可以帮助您制定解决方案的起点:

\n\n\n\n

更新:

\n\n

无法关闭睡眠事件 xe2x80x9d,因为 Microsoft 已停止在 XP 和 Vista 中允许使用的PBT_APMQUERYSUSPEND。相反,现在表示您无法阻止用户使计算机进入睡眠状态:

\n\n
\n

应用程序应尊重用户在合上笔记本电脑的盖子或按下电源按钮时\n 期望的某种行为。

\n
\n\n

只剩下PBT_APMSUSPEND事件,之后

\n\n
\n

系统大约允许应用程序处理此通知两秒钟。

\n
\n