Penjadwal tugas Windows 7 memungkinkan saya menjalankan tugas saat komputer idle, tetapi sepertinya tidak ada cara yang jelas untuk menjalankan tugas saat komputer melanjutkan dari idle, atau tidak lagi menganggur.
Tentunya ada beberapa peristiwa yang dipicu di windows (sebuah event log?) Ketika komputer tidak lagi menganggur? Atau beberapa cara untuk menangkap fakta bahwa komputer tidak lagi menganggur, dan menanggapinya dengan tugas terjadwal?
Bagaimana saya melakukan ini?
Atau, paling buruk, adakah program baris perintah di suatu tempat yang dapat memanggil perintah atau kejadian ketika komputer memasuki / keluar dari status siaga?
[PEMBARUAN:] Pendekatan dalam balasan saya untuk Diogo Rocha berfungsi. Saya membuat null dieksekusi melalui py2exe dari skrip ini:
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()
--dan mengatur tugas terjadwal di Windows yang ini adalah HTML yang diekspor:
<?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>
Dan komputer saya diam selama 15 menit. Manajer tugas menunjukkan eksekusi nol yang dapat dijalankan. Segera setelah saya menggerakkan mouse, itu mengambil komputer dari idle, dan eksekusi nol menghilang dari daftar tugas.
Dari sini, ini soal mengatur tugas (atau program - yang saya lakukan dengan Python dan py2exe) yang menggunakan pslist (dengan sakelar -accepteula sehingga pada komputer yang digunakan akan benar-benar menjalankan program) untuk periksa apakah null exe sedang berjalan. Jika sedang berjalan, variabel lingkungan% ERRORLEVEL% diatur ke 0 karena pslist berjalan tanpa kesalahan. Jika variabel lingkungan itu 1, itu berjalan dengan kesalahan (tidak menemukan eksekusi yang dapat dijalankan). Saya mengeksploitasi variabel lingkungan dalam skrip batch untuk menjalankan tugas lain jika komputer tidak siaga.