//+---------------------------------------------------------------------------- // // Task Scheduler // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1996. // // File: mstask.idl // // Contents: ITaskTrigger, ITask, ITaskScheduler, IEnumWorkItems // interfaces and related definitions // // History: 06-Sep-95 EricB created // //----------------------------------------------------------------------------- import "oaidl.idl"; import "oleidl.idl"; // 148BD520-A2AB-11CE-B11F-00AA00530503 - Task object class ID // 148BD52A-A2AB-11CE-B11F-00AA00530503 - Task Scheduler class ID // A6B952F0-A4B1-11D0-997D-00AA006887EC - IScheduledWorkItem interface ID // 148BD524-A2AB-11CE-B11F-00AA00530503 - ITask interface ID // 148BD527-A2AB-11CE-B11F-00AA00530503 - ITaskScheduler interface ID // 148BD528-A2AB-11CE-B11F-00AA00530503 - IEnumWorkItems interface ID // 148BD52B-A2AB-11CE-B11F-00AA00530503 - ITaskTrigger interface ID //+---------------------------------------------------------------------------- // // Datatypes // //----------------------------------------------------------------------------- cpp_quote("#define TASK_SUNDAY (0x1)") cpp_quote("#define TASK_MONDAY (0x2)") cpp_quote("#define TASK_TUESDAY (0x4)") cpp_quote("#define TASK_WEDNESDAY (0x8)") cpp_quote("#define TASK_THURSDAY (0x10)") cpp_quote("#define TASK_FRIDAY (0x20)") cpp_quote("#define TASK_SATURDAY (0x40)") cpp_quote("#define TASK_FIRST_WEEK (1)") cpp_quote("#define TASK_SECOND_WEEK (2)") cpp_quote("#define TASK_THIRD_WEEK (3)") cpp_quote("#define TASK_FOURTH_WEEK (4)") cpp_quote("#define TASK_LAST_WEEK (5)") cpp_quote("#define TASK_JANUARY (0x1)") cpp_quote("#define TASK_FEBRUARY (0x2)") cpp_quote("#define TASK_MARCH (0x4)") cpp_quote("#define TASK_APRIL (0x8)") cpp_quote("#define TASK_MAY (0x10)") cpp_quote("#define TASK_JUNE (0x20)") cpp_quote("#define TASK_JULY (0x40)") cpp_quote("#define TASK_AUGUST (0x80)") cpp_quote("#define TASK_SEPTEMBER (0x100)") cpp_quote("#define TASK_OCTOBER (0x200)") cpp_quote("#define TASK_NOVEMBER (0x400)") cpp_quote("#define TASK_DECEMBER (0x800)") cpp_quote("#define TASK_FLAG_INTERACTIVE (0x1)") cpp_quote("#define TASK_FLAG_DELETE_WHEN_DONE (0x2)") cpp_quote("#define TASK_FLAG_DISABLED (0x4)") cpp_quote("#define TASK_FLAG_START_ONLY_IF_IDLE (0x10)") cpp_quote("#define TASK_FLAG_KILL_ON_IDLE_END (0x20)") cpp_quote("#define TASK_FLAG_DONT_START_IF_ON_BATTERIES (0x40)") cpp_quote("#define TASK_FLAG_KILL_IF_GOING_ON_BATTERIES (0x80)") cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_DOCKED (0x100)") cpp_quote("#define TASK_FLAG_HIDDEN (0x200)") cpp_quote("#define TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET (0x400)") cpp_quote("#define TASK_FLAG_RESTART_ON_IDLE_RESUME (0x800)") cpp_quote("#define TASK_FLAG_SYSTEM_REQUIRED (0x1000)") cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_LOGGED_ON (0x2000)") cpp_quote("#define TASK_TRIGGER_FLAG_HAS_END_DATE (0x1)") cpp_quote("#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END (0x2)") cpp_quote("#define TASK_TRIGGER_FLAG_DISABLED (0x4)") // // 1440 = 60 mins/hour * 24 hrs/day since a trigger/TASK could run all day at // one minute intervals. // const int TASK_MAX_RUN_TIMES = 1440; // // The TASK_TRIGGER_TYPE field of the TASK_TRIGGER structure determines // which member of the TRIGGER_TYPE_UNION field to use. // typedef enum _TASK_TRIGGER_TYPE { TASK_TIME_TRIGGER_ONCE = 0, // Ignore the Type field. TASK_TIME_TRIGGER_DAILY = 1, // Use DAILY TASK_TIME_TRIGGER_WEEKLY = 2, // Use WEEKLY TASK_TIME_TRIGGER_MONTHLYDATE = 3, // Use MONTHLYDATE TASK_TIME_TRIGGER_MONTHLYDOW = 4, // Use MONTHLYDOW TASK_EVENT_TRIGGER_ON_IDLE = 5, // Ignore the Type field. TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6, // Ignore the Type field. TASK_EVENT_TRIGGER_AT_LOGON = 7 // Ignore the Type field. } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE; typedef struct _DAILY { WORD DaysInterval; } DAILY; typedef struct _WEEKLY { WORD WeeksInterval; WORD rgfDaysOfTheWeek; } WEEKLY; typedef struct _MONTHLYDATE { DWORD rgfDays; WORD rgfMonths; } MONTHLYDATE; typedef struct _MONTHLYDOW { WORD wWhichWeek; WORD rgfDaysOfTheWeek; WORD rgfMonths; } MONTHLYDOW; typedef union _TRIGGER_TYPE_UNION { DAILY Daily; WEEKLY Weekly; MONTHLYDATE MonthlyDate; MONTHLYDOW MonthlyDOW; } TRIGGER_TYPE_UNION; typedef struct _TASK_TRIGGER { WORD cbTriggerSize; // Structure size. WORD Reserved1; // Reserved. Must be zero. WORD wBeginYear; // Trigger beginning date year. WORD wBeginMonth; // Trigger beginning date month. WORD wBeginDay; // Trigger beginning date day. WORD wEndYear; // Optional trigger ending date year. WORD wEndMonth; // Optional trigger ending date month. WORD wEndDay; // Optional trigger ending date day. WORD wStartHour; // Run bracket start time hour. WORD wStartMinute; // Run bracket start time minute. DWORD MinutesDuration; // Duration of run bracket. DWORD MinutesInterval; // Run bracket repetition interval. DWORD rgFlags; // Trigger flags. TASK_TRIGGER_TYPE TriggerType; // Trigger type. TRIGGER_TYPE_UNION Type; // Trigger data. WORD Reserved2; // Reserved. Must be zero. WORD wRandomMinutesInterval; // Maximum number of random minutes // after start time. } TASK_TRIGGER, * PTASK_TRIGGER; //+---------------------------------------------------------------------------- // // Interfaces // //----------------------------------------------------------------------------- //+---------------------------------------------------------------------------- // // Interface: ITaskTrigger // // Synopsis: Trigger object interface. A Task object may contain several // of these. // //----------------------------------------------------------------------------- cpp_quote("// {148BD52B-A2AB-11CE-B11F-00AA00530503}") cpp_quote("DEFINE_GUID(IID_ITaskTrigger, 0x148BD52BL, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);") interface ITaskTrigger; [ local, object, uuid(148BD52B-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface ITaskTrigger : IUnknown { // Methods: HRESULT SetTrigger( [in] const PTASK_TRIGGER pTrigger); HRESULT GetTrigger( [out] PTASK_TRIGGER pTrigger); HRESULT GetTriggerString( [out] LPWSTR * ppwszTrigger); }; //+---------------------------------------------------------------------------- // // Interface: IScheduledWorkItem // // Synopsis: Abstract base class for any runnable work item that can be // scheduled by the task scheduler. // //----------------------------------------------------------------------------- cpp_quote("// {a6b952f0-a4b1-11d0-997d-00aa006887ec}") cpp_quote("DEFINE_GUID(IID_IScheduledWorkItem, 0xa6b952f0L, 0xa4b1, 0x11d0, 0x99, 0x7d, 0x00, 0xaa, 0x00, 0x68, 0x87, 0xec);") interface IScheduledWorkItem; [ local, object, uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec), pointer_default(unique) ] interface IScheduledWorkItem : IUnknown { // Methods concerning scheduling: HRESULT CreateTrigger( [out] WORD * piNewTrigger, [out] ITaskTrigger ** ppTrigger); HRESULT DeleteTrigger( [in] WORD iTrigger); HRESULT GetTriggerCount( [out] WORD * pwCount); HRESULT GetTrigger( [in] WORD iTrigger, [out] ITaskTrigger ** ppTrigger); HRESULT GetTriggerString( [in] WORD iTrigger, [out] LPWSTR * ppwszTrigger); HRESULT GetRunTimes( [in] const LPSYSTEMTIME pstBegin, [in] const LPSYSTEMTIME pstEnd, [in, out] WORD * pCount, [out] LPSYSTEMTIME * rgstTaskTimes); HRESULT GetNextRunTime( [in, out] SYSTEMTIME * pstNextRun); HRESULT SetIdleWait( [in] WORD wIdleMinutes, [in] WORD wDeadlineMinutes); HRESULT GetIdleWait( [out] WORD * pwIdleMinutes, [out] WORD * pwDeadlineMinutes); // Other methods: HRESULT Run( void); HRESULT Terminate( void); HRESULT EditWorkItem( [in] HWND hParent, [in] DWORD dwReserved); HRESULT GetMostRecentRunTime( [out] SYSTEMTIME * pstLastRun); HRESULT GetStatus( [out] HRESULT * phrStatus); HRESULT GetExitCode( [out] DWORD * pdwExitCode); // Properties: HRESULT SetComment( [in] LPCWSTR pwszComment); HRESULT GetComment( [out] LPWSTR * ppwszComment); HRESULT SetCreator( [in] LPCWSTR pwszCreator); HRESULT GetCreator( [out] LPWSTR * ppwszCreator); HRESULT SetWorkItemData( [in] WORD cbData, [in] BYTE rgbData[]); HRESULT GetWorkItemData( [out] WORD * pcbData, [out] BYTE ** prgbData); HRESULT SetErrorRetryCount( [in] WORD wRetryCount); HRESULT GetErrorRetryCount( [out] WORD * pwRetryCount); HRESULT SetErrorRetryInterval( [in] WORD wRetryInterval); HRESULT GetErrorRetryInterval( [out] WORD * pwRetryInterval); HRESULT SetFlags( [in] DWORD dwFlags); HRESULT GetFlags( [out] DWORD * pdwFlags); HRESULT SetAccountInformation( [in] LPCWSTR pwszAccountName, [in] LPCWSTR pwszPassword); HRESULT GetAccountInformation( [out] LPWSTR * ppwszAccountName); } //+---------------------------------------------------------------------------- // // Interface: ITask // // Synopsis: Task object interface. The primary means of task object // manipulation. // //----------------------------------------------------------------------------- cpp_quote("// {148BD524-A2AB-11CE-B11F-00AA00530503}") cpp_quote("DEFINE_GUID(IID_ITask, 0x148BD524L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);") interface ITask; [ local, object, uuid(148BD524-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface ITask : IScheduledWorkItem { // Properties that correspond to parameters of CreateProcess: HRESULT SetApplicationName( [in] LPCWSTR pwszApplicationName); HRESULT GetApplicationName( [out] LPWSTR * ppwszApplicationName); HRESULT SetParameters( [in] LPCWSTR pwszParameters); HRESULT GetParameters( [out] LPWSTR * ppwszParameters); HRESULT SetWorkingDirectory( [in] LPCWSTR pwszWorkingDirectory); HRESULT GetWorkingDirectory( [out] LPWSTR * ppwszWorkingDirectory); HRESULT SetPriority( [in] DWORD dwPriority); HRESULT GetPriority( [out] DWORD * pdwPriority); // Other properties: HRESULT SetTaskFlags( [in] DWORD dwFlags); HRESULT GetTaskFlags( [out] DWORD * pdwFlags); HRESULT SetMaxRunTime( [in] DWORD dwMaxRunTimeMS); HRESULT GetMaxRunTime( [out] DWORD * pdwMaxRunTimeMS); } //+---------------------------------------------------------------------------- // // Interface: IEnumWorkItems // // Synopsis: Work item object enumerator. Enumerates the work item objects // within the Tasks folder. // //----------------------------------------------------------------------------- cpp_quote("// {148BD528-A2AB-11CE-B11F-00AA00530503}") cpp_quote("DEFINE_GUID(IID_IEnumWorkItems, 0x148BD528L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);") interface IEnumWorkItems; [ local, object, uuid(148BD528-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface IEnumWorkItems : IUnknown { // Methods: HRESULT Next( [in] ULONG celt, [out] LPWSTR ** rgpwszNames, [out] ULONG * pceltFetched); HRESULT Skip( [in] ULONG celt); HRESULT Reset( void); HRESULT Clone( [out] IEnumWorkItems ** ppEnumWorkItems); } //+---------------------------------------------------------------------------- // // Interface: ITaskScheduler // // Synopsis: Task Scheduler interface. Provides location transparent // manipulation of task and/or queue objects within the Tasks // folder. // //----------------------------------------------------------------------------- cpp_quote("// {148BD527-A2AB-11CE-B11F-00AA00530503}") cpp_quote("DEFINE_GUID(IID_ITaskScheduler, 0x148BD527L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);") interface ITaskScheduler; [ local, object, uuid(148BD527-A2AB-11CE-B11F-00AA00530503), pointer_default(unique) ] interface ITaskScheduler : IUnknown { // Methods: HRESULT SetTargetComputer( [in] LPCWSTR pwszComputer); HRESULT GetTargetComputer( [out] LPWSTR * ppwszComputer); HRESULT Enum( [out] IEnumWorkItems ** ppEnumWorkItems); HRESULT Activate( [in] LPCWSTR pwszName, [in] REFIID riid, [out] IUnknown ** ppUnk); HRESULT Delete( [in] LPCWSTR pwszName); HRESULT NewWorkItem( [in] LPCWSTR pwszTaskName, [in] REFCLSID rclsid, [in] REFIID riid, [out] IUnknown ** ppUnk); HRESULT AddWorkItem( [in] LPCWSTR pwszTaskName, [in] IScheduledWorkItem * pWorkItem); HRESULT IsOfType( [in] LPCWSTR pwszName, [in] REFIID riid); } cpp_quote("EXTERN_C const CLSID CLSID_CTask;") cpp_quote("EXTERN_C const CLSID CLSID_CTaskScheduler;") cpp_quote(" ") cpp_quote("// {148BD520-A2AB-11CE-B11F-00AA00530503}") cpp_quote("DEFINE_GUID(CLSID_CTask, 0x148BD520, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);") cpp_quote(" ") cpp_quote("// {148BD52A-A2AB-11CE-B11F-00AA00530503}") cpp_quote("DEFINE_GUID(CLSID_CTaskScheduler, 0x148BD52A, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);") cpp_quote(" ") // // NOTE: Definition of HPROPSHEETPAGE is from sdk\inc\prsht.h // Including this header file causes numerous redefinition errors. // struct _PSP; typedef struct _PSP * HPROPSHEETPAGE; typedef enum _TASKPAGE { TASKPAGE_TASK = 0, TASKPAGE_SCHEDULE = 1, TASKPAGE_SETTINGS = 2 } TASKPAGE; //+---------------------------------------------------------------------------- // // Interface: IProvideTaskPage // // Synopsis: Task property page retrieval interface. With this interface, // it is possible to retrieve one or more property pages // associated with a task object. Task objects inherit this // interface. // //----------------------------------------------------------------------------- cpp_quote("// {4086658a-cbbb-11cf-b604-00c04fd8d565}") cpp_quote("DEFINE_GUID(IID_IProvideTaskPage, 0x4086658aL, 0xcbbb, 0x11cf, 0xb6, 0x04, 0x00, 0xc0, 0x4f, 0xd8, 0xd5, 0x65);") interface IProvideTaskPage; [ local, object, uuid(4086658a-cbbb-11cf-b604-00c04fd8d565), pointer_default(unique) ] interface IProvideTaskPage : IUnknown { // Methods: HRESULT GetPage( [in] TASKPAGE tpType, [in] BOOL fPersistChanges, [out] HPROPSHEETPAGE * phPage); } cpp_quote("#define ISchedulingAgent ITaskScheduler") cpp_quote("#define IEnumTasks IEnumWorkItems") cpp_quote("#define IID_ISchedulingAgent IID_ITaskScheduler") cpp_quote("#define CLSID_CSchedulingAgent CLSID_CTaskScheduler")