So ich hab das ganze mal ausprobiert aber es will noch nicht so ganz klappen.
Ich hatte hier im forum einen
Beitrag entdeckt mit dessen hilfe
ich versucht habe einen bestehenden Task zu ändern.
Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
var
dtNextRun : TDateTime;
bThisWeek : Boolean;
dtInfoMsg : TDateTime;
TaskScheduler : TJclTaskSchedule;
bFound : Boolean;
TaskIdx : Integer;
piNewTrigger : Word;
ppTrigger : ITaskTrigger;
pTrigger : _TASK_TRIGGER;
myYear : Word;
myMonth : Word;
myDay : Word;
myTriggerTypeUnion : TRIGGER_TYPE_UNION;
myWeekly : TWeekly;
begin
//init
bThisWeek := False;
//Prüfen ob Datum vor oder nach Freitag liegt
if DayOfTheWeek(Now) < DayFriday then bThisWeek := True;
//Datum ermitteln an dem Backup durchgeführt werden soll
if bThisWeek then
dtNextRun := Now + (DayFriday - DayOfTheWeek(Now))
else
dtNextRun := Now + (DayFriday - DayOfTheWeek(Now)) + 7;
//Prüfen ob die Nächste Ausführung statt finden kann (Feiertag)
while fIsHoliday(dtNextRun, NW) do begin
dtNextRun := dtNextRun - 1;
end;{while}
//ShowMessage('Nächste Ausführung am: '+FormatDateTime('ddd dd.mm.yyyy', dtNextRun));
//Tag ermitteln an dem die Benachrichtigung (NAS einschalten) angezeigt werden muß
dtInfoMsg := dtNextRun - 1;
//Auf Feiertag prüfen
while fIsHoliday(dtInfoMsg, NW) do begin
dtInfoMsg := dtInfoMsg - 1;
end;{while}
//ShowMessage('Nachricht: '+FormatDateTime('ddd dd.mm.yyyy', dtInfoMsg));
TaskScheduler := TJclTaskSchedule.Create;
TaskScheduler.Refresh;
//Task suchen...
TaskIdx := 0;
bFound := False;
while (TaskIdx < TaskScheduler.TaskCount) and not bFound do begin
if TaskScheduler.Tasks[TaskIdx].TaskName = 'msg.job' then bFound := True else Inc(TaskIdx);
end;{while}
//Benachrichtigungs Task 'planen'
if bFound then begin
with TaskScheduler.Tasks[TaskIdx] do begin
ScheduledWorkItem.GetTrigger(piNewTrigger, ppTrigger);
DecodeDate(Now, myYear, myMonth, myDay);
ZeroMemory(@pTrigger, SizeOf(TASK_TRIGGER));
pTrigger.cbTriggerSize := SizeOf(TASK_TRIGGER);
pTrigger.Reserved1 := 0;
pTrigger.wBeginYear := myYear;
pTrigger.wBeginMonth := myMonth;
pTrigger.wBeginDay := myDay;
pTrigger.wEndYear := 0;
pTrigger.wEndMonth := 0;
pTrigger.wEndDay := 0;
pTrigger.wStartHour := 15;
pTrigger.wStartMinute := 45;
pTrigger.MinutesDuration := 0;
pTrigger.MinutesInterval := 0;
pTrigger.rgFlags := 0;
pTrigger.TriggerType := TASK_TIME_TRIGGER_WEEKLY;
MyWeekly.WeeksInterval := 1;
MyWeekly.rgfDaysOfTheWeek := DayOfWeek(dtInfoMsg);
MyTriggerTypeUnion.Weekly := MyWeekly;
pTrigger.Type_ := MyTriggerTypeUnion;
pTrigger.Reserved2 := 0;
pTrigger.wRandomMinutesInterval := 0;
ppTrigger.SetTrigger(pTrigger); //An dieser Stelle gibts eine Zugriffsverletztung...
Save;
end;{with}
end;{if}
TaskScheduler.Free;
end;
Ich denke es liegt noch an der Stelle wo ich versuche den "Task" bzw. den Trigger zu laden um ihn anschließend zu modifizieren.