Windows 7タスクスケジューラを使用すると、コンピューターがアイドル状態になったときにタスクを実行できますが、コンピューターがアイドル状態から再開したとき、またはアイドル状態でなくなったときにタスクを実行する明確な方法がないようです。
コンピューターがアイドル状態でなくなったときに、ウィンドウでトリガーされたイベント(イベントログ?)は確かにありますか?または、コンピュータがアイドル状態ではなくなったという事実をキャプチャし、スケジュールされたタスクでそれに応答する方法はありますか?
どうすればいいですか?
または、最悪の場合、コンピューターがアイドル状態に入る/終了するときにコマンドまたはイベントを呼び出すことができるコマンドラインプログラムはどこかにありますか?
[更新:] Diogo Rochaへの私の返信のアプローチが機能します。このスクリプトからpy2exeを介してnull実行可能ファイルを作成しました。
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()
-これがエクスポートされたHTMLであるWindowsでスケジュールされたタスクを設定します。
<?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分間アイドル状態にしました。タスクマネージャーは、null実行可能ファイルが実行中であることを示しました。マウスを動かすとすぐにコンピューターがアイドル状態から抜け出し、null実行可能ファイルがタスクリストから消えました。
ここからは、pslist(-accepteulaスイッチを使用して、コンピューターにデプロイされているコンピューターで実際にプログラムが実行されるように)を使用するタスク(またはプログラム-私がPythonおよびpy2exeで実行している)を設定することです。 null exeが実行されているかどうかを確認してください。実行中の場合、pslistはエラーなしで実行されたため、%ERRORLEVEL%環境変数は0に設定されます。その環境変数が1の場合、エラーが発生して実行されました(実行可能ファイルが実行されていませんでした)。コンピューターがアイドル状態でない場合、別のタスクを実行するためにバッチスクリプトでその環境変数を利用しています。