Планувальник завдань Windows 7 дозволяє мені виконувати завдання, коли комп'ютер працює в режимі очікування, але, здається, не існує жодного очевидного способу виконання завдання, коли комп'ютер поновлюється з режиму очікування або більше не працює.
Напевно, якась подія, запущена у Windows (журнал подій?), Коли комп'ютер більше не працює? Або якимось чином зафіксувати той факт, що комп'ютер більше не працює, і відповісти на це плановим завданням?
Як би я це зробив?
Або, в гіршому випадку, чи є десь програма командного рядка, яка може викликати команди чи події, коли комп'ютер переходить у стан очікування?
[ОНОВЛЕННЯ:] Підхід у моїй відповіді на Діого Роша працює. Я створив нульовий виконуваний файл через 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 хвилин. Диспетчер завдань показав запущений виконуваний файл. Як тільки я перемістив мишу, комп'ютер вийшов з режиму очікування, і нульовий виконуваний файл зник зі списку завдань.
Звідси мова йде про те, щоб створити завдання (або програму - яку я роблю з Python та py2exe), яка використовує pslist (з перемикачем -accepteula, щоб на комп'ютерах, які його розгортали, він фактично запускав програму) для перевірте, чи працює null exe. Якщо він працює, змінна середовища% ERRORLEVEL% встановлена на 0, оскільки pslist запускався без помилок. Якщо ця змінна середовище дорівнює 1, вона запускалася з помилкою (вона не знайшла виконуваний файл). Я використовую цю змінну середовища в пакетному скрипті, щоб виконати інше завдання, якщо комп'ютер не працює.