L'utilità di pianificazione di Windows 7 mi consente di eseguire un'attività quando il computer diventa inattivo, ma non sembra esserci alcun modo ovvio per eseguire un'attività quando il computer riprende da inattivo o non è più inattivo.
Sicuramente c'è qualche evento attivato in Windows (un registro eventi?) Quando il computer non è più inattivo? O un modo per catturare il fatto che il computer non è più inattivo e rispondere a quello con un'attività pianificata?
Come lo farei?
O, nel peggiore dei casi, esiste un programma da riga di comando che può invocare comandi o eventi quando il computer entra / esce dallo stato di inattività?
[AGGIORNAMENTO:] L'approccio nella mia risposta a Diogo Rocha funziona. Ho creato un eseguibile null tramite py2exe da questo script:
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()
--e imposta un'attività pianificata in Windows per la quale si tratta dell'HTML esportato:
<?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>
E ho lasciato il computer inattivo per 15 minuti. Il task manager ha mostrato l'esecuzione eseguibile null. Non appena ho spostato il mouse, il computer è rimasto inattivo e l'eseguibile null è scomparso dall'elenco delle attività.
Da qui, si tratta di impostare un'attività (o un programma - che sto facendo con Python e py2exe) che utilizza pslist (con un interruttore -accepteula in modo che sui computer su cui è distribuito eseguirà effettivamente il programma) per controlla se l'exe null è in esecuzione. Se è in esecuzione, la variabile di ambiente% ERRORLEVEL% è impostata su 0 perché pslist è stata eseguita senza errori. Se quella variabile di ambiente è 1, è stata eseguita con un errore (non ha trovato il file eseguibile in esecuzione). Sto sfruttando quella variabile d'ambiente in uno script batch per eseguire un'altra attività se il computer non è inattivo.