Bộ lập lịch tác vụ Windows 7 cho phép tôi chạy một tác vụ khi máy tính không hoạt động, nhưng dường như không có cách rõ ràng nào để chạy một tác vụ khi máy tính hoạt động trở lại khi không hoạt động hoặc không còn hoạt động.
Chắc chắn có một số sự kiện được kích hoạt trong windows (nhật ký sự kiện?) Khi máy tính không còn hoạt động? Hoặc một số cách để nắm bắt thực tế là máy tính không còn hoạt động, và đáp ứng điều đó với một nhiệm vụ theo lịch trình?
Làm thế nào tôi sẽ làm điều này?
Hoặc, tệ nhất, có một chương trình dòng lệnh ở đâu đó có thể gọi các lệnh hoặc sự kiện khi máy tính vào / thoát trạng thái không hoạt động?
[CẬP NHẬT:] Cách tiếp cận trong bài trả lời của tôi cho Diogo Rocha hoạt động. Tôi đã tạo một tệp thực thi null thông qua py2exe từ tập lệnh này:
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()
- và thiết lập một tác vụ theo lịch trình trong Windows mà đây là HTML đã xuất:
<?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>
Và để máy tính của tôi nhàn rỗi trong 15 phút. Trình quản lý tác vụ cho thấy null thực thi đang chạy. Ngay khi tôi di chuyển con chuột, nó lấy máy tính ra khỏi trạng thái chờ, và lệnh thực thi null biến mất khỏi danh sách tác vụ.
Từ đây, vấn đề là thiết lập một tác vụ (hoặc chương trình - mà tôi đang làm với Python và py2exe) sử dụng pslist (với một công tắc -accepteula để trên các máy tính được triển khai cho nó sẽ thực sự chạy chương trình) kiểm tra xem null exe có chạy không Nếu nó đang chạy, biến môi trường% ERRORLEVEL% được đặt thành 0 vì pslist chạy không có lỗi. Nếu biến môi trường đó là 1, nó chạy có lỗi (nó không tìm thấy chạy thực thi). Tôi đang khai thác biến môi trường đó trong một tập lệnh bó để chạy một tác vụ khác nếu máy tính không hoạt động.