JwaMsTask.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:16k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Microsoft Task Scheduler API interface Unit for Object Pascal                }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: mstask.h, released August 2001. The original Pascal    }
  9. { code is: MsTask.pas, released October 2001. The initial developer of the     }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Contributor(s): Sunish Issac  (sunish@nettaxi.com)                           }
  16. {                 }
  17. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  18. {                }
  19. { You may retrieve the latest version of this file at the Project JEDI home    }
  20. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  21. { http://members.chello.nl/m.vanbrakel2                                        }
  22. {                }
  23. { The contents of this file are used with permission, subject to the Mozilla   }
  24. { Public License Version 1.1 (the "License"); you may not use this file except }
  25. { in compliance with the License. You may obtain a copy of the License at      }
  26. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  27. {                                                                              }
  28. { Software distributed under the License is distributed on an "AS IS" basis,   }
  29. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  30. { the specific language governing rights and limitations under the License.    }
  31. {                                                                              }
  32. { Alternatively, the contents of this file may be used under the terms of the  }
  33. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  34. { provisions of the LGPL License are applicable instead of those above.        }
  35. { If you wish to allow use of your version of this file only under the terms   }
  36. { of the LGPL License and not to allow others to use your version of this file }
  37. { under the MPL, indicate your decision by deleting  the provisions above and  }
  38. { replace  them with the notice and other provisions required by the LGPL      }
  39. { License.  If you do not delete the provisions above, a recipient may use     }
  40. { your version of this file under either the MPL or the LGPL License.          }
  41. {                 }
  42. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  43. {                 }
  44. {******************************************************************************}
  45. unit JwaMsTask;
  46. {$WEAKPACKAGEUNIT}
  47. {$HPPEMIT ''}
  48. {$HPPEMIT '#include "mstask.h"'}
  49. {$HPPEMIT ''}
  50. {$I WINDEFINES.INC}
  51. interface
  52. uses
  53.   JwaWinBase, JwaWinType, CommCtrl {TODO};
  54. const
  55.   TASK_SUNDAY = ($1);
  56.   {$EXTERNALSYM TASK_SUNDAY}
  57.   TASK_MONDAY = ($2);
  58.   {$EXTERNALSYM TASK_MONDAY}
  59.   TASK_TUESDAY = ($4);
  60.   {$EXTERNALSYM TASK_TUESDAY}
  61.   TASK_WEDNESDAY = ($8);
  62.   {$EXTERNALSYM TASK_WEDNESDAY}
  63.   TASK_THURSDAY = ($10);
  64.   {$EXTERNALSYM TASK_THURSDAY}
  65.   TASK_FRIDAY = ($20);
  66.   {$EXTERNALSYM TASK_FRIDAY}
  67.   TASK_SATURDAY = ($40);
  68.   {$EXTERNALSYM TASK_SATURDAY}
  69.   TASK_FIRST_WEEK = (1);
  70.   {$EXTERNALSYM TASK_FIRST_WEEK}
  71.   TASK_SECOND_WEEK = (2);
  72.   {$EXTERNALSYM TASK_SECOND_WEEK}
  73.   TASK_THIRD_WEEK = (3);
  74.   {$EXTERNALSYM TASK_THIRD_WEEK}
  75.   TASK_FOURTH_WEEK = (4);
  76.   {$EXTERNALSYM TASK_FOURTH_WEEK}
  77.   TASK_LAST_WEEK = (5);
  78.   {$EXTERNALSYM TASK_LAST_WEEK}
  79.   TASK_JANUARY = ($1);
  80.   {$EXTERNALSYM TASK_JANUARY}
  81.   TASK_FEBRUARY = ($2);
  82.   {$EXTERNALSYM TASK_FEBRUARY}
  83.   TASK_MARCH = ($4);
  84.   {$EXTERNALSYM TASK_MARCH}
  85.   TASK_APRIL = ($8);
  86.   {$EXTERNALSYM TASK_APRIL}
  87.   TASK_MAY = ($10);
  88.   {$EXTERNALSYM TASK_MAY}
  89.   TASK_JUNE = ($20);
  90.   {$EXTERNALSYM TASK_JUNE}
  91.   TASK_JULY = ($40);
  92.   {$EXTERNALSYM TASK_JULY}
  93.   TASK_AUGUST = ($80);
  94.   {$EXTERNALSYM TASK_AUGUST}
  95.   TASK_SEPTEMBER = ($100);
  96.   {$EXTERNALSYM TASK_SEPTEMBER}
  97.   TASK_OCTOBER = ($200);
  98.   {$EXTERNALSYM TASK_OCTOBER}
  99.   TASK_NOVEMBER = ($400);
  100.   {$EXTERNALSYM TASK_NOVEMBER}
  101.   TASK_DECEMBER = ($800);
  102.   {$EXTERNALSYM TASK_DECEMBER}
  103.   TASK_FLAG_INTERACTIVE = ($1);
  104.   {$EXTERNALSYM TASK_FLAG_INTERACTIVE}
  105.   TASK_FLAG_DELETE_WHEN_DONE = ($2);
  106.   {$EXTERNALSYM TASK_FLAG_DELETE_WHEN_DONE}
  107.   TASK_FLAG_DISABLED = ($4);
  108.   {$EXTERNALSYM TASK_FLAG_DISABLED}
  109.   TASK_FLAG_START_ONLY_IF_IDLE = ($10);
  110.   {$EXTERNALSYM TASK_FLAG_START_ONLY_IF_IDLE}
  111.   TASK_FLAG_KILL_ON_IDLE_END = ($20);
  112.   {$EXTERNALSYM TASK_FLAG_KILL_ON_IDLE_END}
  113.   TASK_FLAG_DONT_START_IF_ON_BATTERIES = ($40);
  114.   {$EXTERNALSYM TASK_FLAG_DONT_START_IF_ON_BATTERIES}
  115.   TASK_FLAG_KILL_IF_GOING_ON_BATTERIES = ($80);
  116.   {$EXTERNALSYM TASK_FLAG_KILL_IF_GOING_ON_BATTERIES}
  117.   TASK_FLAG_RUN_ONLY_IF_DOCKED = ($100);
  118.   {$EXTERNALSYM TASK_FLAG_RUN_ONLY_IF_DOCKED}
  119.   TASK_FLAG_HIDDEN = ($200);
  120.   {$EXTERNALSYM TASK_FLAG_HIDDEN}
  121.   TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET = ($400);
  122.   {$EXTERNALSYM TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET}
  123.   TASK_FLAG_RESTART_ON_IDLE_RESUME = ($800);
  124.   {$EXTERNALSYM TASK_FLAG_RESTART_ON_IDLE_RESUME}
  125.   TASK_FLAG_SYSTEM_REQUIRED = ($1000);
  126.   {$EXTERNALSYM TASK_FLAG_SYSTEM_REQUIRED}
  127.   TASK_FLAG_RUN_ONLY_IF_LOGGED_ON = ($2000);
  128.   {$EXTERNALSYM TASK_FLAG_RUN_ONLY_IF_LOGGED_ON}
  129.   TASK_TRIGGER_FLAG_HAS_END_DATE = ($1);
  130.   {$EXTERNALSYM TASK_TRIGGER_FLAG_HAS_END_DATE}
  131.   TASK_TRIGGER_FLAG_KILL_AT_DURATION_END = ($2);
  132.   {$EXTERNALSYM TASK_TRIGGER_FLAG_KILL_AT_DURATION_END}
  133.   TASK_TRIGGER_FLAG_DISABLED = ($4);
  134.   {$EXTERNALSYM TASK_TRIGGER_FLAG_DISABLED}
  135.   TASK_MAX_RUN_TIMES = (1440);
  136.   {$EXTERNALSYM TASK_MAX_RUN_TIMES}
  137. type
  138.   PTaskTriggerType = ^TTaskTriggerType;
  139.   _TASK_TRIGGER_TYPE = (
  140.     TASK_TIME_TRIGGER_ONCE,
  141.     TASK_TIME_TRIGGER_DAILY,
  142.     TASK_TIME_TRIGGER_WEEKLY,
  143.     TASK_TIME_TRIGGER_MONTHLYDATE,
  144.     TASK_TIME_TRIGGER_MONTHLYDOW,
  145.     TASK_EVENT_TRIGGER_ON_IDLE,
  146.     TASK_EVENT_TRIGGER_AT_SYSTEMSTART,
  147.     TASK_EVENT_TRIGGER_AT_LOGON);
  148.   TASK_TRIGGER_TYPE = _TASK_TRIGGER_TYPE;
  149.   {$EXTERNALSYM TASK_TRIGGER_TYPE}
  150.   {$EXTERNALSYM _TASK_TRIGGER_TYPE}
  151.   PTASK_TRIGGER_TYPE = ^_TASK_TRIGGER_TYPE;
  152.   {$EXTERNALSYM PTASK_TRIGGER_TYPE}
  153.   TTaskTriggerType = _TASK_TRIGGER_TYPE;
  154.   PDaily = ^TDaily;
  155.   _DAILY = record
  156.     DaysInterval: WORD;
  157.   end;
  158.   {$EXTERNALSYM _DAILY}
  159.   TDaily = _DAILY;
  160.   PWeekly = ^TWeekly;
  161.   _WEEKLY = record
  162.     WeeksInterval: WORD;
  163.     rgfDaysOfTheWeek: WORD;
  164.   end;
  165.   {$EXTERNALSYM _WEEKLY}
  166.   TWeekly = _WEEKLY;
  167.   PMonthlyDate = ^TMonthlyDate;
  168.   _MONTHLYDATE = record
  169.     rgfDays: DWORD;
  170.     rgfMonths: WORD;
  171.   end;
  172.   {$EXTERNALSYM _MONTHLYDATE}
  173.   TMonthlyDate = _MONTHLYDATE;
  174.   PMonthlyDow = ^TMonthlyDow;
  175.   _MONTHLYDOW = record
  176.     wWhichWeek: WORD;
  177.     rgfDaysOfTheWeek: WORD;
  178.     rgfMonths: WORD;
  179.   end;
  180.   {$EXTERNALSYM _MONTHLYDOW}
  181.   TMonthlyDow = _MONTHLYDOW;
  182.   PTriggerTypeUnion = ^TTriggerTypeUnion;
  183.   _TRIGGER_TYPE_UNION = record
  184.     case Integer of
  185.       0: (Daily: TDaily);
  186.       1: (Weekly: TWeekly);
  187.       2: (MonthlyDate: TMonthlyDate);
  188.       3: (MonthlyDOW: TMonthlyDow);
  189.   end;
  190.   {$EXTERNALSYM _TRIGGER_TYPE_UNION}
  191.   TRIGGER_TYPE_UNION = _TRIGGER_TYPE_UNION;
  192.   {$EXTERNALSYM TRIGGER_TYPE_UNION}
  193.   TTriggerTypeUnion = _TRIGGER_TYPE_UNION;
  194.   PTaskTrigger = ^TTaskTrigger;
  195.   _TASK_TRIGGER = record
  196.     cbTriggerSize: WORD;
  197.     Reserved1: WORD;
  198.     wBeginYear: WORD;
  199.     wBeginMonth: WORD;
  200.     wBeginDay: WORD;
  201.     wEndYear: WORD;
  202.     wEndMonth: WORD;
  203.     wEndDay: WORD;
  204.     wStartHour: WORD;
  205.     wStartMinute: WORD;
  206.     MinutesDuration: DWORD;
  207.     MinutesInterval: DWORD;
  208.     rgFlags: DWORD;
  209.     TriggerType: TTaskTriggerType;
  210.     Type_: TTriggerTypeUnion;
  211.     Reserved2: WORD;
  212.     wRandomMinutesInterval: WORD;
  213.   end;
  214.   {$EXTERNALSYM _TASK_TRIGGER}
  215.   TASK_TRIGGER = _TASK_TRIGGER;
  216.   {$EXTERNALSYM TASK_TRIGGER}
  217.   PTASK_TRIGGER = ^TASK_TRIGGER;
  218.   {$EXTERNALSYM PTASK_TRIGGER}
  219.   TTaskTrigger = _TASK_TRIGGER;
  220. const
  221.   IID_ITaskTrigger: TGUID = '{148BD52B-A2AB-11CE-B11F-00AA00530503}';
  222.   {$EXTERNALSYM IID_ITaskTrigger}
  223. // interface ITaskTrigger
  224. type
  225.   ITaskTrigger = interface (IUnknown)
  226.     ['{148BD52B-A2AB-11CE-B11F-00AA00530503}']
  227.     function SetTrigger(const pTrigger: PTaskTrigger): HRESULT; stdcall;
  228.     function GetTrigger(pTrigger: PTaskTrigger): HRESULT; stdcall;
  229.     function GetTriggerString(var ppwszTrigger: LPWSTR): HRESULT; stdcall;
  230.   end;
  231.   {$EXTERNALSYM ITaskTrigger}
  232. const
  233.   IID_IScheduledWorkItem: TGUID = '{A6B952F0-A4B1-11D0-997D-00AA006887EC}';
  234.   {$EXTERNALSYM IID_IScheduledWorkItem}
  235. // interface IScheduledWorkItem
  236. type
  237.   IScheduledWorkItem = interface (IUnknown)
  238.     ['{A6B952F0-A4B1-11D0-997D-00AA006887EC}']
  239.     function CreateTrigger(out piNewTrigger: Word; out ppTrigger: ITaskTrigger): HRESULT; stdcall;
  240.     function DeleteTrigger(iTrigger: Word): HRESULT; stdcall;
  241.     function GetTriggerCount(out pwCount: Word): HRESULT; stdcall;
  242.     function GetTrigger(iTrigger: Word; var ppTrigger: ITaskTrigger): HRESULT; stdcall;
  243.     function GetTriggerString(iTrigger: Word; out ppwszTrigger: PWideChar): HRESULT; stdcall;
  244.     function GetRunTimes(const pstBegin: LPSYSTEMTIME; const pstEnd: LPSYSTEMTIME;
  245.       var pCount: Word; out rgstTaskTimes: LPSYSTEMTIME): HRESULT; stdcall;
  246.     function GetNextRunTime(var pstNextRun: SYSTEMTIME): HRESULT; stdcall;
  247.     function SetIdleWait(wIdleMinutes: Word; wDeadlineMinutes: Word): HRESULT; stdcall;
  248.     function GetIdleWait(out pwIdleMinutes: Word; out pwDeadlineMinutes: Word): HRESULT; stdcall;
  249.     function Run: HRESULT; stdcall;
  250.     function Terminate: HRESULT; stdcall;
  251.     function EditWorkItem(hParent: HWND; dwReserved: DWORD): HRESULT; stdcall;
  252.     function GetMostRecentRunTime(out pstLastRun: TSystemTime): HRESULT; stdcall;
  253.     function GetStatus(out phrStatus: HRESULT): HRESULT stdcall;
  254.     function GetExitCode(out pdwExitCode: DWORD): HRESULT stdcall;
  255.     function SetComment(pwszComment: LPCWSTR): HRESULT stdcall;
  256.     function GetComment(out ppwszComment: LPWSTR): HRESULT stdcall;
  257.     function SetCreator(pwszCreator: LPCWSTR): HRESULT; stdcall;
  258.     function GetCreator(out ppwszCreator: LPWSTR): HRESULT; stdcall;
  259.     function SetWorkItemData(cbData: Word; var rgbData: Byte): HRESULT; stdcall;
  260.     function GetWorkItemData(out pcbData: Word; out prgbData: Byte): HRESULT; stdcall;
  261.     function SetErrorRetryCount(wRetryCount: Word): HRESULT; stdcall;
  262.     function GetErrorRetryCount(out pwRetryCount: Word): HRESULT; stdcall;
  263.     function SetErrorRetryInterval(wRetryInterval: Word): HRESULT; stdcall;
  264.     function GetErrorRetryInterval(out pwRetryInterval: Word): HRESULT; stdcall;
  265.     function SetFlags(dwFlags: DWORD): HRESULT; stdcall;
  266.     function GetFlags(out pdwFlags: DWORD): HRESULT; stdcall;
  267.     function SetAccountInformation(pwszAccountName: LPCWSTR; pwszPassword: LPCWSTR): HRESULT; stdcall;
  268.     function GetAccountInformation(out ppwszAccountName: LPWSTR): HRESULT; stdcall;
  269.   end;
  270.   {$EXTERNALSYM IScheduledWorkItem}
  271. const
  272.   IID_ITask: TGUID = '{148BD524-A2AB-11CE-B11F-00AA00530503}';
  273.   {$EXTERNALSYM IID_ITask}
  274. // interface ITask
  275. type
  276.   ITask = interface (IScheduledWorkItem)
  277.     ['{148BD524-A2AB-11CE-B11F-00AA00530503}']
  278.     function SetApplicationName(pwszApplicationName: LPCWSTR): HRESULT; stdcall;
  279.     function GetApplicationName(out ppwszApplicationName: LPWSTR): HRESULT; stdcall;
  280.     function SetParameters(pwszParameters: LPCWSTR): HRESULT; stdcall;
  281.     function GetParameters(out ppwszParameters: LPWSTR): HRESULT; stdcall;
  282.     function SetWorkingDirectory(pwszWorkingDirectory: LPCWSTR): HRESULT; stdcall;
  283.     function GetWorkingDirectory(out ppwszWorkingDirectory: LPWSTR): HRESULT; stdcall;
  284.     function SetPriority(dwPriority: DWORD): HRESULT; stdcall;
  285.     function GetPriority(out pdwPriority: DWORD): HRESULT; stdcall;
  286.     function SetTaskFlags(dwFlags: DWORD): HRESULT; stdcall;
  287.     function GetTaskFlags(out pdwFlags: DWORD): HRESULT; stdcall;
  288.     function SetMaxRunTime(dwMaxRunTimeMS: DWORD): HRESULT; stdcall;
  289.     function GetMaxRunTime(out pdwMaxRunTimeMS: DWORD): HRESULT; stdcall;
  290.   end;
  291.   {$EXTERNALSYM ITask}
  292. const
  293.   IID_IEnumWorkItems: TGUID = '{148BD528-A2AB-11CE-B11F-00AA00530503}';
  294.   {$EXTERNALSYM IID_IEnumWorkItems}
  295. // interface IEnumWorkItems
  296. type
  297.   IEnumWorkItems = interface (IUnknown)
  298.     ['{148BD528-A2AB-11CE-B11F-00AA00530503}']
  299.     function Next(celt: ULONG; out rgpwszNames: LPLPWSTR; out pceltFetched: ULONG): HRESULT; stdcall;
  300.     function Skip(celt: ULONG): HRESULT; stdcall;
  301.     function Reset: HRESULT; stdcall;
  302.     function Clone(out ppEnumWorkItems: IEnumWorkItems): HRESULT; stdcall;
  303.   end;
  304.   {$EXTERNALSYM IEnumWorkItems}
  305. const
  306.   IID_ITaskScheduler: TGUID = '{148BD527-A2AB-11CE-B11F-00AA00530503}';
  307.   {$EXTERNALSYM IID_ITaskScheduler}
  308. // interface ITaskScheduler
  309. type
  310.   ITaskScheduler = interface (IUnknown)
  311.     ['{148BD527-A2AB-11CE-B11F-00AA00530503}']
  312.     function SetTargetComputer(pwszComputer: LPCWSTR): HRESULT; stdcall;
  313.     function GetTargetComputer(out ppwszComputer: LPWSTR): HRESULT; stdcall;
  314.     function Enum(out ppEnumWorkItems: IEnumWorkItems): HRESULT; stdcall;
  315.     function Activate(pwszName: PWideChar; var riid: TGUID; out ppUnk: IUnknown): HRESULT; stdcall;
  316.     function Delete(pwszName: LPCWSTR): HRESULT; stdcall;
  317.     function NewWorkItem(pwszTaskName: PWideChar; var rclsid: TGUID; var riid: TGUID; out ppUnk: IUnknown): HRESULT; stdcall;
  318.     function AddWorkItem(pwszTaskName: LPCWSTR; var pWorkItem: IScheduledWorkItem): HRESULT; stdcall;
  319.     function IsOfType(pwszName: LPCWSTR; var riid: TGUID): HRESULT; stdcall;
  320.   end;
  321.   {$EXTERNALSYM ITaskScheduler}
  322. const
  323.   CLSID_CTask: TGuid = '{148BD520-A2AB-11CE-B11F-00AA00530503}';
  324.   {$EXTERNALSYM CLSID_CTask}
  325.   CLSID_CTaskScheduler: TGuid = '{148BD52A-A2AB-11CE-B11F-00AA00530503}';
  326.   {$EXTERNALSYM CLSID_CTaskScheduler}
  327. type
  328.   PTaskPage = ^TTaskPage;
  329.   _TASKPAGE = (
  330.     TASKPAGE_TASK,
  331.     TASKPAGE_SCHEDULE,
  332.     TASKPAGE_SETTINGS);
  333.   {$EXTERNALSYM _TASKPAGE}
  334.   TASKPAGE = _TASKPAGE;
  335.   {$EXTERNALSYM TASKPAGE}
  336.   TTaskPage = _TASKPAGE;
  337. const
  338.   IID_IProvideTaskPage: TGuid = '{4086658a-cbbb-11cf-b604-00c04fd8d565}';
  339.   {$EXTERNALSYM IID_IProvideTaskPage}
  340. // interface IProvideTaskPage
  341. type
  342.   IProvideTaskPage = interface (IUnknown)
  343.     ['{4086658A-CBBB-11CF-B604-00C04FD8D565}']
  344.     function GetPage(tpType: TTaskPage; fPersistChanges: BOOL; var phPage: HPropSheetPage): HRESULT; stdcall;
  345.   end;
  346.   {$EXTERNALSYM IProvideTaskPage}
  347. const
  348.   ISchedulingAgent = ITaskScheduler;
  349.   {$EXTERNALSYM ISchedulingAgent}
  350.   IEnumTasks = IEnumWorkItems;
  351.   {$EXTERNALSYM IEnumTasks}
  352.   //IID_ISchedulingAgent   = IID_ITaskScheduler;
  353.   IID_ISchedulingAgent: TGUID = '{148BD527-A2AB-11CE-B11F-00AA00530503}';
  354.   {$EXTERNALSYM IID_ISchedulingAgent}
  355.   //CLSID_CSchedulingAgent = CLSID_CTaskScheduler;
  356.   CLSID_CSchedulingAgent: TGuid = '{148BD52A-A2AB-11CE-B11F-00AA00530503}';
  357.   {$EXTERNALSYM CLSID_CSchedulingAgent}
  358. //added to use save option without ole2 - not there in original source of mstask.h
  359.   {$EXTERNALSYM IID_IPersistFile}
  360.   IID_IPersistFile: TGUID = (
  361.     D1: $0000010B; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46));
  362. implementation
  363. end.