Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Taskplaner: job/task bearbeiten

  Alt 28. Apr 2009, 10:10
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.jobthen 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.
  Mit Zitat antworten Zitat