' ********************************************************************************************
' TB_MSTSK.INC - Task Scheduler wrapper functions
' ********************************************************************************************' ********************************************************************************************
' ClsIDs
' ********************************************************************************************
$CLSID_CTask = GUID$("{148BD520-A2AB-11CE-B11F-00AA00530503}")
$CLSID_CTaskScheduler = GUID$("{148BD52A-A2AB-11CE-B11F-00AA00530503}")
' ********************************************************************************************
' IIDs
' ********************************************************************************************
$IID_ITaskTrigger = GUID$("{148BD52B-A2AB-11CE-B11F-00AA00530503}")
$IID_IScheduledWorkItem = GUID$("{a6b952f0-a4b1-11d0-997d-00aa006887ec}")
$IID_ITask = GUID$("{148BD524-A2AB-11CE-B11F-00AA00530503}")
$IID_IEnumWorkItems = GUID$("{148BD528-A2AB-11CE-B11F-00AA00530503}")
$IID_ITaskScheduler = GUID$("{148BD527-A2AB-11CE-B11F-00AA00530503}")
$IID_IProvideTaskPage = GUID$("{4086658a-cbbb-11cf-b604-00c04fd8d565}")
' ********************************************************************************************
' Constants, enumerations and structures
' ********************************************************************************************
%TASK_SUNDAY = &H1
%TASK_MONDAY = &H2
%TASK_TUESDAY = &H4
%TASK_WEDNESDAY = &H8
%TASK_THURSDAY = &H10
%TASK_FRIDAY = &H20
%TASK_SATURDAY = &H40
%TASK_FIRST_WEEK = 1
%TASK_SECOND_WEEK = 2
%TASK_THIRD_WEEK = 3
%TASK_FOURTH_WEEK = 4
%TASK_LAST_WEEK = 5
%TASK_JANUARY = &H1
%TASK_FEBRUARY = &H2
%TASK_MARCH = &H4
%TASK_APRIL = &H8
%TASK_MAY = &H10
%TASK_JUNE = &H20
%TASK_JULY = &H40
%TASK_AUGUST = &H80
%TASK_SEPTEMBER = &H100
%TASK_OCTOBER = &H200
%TASK_NOVEMBER = &H400
%TASK_DECEMBER = &H800
%TASK_FLAG_INTERACTIVE = &H1
%TASK_FLAG_DELETE_WHEN_DONE = &H2
%TASK_FLAG_DISABLED = &H4
%TASK_FLAG_START_ONLY_IF_IDLE = &H10
%TASK_FLAG_KILL_ON_IDLE_END = &H20
%TASK_FLAG_DONT_START_IF_ON_BATTERIES = &H40
%TASK_FLAG_KILL_IF_GOING_ON_BATTERIES = &H80
%TASK_FLAG_RUN_ONLY_IF_DOCKED = &H100
%TASK_FLAG_HIDDEN = &H200
%TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET = &H400
%TASK_FLAG_RESTART_ON_IDLE_RESUME = &H800
%TASK_FLAG_SYSTEM_REQUIRED = &H1000
%TASK_TRIGGER_FLAG_HAS_END_DATE = &H1
%TASK_TRIGGER_FLAG_KILL_AT_DURATION_END = &H2
%TASK_TRIGGER_FLAG_DISABLED = &H4
%TASK_MAX_RUN_TIMES = 1440
' enum _TASK_TRIGGER_TYPE
%TASK_TIME_TRIGGER_ONCE = 0
%TASK_TIME_TRIGGER_DAILY = 1
%TASK_TIME_TRIGGER_WEEKLY = 2
%TASK_TIME_TRIGGER_MONTHLYDATE = 3
%TASK_TIME_TRIGGER_MONTHLYDOW = 4
%TASK_EVENT_TRIGGER_ON_IDLE = 5
%TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6
%TASK_EVENT_TRIGGER_AT_LOGON = 7
TYPE tagDAILY
DaysInterval AS WORD
END TYPE
TYPE tagWEEKLY
WeeksInterval AS WORD
rgfDaysOfTheWeek AS WORD
END TYPE
TYPE tagMONTHLYDATE
rgfDays AS DWORD
rgfMonths AS WORD
END TYPE
TYPE tagMONTHLYDOW
wWhichWeek AS WORD
rgfDaysOfTheWeek AS WORD
rgfMonths AS WORD
filler AS WORD ' For DWORD alignment
END TYPE
UNION TRIGGER_TYPE_UNION
Daily AS tagDAILY
Weekly AS tagWEEKLY
MonthlyDate AS tagMONTHLYDATE
MonthlyDOW AS tagMONTHLYDOW
END UNION
TYPE TASK_TRIGGER
cbTriggerSize AS WORD
Reserved1 AS WORD
wBeginYear AS WORD
wBeginMonth AS WORD
wBeginDay AS WORD
wEndYear AS WORD
wEndMonth AS WORD
wEndDay AS WORD
wStartHour AS WORD
wStartMinute AS WORD
MinutesDuration AS DWORD
MinutesInterval AS DWORD
rgFlags AS DWORD
TriggerType AS LONG
uType AS TRIGGER_TYPE_UNION
Reserved2 AS WORD
wRandomMinutesInterval AS WORD
END TYPE
' enum _TASKPAGE
%TASKPAGE_TASK = 0
%TASKPAGE_SCHEDULE = 1
%TASKPAGE_SETTINGS = 2
' ********************************************************************************************
' ITaskTrigger interface
' ********************************************************************************************
' The ITaskTrigger interface is used to access and set triggers for a task. Triggers specify
' task start times, repetition criteria, and other parameters that control when a task is run.
' ITaskTrigger is the primary interface of the task_trigger object. To create a trigger object,
' call CreateTrigger or GetTrigger.
' ********************************************************************************************
' ********************************************************************************************
' SetTrigger method
' ********************************************************************************************
' The SetTrigger method sets the trigger criteria for a task trigger.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetTrigger )(
' ITaskTrigger __RPC_FAR * This,
' /* [in] */ const PTASK_TRIGGER pTrigger);
' ********************************************************************************************
FUNCTION ITaskTrigger_SetTrigger (BYVAL pthis AS DWORD PTR, BYREF pTrigger AS TASK_TRIGGER) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[3] USING ITaskTrigger_SetTrigger(pthis, pTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTrigger method
' ********************************************************************************************
' The GetTrigger method retrieves the current task trigger.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTrigger )(
' ITaskTrigger __RPC_FAR * This,
' /* [out] */ PTASK_TRIGGER pTrigger);
' ********************************************************************************************
FUNCTION ITaskTrigger_GetTrigger (BYVAL pthis AS DWORD PTR, BYREF pTrigger AS TASK_TRIGGER) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[4] USING ITaskTrigger_GetTrigger(pthis, pTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTriggerString method
' ********************************************************************************************
' The GetTriggerString method retrieves the current task trigger in the form of a string. This
' string appears in the Task Scheduler user interface in a form similar to "At 2PM every day, starting 5/11/97."
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTriggerString )(
' ITaskTrigger __RPC_FAR * This,
' /* [out] */ LPWSTR __RPC_FAR *ppwszTrigger);
' ********************************************************************************************
DECLARE FUNCTION Proto_ITaskTrigger_GetTriggerString (BYVAL pthis AS DWORD PTR, BYREF ppwszTrigger AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION ITaskTrigger_GetTriggerString (BYVAL pthis AS DWORD PTR, BYREF strTrigger AS STRING) AS LONG
LOCAL HRESULT AS LONG
LOCAL ppwszTrigger AS DWORD PTR
LOCAL bstrLen AS LONG
LOCAL buffer AS STRING
CALL DWORD @@pthis[5] USING Proto_ITaskTrigger_GetTriggerString(pthis, ppwszTrigger) TO HRESULT
strTrigger = ""
IF ISTRUE ppwszTrigger THEN
bstrlen = lstrlenW(BYVAL ppwszTrigger)
IF ISTRUE bstrlen THEN
buffer = PEEK$(ppwszTrigger, bstrlen * 2)
strTrigger = ACODE$(buffer)
END IF
CoTaskMemFree ppwszTrigger
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' IScheduledWorkItem interface
' ********************************************************************************************
' The IScheduledWorkItem interface provides methods for managing specific work items.
' IScheduledWorkItem is the base interface for the ITask interface. All methods provided by
' IScheduledWorkItem are inherited by the ITask interface and are typically called through the
' ITask interface.
' ********************************************************************************************
' ********************************************************************************************
' CreateTrigger method
' ********************************************************************************************
' The CreateTrigger method creates a trigger for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateTrigger )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *piNewTrigger,
' /* [out] */ IScheduledWorkItemTrigger __RPC_FAR *__RPC_FAR *ppTrigger);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_CreateTrigger (BYVAL pthis AS DWORD PTR, BYREF piNewTrigger AS WORD, BYREF ppTrigger AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[3] USING IScheduledWorkItem_CreateTrigger(pthis, piNewTrigger, ppTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' DeleteTrigger method
' ********************************************************************************************
' The DeleteTrigger method deletes a trigger from a work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *DeleteTrigger )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD iTrigger);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_DeleteTrigger (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[4] USING IScheduledWorkItem_DeleteTrigger(pthis, iTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTriggerCount method
' ********************************************************************************************
' The GetTriggerCount method retrieves the number of triggers for the current work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTriggerCount )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pwCount);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetTriggerCount (BYVAL pthis AS DWORD PTR, BYREF pwCount AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[5] USING IScheduledWorkItem_GetTriggerCount(pthis, pwCount) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTrigger method
' ********************************************************************************************
' The GetTrigger method retrieves a task trigger.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTrigger )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD iTrigger,
' /* [out] */ IScheduledWorkItemTrigger __RPC_FAR *__RPC_FAR *ppTrigger);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetTrigger (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD, BYREF ppTrigger AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[6] USING IScheduledWorkItem_GetTrigger(pthis, iTrigger, ppTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTriggerString method
' ********************************************************************************************
' The GetTriggerString method retrieves a string that describes the work item trigger.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTriggerString )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD iTrigger,
' /* [out] */ LPWSTR __RPC_FAR *ppwszTrigger);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_GetTriggerString (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD, BYREF ppwszTrigger AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetTriggerString (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD, BYREF strTrigger AS STRING) AS LONG
LOCAL HRESULT AS LONG
LOCAL ppwszTrigger AS DWORD PTR
LOCAL bstrLen AS LONG
LOCAL buffer AS STRING
CALL DWORD @@pthis[7] USING Proto_IScheduledWorkItem_GetTriggerString(pthis, iTrigger, ppwszTrigger) TO HRESULT
strTrigger = ""
IF ISTRUE ppwszTrigger THEN
bstrlen = lstrlenW(BYVAL ppwszTrigger)
IF ISTRUE bstrlen THEN
buffer = PEEK$(ppwszTrigger, bstrlen * 2)
strTrigger = ACODE$(buffer)
END IF
CoTaskMemFree ppwszTrigger
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetRunTimes method
' ********************************************************************************************
' The GetRunTimes method retrieves the work item run times for a specified time period.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetRunTimes )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ const LPSYSTEMTIME pstBegin,
' /* [in] */ const LPSYSTEMTIME pstEnd,
' /* [out][in] */ WORD __RPC_FAR *pCount,
' /* [out] */ LPSYSTEMTIME __RPC_FAR *rgstTaskTimes);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetRunTimes (BYVAL pthis AS DWORD PTR, BYREF pstBegin AS SYSTEMTIME, BYREF pstEnd AS SYSTEMTIME, BYREF pCount AS WORD, BYREF rgstTaskTimes AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[8] USING IScheduledWorkItem_GetRunTimes(pthis, pstBegin, pstEnd, pCount, rgstTaskTimes) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetNextRunTime method
' ********************************************************************************************
' The GetNextRunTime method retrieves the next time the work item will run.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextRunTime )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out][in] */ SYSTEMTIME __RPC_FAR *pstNextRun);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetNextRunTime (BYVAL pthis AS DWORD PTR, BYREF pstNextRun AS SYSTEMTIME) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[9] USING IScheduledWorkItem_GetNextRunTime(pthis, pstNextRun) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetIdleWait method
' ********************************************************************************************
' The SetIdleWait method sets the minutes that the system must be idle before the work item can run.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetIdleWait )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD wIdleMinutes,
' /* [in] */ WORD wDeadlineMinutes);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetIdleWait (BYVAL pthis AS DWORD PTR, BYVAL wIdleMinutes AS WORD, BYVAL wDeadlineMinutes AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[10] USING IScheduledWorkItem_SetIdleWait(pthis, wIdleMinutes, wDeadlineMinutes) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetIdleWait method
' ********************************************************************************************
' The GetIdleWait method retrieves the idle wait time for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIdleWait )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pwIdleMinutes,
' /* [out] */ WORD __RPC_FAR *pwDeadlineMinutes);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetIdleWait (BYVAL pthis AS DWORD PTR, BYREF wIdleMinutes AS WORD, BYREF wDeadlineMinutes AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[11] USING IScheduledWorkItem_GetIdleWait(pthis, wIdleMinutes, wDeadlineMinutes) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' Run method
' ********************************************************************************************
' The Run method sends a request to the Task Scheduler service to run the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Run )(
' IScheduledWorkItem __RPC_FAR * This);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_Run (BYVAL pthis AS DWORD PTR) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[12] USING IScheduledWorkItem_Run(pthis) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' Terminate method
' ********************************************************************************************
' The Terminate method ends the execution of the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Terminate )(
' IScheduledWorkItem __RPC_FAR * This);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_Terminate (BYVAL pthis AS DWORD PTR) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[13] USING IScheduledWorkItem_Terminate(pthis) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' EditWorkItem method
' ********************************************************************************************
' The EditWorkItem method displays the Task, Schedule, and settings property pages for the
' work item, allowing a user set the properties on those pages.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *EditWorkItem )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ HWND hParent,
' /* [in] */ DWORD dwReserved);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_EditWorkItem (BYVAL pthis AS DWORD PTR, BYVAL hParent AS DWORD, BYVAL dwReserved AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[14] USING IScheduledWorkItem_EditWorkItem(pthis, hParent, dwReserved) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetMostRecentRunTime method
' ********************************************************************************************
' The GetMostRecentRunTime method retrieves the most recent time the work item began running.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetMostRecentRunTime )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ SYSTEMTIME __RPC_FAR *pstLastRun);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetMostRecentRunTime (BYVAL pthis AS DWORD PTR, BYREF pstLastRun AS SYSTEMTIME) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[15] USING IScheduledWorkItem_GetMostRecentRunTime(pthis, pstLastRun) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetStatus method
' ********************************************************************************************
' The GetStatus method retrieves the status of the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetStatus )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ HRESULT __RPC_FAR *phrStatus);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetStatus (BYVAL pthis AS DWORD PTR, BYREF phrStatus AS LONG) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[16] USING IScheduledWorkItem_GetStatus(pthis, phrStatus) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetExitCode method
' ********************************************************************************************
' The GetExitCode method retrieves the last exit code returned by the executable associated
' with the work item on its last run. The method also returns the exit code returned to Task
' Scheduler when it last attempted to run the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetExitCode )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ DWORD __RPC_FAR *pdwExitCode);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetExitCode (BYVAL pthis AS DWORD PTR, BYREF pdwExitCode AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[17] USING IScheduledWorkItem_GetExitCode(pthis, pdwExitCode) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetComment method
' ********************************************************************************************
' The SetComment method sets the comment for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetComment )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ LPCWSTR pwszComment);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_SetComment (BYVAL pthis AS DWORD PTR, BYVAL pwszComment AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetComment (BYVAL pthis AS DWORD PTR, BYVAL strComment AS STRING) AS LONG
LOCAL HRESULT AS LONG
strComment = UCODE$(strComment)
CALL DWORD @@pthis[18] USING Proto_IScheduledWorkItem_SetComment(pthis, STRPTR(strComment)) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetComment method
' ********************************************************************************************
' The GetComment method retrieves the comment for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetComment )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ LPWSTR __RPC_FAR *ppwszComment);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_GetComment (BYVAL pthis AS DWORD PTR, BYREF ppwszComment AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetComment (BYVAL pthis AS DWORD PTR, BYREF strComment AS STRING) AS LONG
LOCAL HRESULT AS LONG
LOCAL ppwszComment AS DWORD PTR
LOCAL bstrLen AS LONG
LOCAL buffer AS STRING
CALL DWORD @@pthis[19] USING Proto_IScheduledWorkItem_GetComment(pthis, ppwszComment) TO HRESULT
strComment = ""
IF ISTRUE ppwszComment THEN
bstrlen = lstrlenW(BYVAL ppwszComment)
IF ISTRUE bstrlen THEN
buffer = PEEK$(ppwszComment, bstrlen * 2)
strComment = ACODE$(buffer)
END IF
CoTaskMemFree ppwszComment
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetCreator method
' ********************************************************************************************
' The SetCreator method sets the name of the work item's creator.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetCreator )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ LPCWSTR pwszCreator);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_SetCreator (BYVAL pthis AS DWORD PTR, BYVAL pwszCreator AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetCreator (BYVAL pthis AS DWORD PTR, BYVAL strCreator AS STRING) AS LONG
LOCAL HRESULT AS LONG
strCreator = UCODE$(strCreator)
CALL DWORD @@pthis[20] USING Proto_IScheduledWorkItem_SetCreator(pthis, STRPTR(strCreator)) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetCreator method
' ********************************************************************************************
' The GetCreator method retrieves the name of the creator of the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetCreator )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ LPWSTR __RPC_FAR *ppwszCreator);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_GetCreator (BYVAL pthis AS DWORD PTR, BYREF ppwszCreator AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetCreator (BYVAL pthis AS DWORD PTR, BYREF strCreator AS STRING) AS LONG
LOCAL HRESULT AS LONG
LOCAL ppwszCreator AS DWORD PTR
LOCAL bstrLen AS LONG
LOCAL buffer AS STRING
CALL DWORD @@pthis[21] USING Proto_IScheduledWorkItem_GetCreator(pthis, ppwszCreator) TO HRESULT
strCreator = ""
IF ISTRUE ppwszCreator THEN
bstrlen = lstrlenW(BYVAL ppwszCreator)
IF ISTRUE bstrlen THEN
buffer = PEEK$(ppwszCreator, bstrlen * 2)
strCreator = ACODE$(buffer)
END IF
CoTaskMemFree ppwszCreator
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetWorkItemData method
' ********************************************************************************************
' The SetWorkItemData method stores application-defined data associated with the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetWorkItemData )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD cbData,
' /* [in] */ BYTE __RPC_FAR rgbData[ ]);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetWorkItemData (BYVAL pthis AS DWORD PTR, BYVAL cbData AS WORD, BYVAL rgbData AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[22] USING IScheduledWorkItem_SetWorkItemData(pthis, cbData, rgbData) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetWorkItemData method
' ********************************************************************************************
' The GetWorkItemData method retrieves application-defined data associated with the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetWorkItemData )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pcbData,
' /* [out] */ BYTE __RPC_FAR *__RPC_FAR *prgbData);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetWorkItemData (BYVAL pthis AS DWORD PTR, BYREF pcbData AS WORD, BYREF prgbData AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[23] USING IScheduledWorkItem_GetWorkItemData(pthis, pcbData, prgbData) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetErrorRetryCount method
' ********************************************************************************************
' The SetErrorRetryCount method sets the number of times Task Scheduler will try to run the
' work item again if an error occurs. Not currently implemented.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetErrorRetryCount )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD wRetryCount);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetErrorRetryCount (BYVAL pthis AS DWORD PTR, BYVAL wRetryCount AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[24] USING IScheduledWorkItem_SetErrorRetryCount(pthis, wRetryCount) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetErrorRetryCount method
' ********************************************************************************************
' The GetErrorRetryCount method returns the number of times that the Task Scheduler will retry
' an operation when an error occurs. This method is not implemented.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetErrorRetryCount )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pwRetryCount);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetErrorRetryCount (BYVAL pthis AS DWORD PTR, BYREF pwRetryCount AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[25] USING IScheduledWorkItem_GetErrorRetryCount(pthis, pwRetryCount) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetErrorRetryInterval method
' ********************************************************************************************
' The SetErrorRetryInterval method sets the time interval, in minutes, between Task Scheduler's
' attempts to run a work item after an error occurs. Not currently implemented.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetErrorRetryInterval )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ WORD wRetryInterval);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetErrorRetryInterval (BYVAL pthis AS DWORD PTR, BYVAL wRetryInterval AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[26] USING IScheduledWorkItem_SetErrorRetryInterval(pthis, wRetryInterval) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetErrorRetryInterval method
' ********************************************************************************************
' The GetErrorRetryInterval method retrieves the time interval, in minutes, between Task
' Scheduler's attempts to run a work item if an error occurs. Not currently implemented.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetErrorRetryInterval )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pwRetryInterval);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetErrorRetryInterval (BYVAL pthis AS DWORD PTR, BYREF pwRetryInterval AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[27] USING IScheduledWorkItem_GetErrorRetryInterval(pthis, pwRetryInterval) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetFlags method
' ********************************************************************************************
' The SetFlags method sets the flags that modify the behavior of any type of work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetFlags )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ DWORD dwFlags);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetFlags (BYVAL pthis AS DWORD PTR, BYVAL dwFlags AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[28] USING IScheduledWorkItem_SetFlags(pthis, dwFlags) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetFlags method
' ********************************************************************************************
' The GetFlags method returns the flags that modify the behavior of any type of work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetFlags )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ DWORD __RPC_FAR *pdwFlags);
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetFlags (BYVAL pthis AS DWORD PTR, BYREF pdwFlags AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[29] USING IScheduledWorkItem_GetFlags(pthis, pdwFlags) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetAccountInformation method
' ********************************************************************************************
' The SetAccountInformation method sets the account name and password used to run the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetAccountInformation )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [in] */ LPCWSTR pwszAccountName,
' /* [in] */ LPCWSTR pwszPassword);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_SetAccountInformation (BYVAL pthis AS DWORD PTR, BYVAL pwszAccountName AS DWORD, BYVAL pwszPassword AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_SetAccountInformation (BYVAL pthis AS DWORD PTR, BYVAL strAccountName AS STRING, BYVAL strPassword AS STRING) AS LONG
LOCAL HRESULT AS LONG
strAccountName = UCODE$(strAccountName)
IF strPassword = "" THEN
CALL DWORD @@pthis[30] USING Proto_IScheduledWorkItem_SetAccountInformation(pthis, STRPTR(strAccountName), %NULL) TO HRESULT
ELSE
strPassword = UCODE$(strPassword)
CALL DWORD @@pthis[30] USING Proto_IScheduledWorkItem_SetAccountInformation(pthis, STRPTR(strAccountName), STRPTR(strPassword)) TO HRESULT
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetAccountInformation method
' The GetAccountInformation method retrieves the account name for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetAccountInformation )(
' IScheduledWorkItem __RPC_FAR * This,
' /* [out] */ LPWSTR __RPC_FAR *ppwszAccountName);
' ********************************************************************************************
DECLARE FUNCTION Proto_IScheduledWorkItem_GetAccountInformation (BYVAL pthis AS DWORD PTR, BYREF ppwszAccountName AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION IScheduledWorkItem_GetAccountInformation (BYVAL pthis AS DWORD PTR, BYREF strAccountName AS STRING) AS LONG
LOCAL HRESULT AS LONG
LOCAL ppwszAccountName AS DWORD PTR
LOCAL bstrLen AS LONG
LOCAL buffer AS STRING
CALL DWORD @@pthis[31] USING Proto_IScheduledWorkItem_GetAccountInformation(pthis, ppwszAccountName) TO HRESULT
strAccountName = ""
IF ISTRUE ppwszAccountName THEN
bstrlen = lstrlenW(BYVAL ppwszAccountName)
IF ISTRUE bstrlen THEN
buffer = PEEK$(ppwszAccountName, bstrlen * 2)
strAccountName = ACODE$(buffer)
END IF
CoTaskMemFree ppwszAccountName
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' ITask interface
' ********************************************************************************************
' The ITask interface is used to run tasks and to set and retrieve task properties. It is
' derived from the IScheduledWorkItem interface and inherits all the methods of that interface.
' ITask is the primary interface of the task trigger object. To create a task object, call
' ITaskScheduler_Activate for existing tasks or ITaskScheduler_NewWorkItem for new tasks.
' ********************************************************************************************
' ********************************************************************************************
' CreateTrigger method
' ********************************************************************************************
' The CreateTrigger method creates a trigger for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateTrigger )(
' ITask __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *piNewTrigger,
' /* [out] */ ITaskTrigger __RPC_FAR *__RPC_FAR *ppTrigger);
' ********************************************************************************************
FUNCTION ITask_CreateTrigger (BYVAL pthis AS DWORD PTR, BYREF piNewTrigger AS WORD, BYREF ppTrigger AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[3] USING ITask_CreateTrigger(pthis, piNewTrigger, ppTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' DeleteTrigger method
' ********************************************************************************************
' The DeleteTrigger method deletes a trigger from a work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *DeleteTrigger )(
' ITask __RPC_FAR * This,
' /* [in] */ WORD iTrigger);
' ********************************************************************************************
FUNCTION ITask_DeleteTrigger (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[4] USING ITask_DeleteTrigger(pthis, iTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTriggerCount method
' ********************************************************************************************
' The GetTriggerCount method retrieves the number of triggers for the current work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTriggerCount )(
' ITask __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pwCount);
' ********************************************************************************************
FUNCTION ITask_GetTriggerCount (BYVAL pthis AS DWORD PTR, BYREF pwCount AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[5] USING ITask_GetTriggerCount(pthis, pwCount) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTrigger method
' ********************************************************************************************
' The GetTrigger method retrieves a task trigger.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTrigger )(
' ITask __RPC_FAR * This,
' /* [in] */ WORD iTrigger,
' /* [out] */ ITaskTrigger __RPC_FAR *__RPC_FAR *ppTrigger);
' ********************************************************************************************
FUNCTION ITask_GetTrigger (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD, BYREF ppTrigger AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[6] USING ITask_GetTrigger(pthis, iTrigger, ppTrigger) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetTriggerString method
' ********************************************************************************************
' The GetTriggerString method retrieves a string that describes the work item trigger.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTriggerString )(
' ITask __RPC_FAR * This,
' /* [in] */ WORD iTrigger,
' /* [out] */ LPWSTR __RPC_FAR *ppwszTrigger);
' ********************************************************************************************
DECLARE FUNCTION Proto_ITask_GetTriggerString (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD, BYREF ppwszTrigger AS DWORD) AS LONG
' ********************************************************************************************
FUNCTION ITask_GetTriggerString (BYVAL pthis AS DWORD PTR, BYVAL iTrigger AS WORD, BYREF strTrigger AS STRING) AS LONG
LOCAL HRESULT AS LONG
LOCAL ppwszTrigger AS DWORD PTR
LOCAL bstrLen AS LONG
LOCAL buffer AS STRING
CALL DWORD @@pthis[7] USING Proto_ITask_GetTriggerString(pthis, iTrigger, ppwszTrigger) TO HRESULT
strTrigger = ""
IF ISTRUE ppwszTrigger THEN
bstrlen = lstrlenW(BYVAL ppwszTrigger)
IF ISTRUE bstrlen THEN
buffer = PEEK$(ppwszTrigger, bstrlen * 2)
strTrigger = ACODE$(buffer)
END IF
CoTaskMemFree ppwszTrigger
END IF
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetRunTimes method
' ********************************************************************************************
' The GetRunTimes method retrieves the work item run times for a specified time period.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetRunTimes )(
' ITask __RPC_FAR * This,
' /* [in] */ const LPSYSTEMTIME pstBegin,
' /* [in] */ const LPSYSTEMTIME pstEnd,
' /* [out][in] */ WORD __RPC_FAR *pCount,
' /* [out] */ LPSYSTEMTIME __RPC_FAR *rgstTaskTimes);
' ********************************************************************************************
FUNCTION ITask_GetRunTimes (BYVAL pthis AS DWORD PTR, BYREF pstBegin AS SYSTEMTIME, BYREF pstEnd AS SYSTEMTIME, BYREF pCount AS WORD, BYREF rgstTaskTimes AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[8] USING ITask_GetRunTimes(pthis, pstBegin, pstEnd, pCount, rgstTaskTimes) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetNextRunTime method
' ********************************************************************************************
' The GetNextRunTime method retrieves the next time the work item will run.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetNextRunTime )(
' ITask __RPC_FAR * This,
' /* [out][in] */ SYSTEMTIME __RPC_FAR *pstNextRun);
' ********************************************************************************************
FUNCTION ITask_GetNextRunTime (BYVAL pthis AS DWORD PTR, BYREF pstNextRun AS SYSTEMTIME) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[9] USING ITask_GetNextRunTime(pthis, pstNextRun) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' SetIdleWait method
' ********************************************************************************************
' The SetIdleWait method sets the minutes that the system must be idle before the work item can run.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetIdleWait )(
' ITask __RPC_FAR * This,
' /* [in] */ WORD wIdleMinutes,
' /* [in] */ WORD wDeadlineMinutes);
' ********************************************************************************************
FUNCTION ITask_SetIdleWait (BYVAL pthis AS DWORD PTR, BYVAL wIdleMinutes AS WORD, BYVAL wDeadlineMinutes AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[10] USING ITask_SetIdleWait(pthis, wIdleMinutes, wDeadlineMinutes) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetIdleWait method
' ********************************************************************************************
' The GetIdleWait method retrieves the idle wait time for the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIdleWait )(
' ITask __RPC_FAR * This,
' /* [out] */ WORD __RPC_FAR *pwIdleMinutes,
' /* [out] */ WORD __RPC_FAR *pwDeadlineMinutes);
' ********************************************************************************************
FUNCTION ITask_GetIdleWait (BYVAL pthis AS DWORD PTR, BYREF wIdleMinutes AS WORD, BYREF wDeadlineMinutes AS WORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[11] USING ITask_GetIdleWait(pthis, wIdleMinutes, wDeadlineMinutes) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' Run method
' ********************************************************************************************
' The Run method sends a request to the Task Scheduler service to run the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Run )(
' ITask __RPC_FAR * This);
' ********************************************************************************************
FUNCTION ITask_Run (BYVAL pthis AS DWORD PTR) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[12] USING ITask_Run(pthis) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' Terminate method
' ********************************************************************************************
' The Terminate method ends the execution of the work item.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Terminate )(
' ITask __RPC_FAR * This);
' ********************************************************************************************
FUNCTION ITask_Terminate (BYVAL pthis AS DWORD PTR) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[13] USING ITask_Terminate(pthis) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' EditWorkItem method
' ********************************************************************************************
' The EditWorkItem method displays the Task, Schedule, and settings property pages for the
' work item, allowing a user set the properties on those pages.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *EditWorkItem )(
' ITask __RPC_FAR * This,
' /* [in] */ HWND hParent,
' /* [in] */ DWORD dwReserved);
' ********************************************************************************************
FUNCTION ITask_EditWorkItem (BYVAL pthis AS DWORD PTR, BYVAL hParent AS DWORD, BYVAL dwReserved AS DWORD) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[14] USING ITask_EditWorkItem(pthis, hParent, dwReserved) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************
' ********************************************************************************************
' GetMostRecentRunTime method
' ********************************************************************************************
' The GetMostRecentRunTime method retrieves the most recent time the work item began running.
' ********************************************************************************************
' HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetMostRecentRunTime )(
' ITask __RPC_FAR * This,
' /* [out] */ SYSTEMTIME __RPC_FAR *pstLastRun);
' ********************************************************************************************
FUNCTION ITask_GetMostRecentRunTime (BYVAL pthis AS DWORD PTR, BYREF pstLastRun AS SYSTEMTIME) AS LONG
LOCAL HRESULT AS LONG
CALL DWORD @@pthis[15] USING ITask_GetMostRecentRunTime(pthis, pstLastRun) TO HRESULT
FUNCTION = HRESULT
END FUNCTION
' ********************************************************************************************