50 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pythoncom, sys, os, time, 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)
 |