home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / mstask.idl < prev    next >
Text File  |  1998-04-25  |  17KB  |  494 lines

  1. //+----------------------------------------------------------------------------
  2. //
  3. //  Task Scheduler
  4. //
  5. //  Microsoft Windows
  6. //  Copyright 1992 - 1998 Microsoft Corporation.
  7. //
  8. //  File:       mstask.idl
  9. //
  10. //  Contents:   ITaskTrigger, ITask, ITaskScheduler, IEnumTasks
  11. //              interfaces and related definitions
  12. //
  13. //  History:    06-Sep-95 EricB created
  14. //
  15. //-----------------------------------------------------------------------------
  16.  
  17. import "oaidl.idl";
  18. import "oleidl.idl";
  19.  
  20. // 148BD520-A2AB-11CE-B11F-00AA00530503 - Task object class ID
  21. // 148BD52A-A2AB-11CE-B11F-00AA00530503 - Task Scheduler class ID
  22. // A6B952F0-A4B1-11D0-997D-00AA006887EC - IScheduledWorkItem interface ID
  23. // 148BD524-A2AB-11CE-B11F-00AA00530503 - ITask interface ID
  24. // 148BD527-A2AB-11CE-B11F-00AA00530503 - ITaskScheduler interface ID
  25. // 148BD528-A2AB-11CE-B11F-00AA00530503 - IEnumTasks interface ID
  26. // 148BD52B-A2AB-11CE-B11F-00AA00530503 - ITaskTrigger interface ID
  27.  
  28. //+----------------------------------------------------------------------------
  29. //
  30. //  Datatypes
  31. //
  32. //-----------------------------------------------------------------------------
  33.  
  34. cpp_quote("#define TASK_SUNDAY       (0x1)")
  35. cpp_quote("#define TASK_MONDAY       (0x2)")
  36. cpp_quote("#define TASK_TUESDAY      (0x4)")
  37. cpp_quote("#define TASK_WEDNESDAY    (0x8)")
  38. cpp_quote("#define TASK_THURSDAY     (0x10)")
  39. cpp_quote("#define TASK_FRIDAY       (0x20)")
  40. cpp_quote("#define TASK_SATURDAY     (0x40)")
  41. cpp_quote("#define TASK_FIRST_WEEK   (1)")
  42. cpp_quote("#define TASK_SECOND_WEEK  (2)")
  43. cpp_quote("#define TASK_THIRD_WEEK   (3)")
  44. cpp_quote("#define TASK_FOURTH_WEEK  (4)")
  45. cpp_quote("#define TASK_LAST_WEEK    (5)")
  46. cpp_quote("#define TASK_JANUARY      (0x1)")
  47. cpp_quote("#define TASK_FEBRUARY     (0x2)")
  48. cpp_quote("#define TASK_MARCH        (0x4)")
  49. cpp_quote("#define TASK_APRIL        (0x8)")
  50. cpp_quote("#define TASK_MAY          (0x10)")
  51. cpp_quote("#define TASK_JUNE         (0x20)")
  52. cpp_quote("#define TASK_JULY         (0x40)")
  53. cpp_quote("#define TASK_AUGUST       (0x80)")
  54. cpp_quote("#define TASK_SEPTEMBER    (0x100)")
  55. cpp_quote("#define TASK_OCTOBER      (0x200)")
  56. cpp_quote("#define TASK_NOVEMBER     (0x400)")
  57. cpp_quote("#define TASK_DECEMBER     (0x800)")
  58.  
  59. cpp_quote("#define TASK_FLAG_INTERACTIVE                  (0x1)")
  60. cpp_quote("#define TASK_FLAG_DELETE_WHEN_DONE             (0x2)")
  61. cpp_quote("#define TASK_FLAG_DISABLED                     (0x4)")
  62. cpp_quote("#define TASK_FLAG_START_ONLY_IF_IDLE           (0x10)")
  63. cpp_quote("#define TASK_FLAG_KILL_ON_IDLE_END             (0x20)")
  64. cpp_quote("#define TASK_FLAG_DONT_START_IF_ON_BATTERIES   (0x40)")
  65. cpp_quote("#define TASK_FLAG_KILL_IF_GOING_ON_BATTERIES   (0x80)")
  66. cpp_quote("#define TASK_FLAG_RUN_ONLY_IF_DOCKED           (0x100)")
  67. cpp_quote("#define TASK_FLAG_HIDDEN                       (0x200)")
  68. cpp_quote("#define TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET (0x400)")
  69. cpp_quote("#define TASK_FLAG_RESTART_ON_IDLE_RESUME       (0x800)")
  70. cpp_quote("#define TASK_FLAG_SYSTEM_REQUIRED              (0x1000)")
  71.  
  72. cpp_quote("#define TASK_TRIGGER_FLAG_HAS_END_DATE         (0x1)")
  73. cpp_quote("#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END (0x2)")
  74. cpp_quote("#define TASK_TRIGGER_FLAG_DISABLED             (0x4)")
  75.  
  76. //
  77. // 1440 = 60 mins/hour * 24 hrs/day since a trigger/TASK could run all day at
  78. // one minute intervals.
  79. //
  80.  
  81. const int TASK_MAX_RUN_TIMES = 1440;
  82.  
  83. typedef enum _TASK_TRIGGER_TYPE {
  84.     TASK_TIME_TRIGGER_ONCE            = 0,
  85.     TASK_TIME_TRIGGER_DAILY           = 1,
  86.     TASK_TIME_TRIGGER_WEEKLY          = 2,
  87.     TASK_TIME_TRIGGER_MONTHLYDATE     = 3,
  88.     TASK_TIME_TRIGGER_MONTHLYDOW      = 4,
  89.     TASK_EVENT_TRIGGER_ON_IDLE        = 5,
  90.     TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6,
  91.     TASK_EVENT_TRIGGER_AT_LOGON       = 7
  92. } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE;
  93.  
  94. typedef struct _DAILY {
  95.     WORD DaysInterval;
  96. } DAILY;
  97.  
  98. typedef struct _WEEKLY {
  99.     WORD WeeksInterval;
  100.     WORD rgfDaysOfTheWeek;
  101. } WEEKLY;
  102.  
  103. typedef struct _MONTHLYDATE {
  104.     DWORD rgfDays;
  105.     WORD  rgfMonths;
  106. } MONTHLYDATE;
  107.  
  108. typedef struct _MONTHLYDOW {
  109.     WORD wWhichWeek;
  110.     WORD rgfDaysOfTheWeek;
  111.     WORD rgfMonths;
  112. } MONTHLYDOW;
  113.  
  114. typedef union _TRIGGER_TYPE_UNION {
  115.     DAILY       Daily;
  116.     WEEKLY      Weekly;
  117.     MONTHLYDATE MonthlyDate;
  118.     MONTHLYDOW  MonthlyDOW;
  119. } TRIGGER_TYPE_UNION;
  120.  
  121. typedef struct _TASK_TRIGGER {
  122.     WORD cbTriggerSize;            // Structure size.
  123.     WORD Reserved1;                // Reserved. Must be zero.
  124.     WORD wBeginYear;               // Trigger beginning date year.
  125.     WORD wBeginMonth;              // Trigger beginning date month.
  126.     WORD wBeginDay;                // Trigger beginning date day.
  127.     WORD wEndYear;                 // Optional trigger ending date year.
  128.     WORD wEndMonth;                // Optional trigger ending date month.
  129.     WORD wEndDay;                  // Optional trigger ending date day.
  130.     WORD wStartHour;               // Run bracket start time hour.
  131.     WORD wStartMinute;             // Run bracket start time minute.
  132.     DWORD MinutesDuration;         // Duration of run bracket.
  133.     DWORD MinutesInterval;         // Run bracket repetition interval.
  134.     DWORD rgFlags;                 // Trigger flags.
  135.     TASK_TRIGGER_TYPE TriggerType; // Trigger type.
  136.     TRIGGER_TYPE_UNION Type;       // Trigger data.
  137.     WORD Reserved2;                // Reserved. Must be zero.
  138.     WORD wRandomMinutesInterval;   // Maximum number of random minutes
  139.                                    // after start time.
  140. } TASK_TRIGGER, * PTASK_TRIGGER;
  141.  
  142. //+----------------------------------------------------------------------------
  143. //
  144. //  Interfaces
  145. //
  146. //-----------------------------------------------------------------------------
  147.  
  148. //+----------------------------------------------------------------------------
  149. //
  150. //  Interface:  ITaskTrigger
  151. //
  152. //  Synopsis:   Trigger object interface. A Task object may contain several
  153. //              of these.
  154. //
  155. //-----------------------------------------------------------------------------
  156. cpp_quote("// {148BD52B-A2AB-11CE-B11F-00AA00530503}")
  157. cpp_quote("DEFINE_GUID(IID_ITaskTrigger, 0x148BD52BL, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
  158.  
  159. interface ITaskTrigger;
  160. [
  161.     local,
  162.     object,
  163.     uuid(148BD52B-A2AB-11CE-B11F-00AA00530503),
  164.     pointer_default(unique)
  165. ]
  166. interface ITaskTrigger : IUnknown
  167. {
  168. // Methods:
  169.     HRESULT SetTrigger(
  170.                 [in] const PTASK_TRIGGER pTrigger);
  171.  
  172.     HRESULT GetTrigger(
  173.                 [out] PTASK_TRIGGER pTrigger);
  174.  
  175.     HRESULT GetTriggerString(
  176.                 [out] LPWSTR * ppwszTrigger);
  177. };
  178.  
  179. //+----------------------------------------------------------------------------
  180. //
  181. //  Interface:  IScheduledWorkItem
  182. //
  183. //  Synopsis:   Abstract base class for any runnable work item that can be
  184. //              scheduled by the task scheduler.
  185. //
  186. //-----------------------------------------------------------------------------
  187. cpp_quote("// {a6b952f0-a4b1-11d0-997d-00aa006887ec}")
  188. cpp_quote("DEFINE_GUID(IID_IScheduledWorkItem, 0xa6b952f0L, 0xa4b1, 0x11d0, 0x99, 0x7d, 0x00, 0xaa, 0x00, 0x68, 0x87, 0xec);")
  189.  
  190. interface IScheduledWorkItem;
  191. [
  192.     local,
  193.     object,
  194.     uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec),
  195.     pointer_default(unique)
  196. ]
  197. interface IScheduledWorkItem : IUnknown
  198. {
  199. // Methods concerning scheduling:
  200.     HRESULT CreateTrigger(
  201.                 [out] WORD *          piNewTrigger,
  202.                 [out] ITaskTrigger ** ppTrigger);
  203.  
  204.     HRESULT DeleteTrigger(
  205.                 [in] WORD iTrigger);
  206.  
  207.     HRESULT GetTriggerCount(
  208.                 [out] WORD * pwCount);
  209.  
  210.     HRESULT GetTrigger(
  211.                 [in]  WORD            iTrigger,
  212.                 [out] ITaskTrigger ** ppTrigger);
  213.  
  214.     HRESULT GetTriggerString(
  215.                 [in]  WORD     iTrigger,
  216.                 [out] LPWSTR * ppwszTrigger);
  217.  
  218.     HRESULT GetRunTimes(
  219.                 [in] const LPSYSTEMTIME   pstBegin,
  220.                 [in] const LPSYSTEMTIME   pstEnd,
  221.                 [in, out]  WORD *         pCount,
  222.                 [out]      LPSYSTEMTIME * rgstTaskTimes);
  223.  
  224.     HRESULT GetNextRunTime(
  225.                 [in, out] SYSTEMTIME * pstNextRun);
  226.  
  227.     HRESULT SetIdleWait(
  228.                 [in]  WORD   wIdleMinutes,
  229.                 [in]  WORD   wDeadlineMinutes);
  230.     HRESULT GetIdleWait(
  231.                 [out] WORD * pwIdleMinutes,
  232.                 [out] WORD * pwDeadlineMinutes);
  233.  
  234. // Other methods:
  235.     HRESULT Run(
  236.                 void);
  237.  
  238.     HRESULT Terminate(
  239.                 void);
  240.  
  241.     HRESULT EditWorkItem(
  242.                 [in] HWND hParent,
  243.                 [in] DWORD dwReserved);
  244.  
  245.     HRESULT GetMostRecentRunTime(
  246.                 [out] SYSTEMTIME * pstLastRun);
  247.  
  248.     HRESULT GetStatus(
  249.                 [out] HRESULT * phrStatus);
  250.  
  251.     HRESULT GetExitCode(
  252.                 [out] DWORD * pdwExitCode);
  253.  
  254. // Properties:
  255.     HRESULT SetComment(
  256.                 [in]  LPCWSTR  pwszComment);
  257.     HRESULT GetComment(
  258.                 [out] LPWSTR * ppwszComment);
  259.  
  260.     HRESULT SetCreator(
  261.                 [in]  LPCWSTR  pwszCreator);
  262.     HRESULT GetCreator(
  263.                 [out] LPWSTR * ppwszCreator);
  264.  
  265.     HRESULT SetWorkItemData(
  266.                 [in] WORD cbData,
  267.                 [in] BYTE rgbData[]);
  268.     HRESULT GetWorkItemData(
  269.                 [out] WORD *  pcbData,
  270.                 [out] BYTE ** prgbData);
  271.  
  272.     HRESULT SetErrorRetryCount(
  273.                 [in]  WORD   wRetryCount);
  274.     HRESULT GetErrorRetryCount(
  275.                 [out] WORD * pwRetryCount);
  276.  
  277.     HRESULT SetErrorRetryInterval(
  278.                 [in]  WORD   wRetryInterval);
  279.     HRESULT GetErrorRetryInterval(
  280.                 [out] WORD * pwRetryInterval);
  281.  
  282.     HRESULT SetFlags(
  283.                 [in]  DWORD   dwFlags);
  284.     HRESULT GetFlags(
  285.                 [out] DWORD * pdwFlags);
  286.  
  287.     HRESULT SetAccountInformation(
  288.                 [in]  LPCWSTR  pwszAccountName,
  289.                 [in]  LPCWSTR  pwszPassword);
  290.     HRESULT GetAccountInformation(
  291.                 [out] LPWSTR * ppwszAccountName);
  292. }
  293.  
  294. //+----------------------------------------------------------------------------
  295. //
  296. //  Interface:  ITask
  297. //
  298. //  Synopsis:   Task object interface. The primary means of task object
  299. //              manipulation.
  300. //
  301. //-----------------------------------------------------------------------------
  302. cpp_quote("// {148BD524-A2AB-11CE-B11F-00AA00530503}")
  303. cpp_quote("DEFINE_GUID(IID_ITask, 0x148BD524L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
  304.  
  305. interface ITask;
  306. [
  307.     local,
  308.     object,
  309.     uuid(148BD524-A2AB-11CE-B11F-00AA00530503),
  310.     pointer_default(unique)
  311. ]
  312. interface ITask : IScheduledWorkItem
  313. {
  314. // Properties that correspond to parameters of CreateProcess:
  315.     HRESULT SetApplicationName(
  316.                 [in]  LPCWSTR  pwszApplicationName);
  317.     HRESULT GetApplicationName(
  318.                 [out] LPWSTR * ppwszApplicationName);
  319.  
  320.     HRESULT SetParameters(
  321.                 [in]  LPCWSTR  pwszParameters);
  322.     HRESULT GetParameters(
  323.                 [out] LPWSTR * ppwszParameters);
  324.  
  325.     HRESULT SetWorkingDirectory(
  326.                 [in]  LPCWSTR  pwszWorkingDirectory);
  327.     HRESULT GetWorkingDirectory(
  328.                 [out] LPWSTR * ppwszWorkingDirectory);
  329.  
  330.     HRESULT SetPriority(
  331.                 [in]  DWORD   dwPriority);
  332.     HRESULT GetPriority(
  333.                 [out] DWORD * pdwPriority);
  334.  
  335. // Other properties:
  336.     HRESULT SetTaskFlags(
  337.                 [in]  DWORD   dwFlags);
  338.     HRESULT GetTaskFlags(
  339.                 [out] DWORD * pdwFlags);
  340.  
  341.     HRESULT SetMaxRunTime(
  342.                 [in]  DWORD   dwMaxRunTimeMS);
  343.     HRESULT GetMaxRunTime(
  344.                 [out] DWORD * pdwMaxRunTimeMS);
  345. }
  346.  
  347. //+----------------------------------------------------------------------------
  348. //
  349. //  Interface:  IEnumWorkItems
  350. //
  351. //  Synopsis:   Work item object enumerator. Enumerates the work item objects
  352. //              within the Tasks folder.
  353. //
  354. //-----------------------------------------------------------------------------
  355. cpp_quote("// {148BD528-A2AB-11CE-B11F-00AA00530503}")
  356. cpp_quote("DEFINE_GUID(IID_IEnumWorkItems, 0x148BD528L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
  357.  
  358. interface IEnumWorkItems;
  359. [
  360.     local,
  361.     object,
  362.     uuid(148BD528-A2AB-11CE-B11F-00AA00530503),
  363.     pointer_default(unique)
  364. ]
  365. interface IEnumWorkItems : IUnknown
  366. {
  367. // Methods:
  368.     HRESULT Next(
  369.                 [in]  ULONG     celt,
  370.                 [out] LPWSTR ** rgpwszNames,
  371.                 [out] ULONG *   pceltFetched);
  372.  
  373.     HRESULT Skip(
  374.                 [in] ULONG celt);
  375.  
  376.     HRESULT Reset(
  377.                 void);
  378.  
  379.     HRESULT Clone(
  380.                 [out] IEnumWorkItems ** ppEnumWorkItems);
  381. }
  382.  
  383. //+----------------------------------------------------------------------------
  384. //
  385. //  Interface:  ITaskScheduler
  386. //
  387. //  Synopsis:   Task Scheduler interface. Provides location transparent
  388. //              manipulation of task and/or queue objects within the Tasks
  389. //              folder.
  390. //
  391. //-----------------------------------------------------------------------------
  392. cpp_quote("// {148BD527-A2AB-11CE-B11F-00AA00530503}")
  393. cpp_quote("DEFINE_GUID(IID_ITaskScheduler, 0x148BD527L, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
  394.  
  395. interface ITaskScheduler;
  396. [
  397.     local,
  398.     object,
  399.     uuid(148BD527-A2AB-11CE-B11F-00AA00530503),
  400.     pointer_default(unique)
  401. ]
  402. interface ITaskScheduler : IUnknown
  403. {
  404. // Methods:
  405.     HRESULT SetTargetComputer(
  406.                 [in] LPCWSTR pwszComputer);
  407.  
  408.     HRESULT GetTargetComputer(
  409.                 [out] LPWSTR * ppwszComputer);
  410.  
  411.     HRESULT Enum(
  412.                 [out] IEnumWorkItems ** ppEnumWorkItems);
  413.  
  414.     HRESULT Activate(
  415.                 [in]  LPCWSTR     pwszName,
  416.                 [in]  REFIID      riid,
  417.                 [out] IUnknown ** ppUnk);
  418.  
  419.     HRESULT Delete(
  420.                 [in] LPCWSTR pwszName);
  421.  
  422.     HRESULT NewWorkItem(
  423.                 [in]  LPCWSTR     pwszTaskName,
  424.                 [in]  REFCLSID    rclsid,
  425.                 [in]  REFIID      riid,
  426.                 [out] IUnknown ** ppUnk);
  427.  
  428.     HRESULT AddWorkItem(
  429.                 [in] LPCWSTR pwszTaskName,
  430.                 [in] IScheduledWorkItem * pWorkItem);
  431.  
  432.     HRESULT IsOfType(
  433.                 [in] LPCWSTR pwszName,
  434.                 [in] REFIID  riid);
  435. }
  436.  
  437. cpp_quote("EXTERN_C const CLSID CLSID_CTask;")
  438. cpp_quote("EXTERN_C const CLSID CLSID_CTaskScheduler;")
  439. cpp_quote(" ")
  440. cpp_quote("// {148BD520-A2AB-11CE-B11F-00AA00530503}")
  441. cpp_quote("DEFINE_GUID(CLSID_CTask, 0x148BD520, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
  442. cpp_quote(" ")
  443. cpp_quote("// {148BD52A-A2AB-11CE-B11F-00AA00530503}")
  444. cpp_quote("DEFINE_GUID(CLSID_CTaskScheduler, 0x148BD52A, 0xA2AB, 0x11CE, 0xB1, 0x1F, 0x00, 0xAA, 0x00, 0x53, 0x05, 0x03);")
  445. cpp_quote(" ")
  446.  
  447.  
  448. //
  449. // NOTE: Definition of HPROPSHEETPAGE is from sdk\inc\prsht.h
  450. //       Including this header file causes numerous redefinition errors.
  451. //
  452.  
  453. struct _PSP;
  454. typedef struct _PSP * HPROPSHEETPAGE;
  455.  
  456. typedef enum _TASKPAGE {
  457.     TASKPAGE_TASK     = 0,
  458.     TASKPAGE_SCHEDULE = 1,
  459.     TASKPAGE_SETTINGS = 2
  460. } TASKPAGE;
  461.  
  462. //+----------------------------------------------------------------------------
  463. //
  464. //  Interface:  IProvideTaskPage
  465. //
  466. //  Synopsis:   Task property page retrieval interface. With this interface,
  467. //              it is possible to retrieve one or more property pages
  468. //              associated with a task object. Task objects inherit this
  469. //              interface.
  470. //
  471. //-----------------------------------------------------------------------------
  472. cpp_quote("// {4086658a-cbbb-11cf-b604-00c04fd8d565}")
  473. cpp_quote("DEFINE_GUID(IID_IProvideTaskPage, 0x4086658aL, 0xcbbb, 0x11cf, 0xb6, 0x04, 0x00, 0xc0, 0x4f, 0xd8, 0xd5, 0x65);")
  474.  
  475. interface IProvideTaskPage;
  476. [
  477.     local,
  478.     object,
  479.     uuid(4086658a-cbbb-11cf-b604-00c04fd8d565),
  480.     pointer_default(unique)
  481. ]
  482. interface IProvideTaskPage : IUnknown
  483. {
  484. // Methods:
  485.     HRESULT GetPage(
  486.                 [in]  TASKPAGE         tpType,
  487.                 [in]  BOOL             fPersistChanges,
  488.                 [out] HPROPSHEETPAGE * phPage);
  489. }
  490.  
  491. cpp_quote("#define ISchedulingAgent       ITaskScheduler")
  492. cpp_quote("#define IID_ISchedulingAgent   IID_ITaskScheduler")
  493. cpp_quote("#define CLSID_CSchedulingAgent CLSID_CTaskScheduler")
  494.