jwamstask.pas 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  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 att chello dott 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 att nettaxi dott 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 }
  20. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  21. { }
  22. { The contents of this file are used with permission, subject to the Mozilla }
  23. { Public License Version 1.1 (the "License"); you may not use this file except }
  24. { in compliance with the License. You may obtain a copy of the License at }
  25. { http://www.mozilla.org/MPL/MPL-1.1.html }
  26. { }
  27. { Software distributed under the License is distributed on an "AS IS" basis, }
  28. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  29. { the specific language governing rights and limitations under the License. }
  30. { }
  31. { Alternatively, the contents of this file may be used under the terms of the }
  32. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  33. { provisions of the LGPL License are applicable instead of those above. }
  34. { If you wish to allow use of your version of this file only under the terms }
  35. { of the LGPL License and not to allow others to use your version of this file }
  36. { under the MPL, indicate your decision by deleting the provisions above and }
  37. { replace them with the notice and other provisions required by the LGPL }
  38. { License. If you do not delete the provisions above, a recipient may use }
  39. { your version of this file under either the MPL or the LGPL License. }
  40. { }
  41. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  42. { }
  43. {******************************************************************************}
  44. // $Id: JwaMsTask.pas,v 1.8 2005/09/03 14:27:48 marquardt Exp $
  45. unit JwaMsTask;
  46. {$WEAKPACKAGEUNIT}
  47. {$HPPEMIT ''}
  48. {$HPPEMIT '#include "mstask.h"'}
  49. {$HPPEMIT ''}
  50. {$I jediapilib.inc}
  51. interface
  52. uses
  53. JwaWindows, JwaPrSht;
  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.