El programador de tareas de Windows 7 me permite ejecutar una tarea cuando la computadora está inactiva, pero no parece haber ninguna forma obvia de ejecutar una tarea cuando la computadora se reanuda desde inactiva o ya no está inactiva.
¿Seguramente hay algún evento activado en Windows (un registro de eventos?) Cuando la computadora ya no está inactiva? ¿O alguna forma de capturar el hecho de que la computadora ya no está inactiva y responder a eso con una tarea programada?
¿Cómo haría esto?
O, en el peor de los casos, ¿hay un programa de línea de comandos en algún lugar que pueda invocar comandos o eventos cuando la computadora entra / sale del estado inactivo?
[ACTUALIZACIÓN:] El enfoque en mi respuesta a Diogo Rocha funciona. Creé un ejecutable nulo a través de py2exe a partir de este 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()
--y configure una tarea programada en Windows para la cual este es el HTML exportado:
<?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>
Y dejé mi computadora inactiva durante 15 minutos. El administrador de tareas mostró el ejecutable nulo en ejecución. Tan pronto como moví el mouse, saqué la computadora del modo inactivo y el ejecutable nulo desapareció de la lista de tareas.
A partir de aquí, se trata de configurar una tarea (o programa, lo que estoy haciendo con Python y py2exe) que usa pslist (con un interruptor -accepteula para que en las computadoras que se implementan realmente ejecute el programa) para compruebe si se está ejecutando el exe nulo. Si se está ejecutando, la variable de entorno% ERRORLEVEL% se establece en 0 porque pslist se ejecutó sin error. Si esa variable de entorno es 1, se ejecutó con un error (no encontró el ejecutable ejecutándose). Estoy explotando esa variable de entorno en un script por lotes para ejecutar otra tarea si la computadora no está inactiva.
fuente
Respuestas:
No creo que sea posible implementar ningún método para detectar un "borde" de activación en eventos inactivos (entrar o salir del estado inactivo), sin embargo, hay un comando que obliga a su Windows a ingresar en estado inactivo y ejecutar tareas desencadenadas inactivas :
Puede combinar otro evento (desde el registro de eventos) para ejecutar este comando que a su vez desencadenará otra tarea que debe ejecutarse en estado inactivo. Hasta donde usted sabe, puede combinar libremente cualquier tarea que desee.
fuente