Планировщик задач 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, она запустилась с ошибкой (не нашла исполняемый файл). Я использую эту переменную среды в пакетном скрипте для запуска другой задачи, если компьютер не находится в режиме ожидания.