Yes, the needed interface definitions are not included with PB.
Code: Select all
; IEnumWorkItems interface definition
;
Interface IEnumWorkItems Extends IUnknown
Next(a.l, b.l, c.l)
Skip(a.l)
Reset()
Clone(a.l)
EndInterface
; ITaskScheduler interface definition
;
Interface ITaskScheduler Extends IUnknown
SetTargetComputer(a.l)
GetTargetComputer(a.l)
Enum(a.l)
Activate(a.l, b.l, c.l)
Delete(a.l)
NewWorkItem(a.l, b.l, c.l, d.l)
AddWorkItem(a.l, b.l)
IsOfType(a.l, b.l)
EndInterface
; ITask interface definition
;
Interface ITask Extends IUnknown
CreateTrigger(a.l, b.l)
DeleteTrigger(a.l)
GetTriggerCount(a.l)
GetTrigger(a.l, b.l)
GetTriggerString(a.l, b.l)
GetRunTimes(a.l, b.l, c.l, d.l)
GetNextRunTime(a.l)
SetIdleWait(a.l, b.l)
GetIdleWait(a.l, b.l)
Run()
Terminate()
EditWorkItem(a.l, b.l)
GetMostRecentRunTime(a.l)
GetStatus(a.l)
GetExitCode(a.l)
SetComment(a.l)
GetComment(a.l)
SetCreator(a.l)
GetCreator(a.l)
SetWorkItemData(a.l, b.l)
GetWorkItemData(a.l, b.l)
SetErrorRetryCount(a.l)
GetErrorRetryCount(a.l)
SetErrorRetryInterval(a.l)
GetErrorRetryInterval(a.l)
SetFlags(a.l)
GetFlags(a.l)
SetAccountInformation(a.l, b.l)
GetAccountInformation(a.l)
SetApplicationName(a.l)
GetApplicationName(a.l)
SetParameters(a.l)
GetParameters(a.l)
SetWorkingDirectory(a.l)
GetWorkingDirectory(a.l)
SetPriority(a.l)
GetPriority(a.l)
SetTaskFlags(a.l)
GetTaskFlags(a.l)
SetMaxRunTime(a.l)
GetMaxRunTime(a.l)
EndInterface
CoInitialize_(0)
If CoCreateInstance_(?CLSID_CTaskScheduler, 0, 1, ?IID_ITaskScheduler, @TaskScheduler.ITaskScheduler) = #S_OK
If TaskScheduler\Enum(@EnumTasks.IEnumWorkItems) = #S_OK
While EnumTasks\Next(1, @*lpName.LONG, 0) = #S_OK
length = WideCharToMultiByte_(#CP_ACP, 0, *lpName\l, -1, 0, 0, 0, 0)
Filename$ = Space(length)
WideCharToMultiByte_(#CP_ACP, 0, *lpName\l, -1, @Filename$, length, 0, 0)
;==========================================
; Here you have the filename of a .job file
;==========================================
;
Debug Filename$
If TaskScheduler\Activate(*lpName\l, ?IID_ITask, @Task.ITask) = #S_OK
If Task\GetApplicationName(@AppName) = #S_OK
length = WideCharToMultiByte_(#CP_ACP, 0, AppName, -1, 0, 0, 0, 0)
AppName$ = Space(length)
WideCharToMultiByte_(#CP_ACP, 0, AppName, -1, @AppName$, length, 0, 0)
;==================================
; Here you have the target filename
; =================================
;
Debug "Target: "+AppName$
CoTaskMemFree_(AppName)
EndIf
Task\Release()
EndIf
CoTaskMemFree_(*lpName\l)
CoTaskMemFree_(*lpName)
Wend
EnumTasks\Release()
EndIf
TaskScheduler\Release()
EndIf
CoUninitialize_()
DataSection
IID_ITaskScheduler: ; {148BD527-A2AB-11CE-B11F-00AA00530503}
Data.l $148BD527
Data.w $A2AB, $11CE
Data.b $B1, $1F, $00, $AA, $00, $53, $05, $03
CLSID_CTaskScheduler: ; {148BD52A-A2AB-11CE-B11F-00AA00530503}
Data.l $148BD52A
Data.w $A2AB, $11CE
Data.b $B1, $1F, $00, $AA, $00, $53, $05, $03
IID_ITask: ; {148BD524-A2AB-11CE-B11F-00AA00530503}
Data.l $148BD524
Data.w $A2AB, $11CE
Data.b $B1, $1F, $00, $AA, $00, $53, $05, $03
EndDataSection
Extended the code to also display the target filename.