哪些 Windows 7 任務排程器事件會回應空閒 END 條件?

哪些 Windows 7 任務排程器事件會回應空閒 END 條件?

Windows 7 任務計劃程式允許我在電腦空閒時執行任務,但當電腦從空閒狀態恢復或不再空閒時,似乎沒有任何明顯的方法來執行任務。

當電腦不再空閒時,Windows 中肯定會觸發一些事件(事件日誌?)?或者某種方式來捕獲計算機不再空閒的事實,並通過計劃任務對此做出響應?

我該怎麼做?

或者,最糟糕的情況是,是否有一個命令列程式可以在電腦進入/退出空閒狀態時呼叫命令或事件?

[更新:] 我回覆 Diogo Rocha 的方法有效。我透過 py2exe 透過此腳本建立了一個空可執行檔:

import sys
import time

#restart a pause every twenty seconds, with two functions that call each other.

def call_pause():
    pause()

def pause():
    time.sleep(20)
    call_pause()

call_pause()

--並在 Windows 中設定排程任務,這是匯出的 HTML:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2012-04-27T17:40:46.8871631</Date>
    <Author>GENIUS-BREATH-COMPY</Author>
    <Description>This task runs ProgA when the computer enters an idle state, and terminates ProgA when the computer *leaves* an idle state. The is all for scheduled TaskB, which periodically runs a batch that tests whether ProgA is running. If ProgA is not running (because this task terminated it), ProgB runs (as the computer is NOT idle). If ProgA *is* running, TaskB's batch does not run ProgB.</Description>
  </RegistrationInfo>
  <Triggers>
    <IdleTrigger>
      <Enabled>true</Enabled>
    </IdleTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <Duration>PT1M</Duration>
      <WaitTimeout>PT0S</WaitTimeout>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>true</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>true</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\path_to\nullExecutable</Command>
    </Exec>
  </Actions>
</Task>

然後我的電腦閒置了 15 分鐘。任務管理器顯示空可執行檔正在執行。當我移動滑鼠時,電腦就脫離了空閒狀態,而空可執行檔從任務清單中消失了。

從這裡開始,問題是設定一個使用 pslist 的任務(或程式——我正在使用 Python 和 py2exe 執行此操作)(帶有 -accepteula 開關,以便在部署到它的電腦上實際運行該程式)檢查空exe是否正在運行。如果正在運行,%ERRORLEVEL% 環境變數將設為 0,因為 pslist 運行時沒有錯誤。如果該環境變數為 1,則執行時會出現錯誤(未找到正在執行的可執行檔)。如果電腦運作正常,我將在批次腳本中利用該環境變數來執行另一個任務不是閒置的。

答案1

我認為不可能實現任何方法來檢測空閒事件上的觸發「邊界」(進入空閒狀態或退出空閒狀態),但是有一個命令可以強制您的 Windows 進入空閒狀態並運行空閒觸發任務:

Rundll32.exe advapi32.dll,ProcessIdleTasks

您可以組合另一個事件(來自事件日誌)來執行此命令,從而觸發另一個必須在空閒​​狀態下執行的任務。據您所知,您可以自由組合任何您想要的任務。

相關內容