Harmonogram zadań systemu Windows 7 pozwala mi uruchamiać zadanie, gdy komputer jest bezczynny, ale wydaje się, że nie ma oczywistego sposobu uruchomienia zadania, gdy komputer wznawia pracę bezczynnie lub nie jest już bezczynny.
Czy na pewno jakieś zdarzenie jest uruchamiane w systemie Windows (dziennik zdarzeń?), Gdy komputer nie jest już bezczynny? A może w jakiś sposób uchwycić fakt, że komputer nie jest już bezczynny i odpowiedzieć na to zaplanowanym zadaniem?
Jak mam to zrobić?
Lub, w najgorszym przypadku, istnieje program wiersza polecenia, który może wywoływać polecenia lub zdarzenia, gdy komputer wchodzi / wychodzi ze stanu bezczynności?
[AKTUALIZACJA:] Podejście z mojej odpowiedzi do Diogo Rocha działa. Z tego skryptu utworzyłem zerowy plik wykonywalny za pośrednictwem 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()
- i skonfiguruj zaplanowane zadanie w systemie Windows, dla którego jest to eksportowany 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>
I pozostawiłem komputer bezczynny przez 15 minut. Menedżer zadań pokazał, że działa plik wykonywalny o wartości NULL. Gdy tylko przesunąłem mysz, komputer wyłączył się z bezczynności, a plik wykonywalny o wartości null zniknął z listy zadań.
Odtąd jest kwestia skonfigurowania zadania (lub programu - co robię z Pythonem i py2exe), które używa pslist (z przełącznikiem -accepteula, aby na komputerach, na których jest zainstalowany, faktycznie uruchomił program) sprawdź, czy exe zerowy jest uruchomiony. Jeśli jest uruchomiony, zmienna środowiskowa% ERRORLEVEL% jest ustawiona na 0, ponieważ pslist działa bezbłędnie. Jeśli ta zmienna środowiskowa ma wartość 1, działała z błędem (nie znalazła uruchomionego pliku wykonywalnego). Korzystam z tej zmiennej środowiskowej w skrypcie wsadowym, aby uruchomić inne zadanie, jeśli komputer nie jest bezczynny.