按照给我的建议这个问题我提出过这个问题。所以我有一个 exe 文件,我想在计算机空闲一段时间后运行(空闲不是指睡眠,而是指不活动或未被使用),比如说 30 分钟。一旦达到“不活动”超时,我希望应用程序运行。假设我的 PC 设置为在电源选项中只有“屏幕睡眠后”选项,没有计算机睡眠,因此除非我使用 Windows+L 键强制执行,否则 PC 不会进入睡眠状态或屏幕锁定屏幕,我想保持这些设置不变。我想检测不活动时间段,一旦达到不活动时间段,我想执行一个 exe 文件。有什么想法可以做到这一点吗?
编辑:
我已按照答案中提供的步骤进行操作:
创建了一个新任务,添加了一个触发器,将其设置为事件:空闲并创建任务。在条件选项卡中,指定任务等待 1 分钟才能变为空闲状态(而不是等待 10 分钟以进行测试)。
但是我等了 10 多分钟,任务从未在 PC1 上触发,而是在另一台 PC2 上触发。我在网上查了一下,发现这PowerCfg -requests
会显示是什么阻止了 PC 空闲,当我在 PC2 上运行它时,没有任何结果,但是当我在 PC1 上运行它时,我得到了这个“旧版内核调用程序“ 司机。
所以我使用了Powercfg -requestsoverride
,但是当我运行时powercfg -requestsoverride Driver "Legacy Kernel Caller" System
,它成功了,我在Powercfg -requestsoverride
列表中找到了它,但是powercfg -requests
它仍然显示[DRIVER] Legacy Kernel Caller
在下面SYSTEM:
并且任务从未触发过,请问有什么建议吗?
答案1
答案2
最简单的解决方案是使用旧的任务计划程序。
任务计划程序不仅允许您在特定时间日期设置任务,而且它实际上还可以在某些事件时设置任务,例如登录时,当然还有空闲时。
创建新任务,添加触发器,将其设置为事件:空闲并创建任务。在条件选项卡中,您可以指定任务等待空闲的时间(您将其设置为 30 分钟)。
此外,您还可以在系统再次启动时通过任务计划程序自动终止任务。
答案3
抱歉,不是用 C#,但很简单。这对于 AutoIt 来说是一项完美的工作:http://autoitscript.com
这是我为您编写的脚本。将其放入 .au3 文件中,将 notepad 替换为您的 exe,并在 Run 中包含完整路径:
#include <Timers.au3>
While 1
Sleep(10)
$idleTimer = _Timer_GetIdleTime()
If $idleTimer > 60000 And Not ProcessExists("notepad.exe") Then
Run("notepad.exe")
ElseIf $idleTimer < 10 Then
ProcessClose("notepad.exe")
EndIf
WEnd
答案4
您可以使用schtasks
命令提示符来简化任务:
schtasks /create /tn "My Task" /tr "EXE Application path" /sc onidle /i Number_Of_Minutes_Inactive