Bei mir läuft TTaskScheduler gut. Hänge die Version die bei mir unter Delphi 5 tut dazu.
Das ganze läuft auch remote super um auf einen anderen Netzpc Tasks zu Schedulen (bsp. \\MyClientPC). Damit time ich ca. 50 TV-Aufnahmen pro Woche auf meinem PC-VCR mit Hauppauge-Karte und check auch auf etwaige Zeitüberschneidungen.
Delphi-Quellcode:
constructor TTaskScheduler.Create;
...
// Changed by Bernd Linthe to connect to a different computers scheduler
if FAgent.SetTargetComputer(StrToWide('\\' + Account)) <> S_OK then
if FAgent.SetTargetComputer(StrToWide('\\' + GetLocalComputerName)) <> S_OK then
showmessage('WHOOPS! Computername fehlt!');
...
Das Einzige Problem das ich mit TTaskScheduler habe ist, dass die Flags TASK_FLAG_RESTART_ON_IDLE_RESUME = ($800) und TASK_FLAG_SYSTEM_REQUIRED = ($1000) nicht gesetzt werden. Habe dazu folgendes in TaskSched.pas geändert, tut aber nicht. Das Häkchen "Computer zum Ausführen des Tasks reaktivieren" muss ich noch MTV (=mit te vingers) setzen und das nervt ein wenig:
Delphi-Quellcode:
// Additional by Bernd Linthe
function TTaskSchedulerTask.GetRestartOnIdleResume : Boolean;
var
Flags : DWORD;
begin
GetITask.GetTaskFlags(Flags);
Result := (Flags and TASK_FLAG_RESTART_ON_IDLE_RESUME) = 0;
end;
//Additional by Bernd Linthe
procedure TTaskSchedulerTask.SetRestartOnIdleResume(Value : Boolean);
var
Flags : DWORD;
iiTask : ITask;
begin
iiTask := GetITask;
iiTask.GetTaskFlags(Flags);
if not Value then
Flags := Flags or TASK_FLAG_RESTART_ON_IDLE_RESUME
else
Flags := Flags and (not TASK_FLAG_RESTART_ON_IDLE_RESUME);
iiTask.SetTaskFlags(Flags);
Tasks.ISave(iiTask);
end;
// Additional by Bernd Linthe
function TTaskSchedulerTask.GetSystemRequired : Boolean;
var
Flags : DWORD;
begin
GetITask.GetTaskFlags(Flags);
Result := (Flags and TASK_FLAG_SYSTEM_REQUIRED) = 0;
end;
//Additional by Bernd Linthe
procedure TTaskSchedulerTask.SetSystemRequired(Value : Boolean);
var
Flags : DWORD;
iiTask : ITask;
begin
iiTask := GetITask;
iiTask.GetTaskFlags(Flags);
if not Value then
Flags := Flags or TASK_FLAG_SYSTEM_REQUIRED
else
Flags := Flags and (not TASK_FLAG_SYSTEM_REQUIRED);
iiTask.SetTaskFlags(Flags);
Tasks.ISave(iiTask);
end;
Vielleicht hat da noch jemand nen Tipp.
Have fun with it - Xanadu