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.