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)