Mit dem Windows 7-Taskplaner kann ich eine Aufgabe ausführen, wenn der Computer inaktiv ist. Es scheint jedoch keine offensichtliche Möglichkeit zu geben, eine Aufgabe auszuführen, wenn der Computer nicht mehr inaktiv ist oder nicht mehr inaktiv ist.
Sicherlich wird in Windows ein Ereignis ausgelöst (ein Ereignisprotokoll?), Wenn der Computer nicht mehr inaktiv ist. Oder eine Möglichkeit, die Tatsache zu erfassen, dass der Computer nicht mehr inaktiv ist, und darauf mit einer geplanten Aufgabe zu reagieren?
Wie würde ich das machen?
Oder gibt es im schlimmsten Fall irgendwo ein Befehlszeilenprogramm, das Befehle oder Ereignisse aufrufen kann, wenn der Computer in den Leerlaufstatus wechselt / diesen verlässt?
[UPDATE:] Der Ansatz in meiner Antwort an Diogo Rocha funktioniert. Ich habe aus diesem Skript eine über py2exe ausführbare Nulldatei erstellt:
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()
--und richten Sie eine geplante Aufgabe in Windows ein, für die dies der exportierte HTML-Code ist:
<?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>
Und ließ meinen Computer für 15 Minuten im Leerlauf. Der Task-Manager zeigte an, dass die ausführbare Datei null ausgeführt wurde. Sobald ich die Maus bewegte, war der Computer nicht mehr inaktiv, und die ausführbare Nulldatei verschwand aus der Aufgabenliste.
Von hier aus geht es darum, eine Aufgabe (oder ein Programm - was ich mit Python und py2exe mache) einzurichten, die pslist verwendet (mit einem -accepteula-Schalter, damit auf Computern, auf denen es bereitgestellt wird, das Programm tatsächlich ausgeführt wird) Überprüfen Sie, ob die Null-Exe ausgeführt wird. Wenn es ausgeführt wird, wird die Umgebungsvariable% ERRORLEVEL% auf 0 gesetzt, da pslist fehlerfrei ausgeführt wurde. Wenn diese Umgebungsvariable 1 ist, wurde sie mit einem Fehler ausgeführt (die ausführbare Datei wurde nicht ausgeführt). Ich nutze diese Umgebungsvariable in einem Batch-Skript, um eine andere Aufgabe auszuführen, wenn der Computer nicht inaktiv ist.
quelle
Antworten:
Ich denke nicht, dass es möglich ist, Methoden zu implementieren, um einen Trigger "Border" bei Leerlaufereignissen zu erkennen (Eingabe oder Beendigung des Leerlaufstatus). Es gibt jedoch einen Befehl, der Ihr Windows dazu zwingt, in den Leerlaufstatus einzutreten und im Leerlauf ausgelöste Aufgaben auszuführen ::
Sie können ein anderes Ereignis (aus dem Ereignisprotokoll) kombinieren, um diesen Befehl auszuführen, der wiederum eine andere Aufgabe auslöst, die im Ruhezustand ausgeführt werden muss. Soweit Sie wissen, können Sie beliebige Aufgaben frei kombinieren.
quelle