67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
import os
|
|
import sys
|
|
import time
|
|
|
|
import pythoncom
|
|
import win32api
|
|
from win32com.taskscheduler import taskscheduler
|
|
|
|
task_name = "test_addtask.job"
|
|
ts = pythoncom.CoCreateInstance(
|
|
taskscheduler.CLSID_CTaskScheduler,
|
|
None,
|
|
pythoncom.CLSCTX_INPROC_SERVER,
|
|
taskscheduler.IID_ITaskScheduler,
|
|
)
|
|
tasks = ts.Enum()
|
|
for task in tasks:
|
|
print(task)
|
|
if task_name in tasks:
|
|
print("Deleting existing task " + task_name)
|
|
ts.Delete(task_name)
|
|
|
|
t = ts.NewWorkItem(task_name)
|
|
t.SetComment("rude comments")
|
|
t.SetApplicationName(sys.executable)
|
|
t.SetPriority(taskscheduler.REALTIME_PRIORITY_CLASS)
|
|
t.SetParameters(
|
|
"-c\"import win32ui,time;win32ui.MessageBox('hey bubba I am running');\""
|
|
)
|
|
t.SetWorkingDirectory(os.path.dirname(sys.executable))
|
|
t.SetCreator("test_addtask.py")
|
|
t.SetMaxRunTime(20000) # milliseconds
|
|
t.SetFlags(
|
|
taskscheduler.TASK_FLAG_INTERACTIVE | taskscheduler.TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
|
|
)
|
|
## |taskscheduler.TASK_FLAG_DELETE_WHEN_DONE) #task self destructs when no more future run times
|
|
t.SetAccountInformation(win32api.GetUserName(), None)
|
|
## None is only valid for local system acct or if task flags contain TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
|
|
t.SetWorkItemData("some binary garbage")
|
|
|
|
run_time = time.localtime(time.time() + 60)
|
|
tr_ind, tr = t.CreateTrigger()
|
|
tt = tr.GetTrigger()
|
|
|
|
## flags default to TASK_TRIGGER_FLAG_DISABLED (4)
|
|
tt.Flags = taskscheduler.TASK_TRIGGER_FLAG_KILL_AT_DURATION_END
|
|
tt.BeginYear = int(time.strftime("%Y", run_time))
|
|
tt.BeginMonth = int(time.strftime("%m", run_time))
|
|
tt.BeginDay = int(time.strftime("%d", run_time))
|
|
tt.StartMinute = int(time.strftime("%M", run_time))
|
|
tt.StartHour = int(time.strftime("%H", run_time))
|
|
tt.MinutesInterval = 1
|
|
tt.MinutesDuration = 5
|
|
|
|
tt.TriggerType = taskscheduler.TASK_TIME_TRIGGER_MONTHLYDATE
|
|
# months can contain multiples in a bitmask, use 1<<(month_nbr-1)
|
|
tt.MonthlyDate_Months = 1 << (
|
|
int(time.strftime("%m", run_time)) - 1
|
|
) ## corresponds to TASK_JANUARY..TASK_DECEMBER constants
|
|
# days too
|
|
tt.MonthlyDate_Days = 1 << (int(time.strftime("%d", run_time)) - 1)
|
|
tr.SetTrigger(tt)
|
|
print(t.GetTriggerString(tr_ind))
|
|
|
|
pf = t.QueryInterface(pythoncom.IID_IPersistFile)
|
|
pf.Save(None, 1)
|