Наши преимущества

Scheduled task wizard and Task properties

alexpotemkin

Турист
Credits
10
Задал вопрос на винграде пока толком помощи не получил.
Запостил проект на вэблансере, результат тоже нулевой, народ брался, но в итоге задачу не осиливал.

Нужно реализовать:
- вывод списка заданий в TListBox
- вызов диалога Scheduled Task Wizard (Мастер планирования заданий) в XP и Create Task в Vista (7even)
- вызов диалога свойств задания для выбранного задания в TListBox

Требования к реализации:
- красоты gui не требуются
- реализация в Delphi 7 и старше, лучше всего в BDS 2006
- не использовать сторонние юниты, возможно только jedi api, если понадобится
- работоспособность в сиcтемах Win2000, XP, Vista, 7
 
Задал вопрос на винграде пока толком помощи не получил.
Для начала определитесь, какого ответа Вы ждете здесь:
1) рекомендацию ознакомиться с доками по Windows Task Scheduler API и функциями NetScheduleJobEnum и NetScheduleJobAdd (Как увидеть ссылки? | How to see hidden links?) в частности
2) вопроса о сумме вопроса

Удачи!
 
Стартовая сумма вопроса была определена мной на weblancer.net в размере 50вмз.
С доками ознакомился, но не осилю реализацию с теми требованиями что поставил.
 
Нашел в закромах код, авторство Rouse_ Не тестил, не было времени.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

  AT_INFO = record
    JobTime: DWORD;
    DaysOfMonth: DWORD;
    DaysOfWeek: UCHAR;
    Flags: UCHAR;
   Command: LPWSTR;
  end;

  AT_ENUM = record
    JobId: DWORD;
    JobTime: DWORD;
    DaysOfMonth: DWORD;
    DaysOfWeek: UCHAR;
    Flags: UCHAR;
    Command: LPWSTR;
  end;
  PAT_ENUM = ^AT_ENUM;

  function NetScheduleJobAdd(Servername: PWideChar;
    Buffer: Pointer; var JobId: Cardinal): Cardinal;
    stdcall; external 'netapi32.dll';

  function NetScheduleJobEnum(Servername: PWideChar;
    Buffer: Pointer; BufLength: Cardinal; EntriesRead,
    TotalEntries: PCardinal; var Resumehandle: Cardinal): Cardinal;
    stdcall; external 'netapi32.dll';

  function NetApiBufferFree(Buffer: Pointer): Cardinal;
    stdcall; external 'netapi32.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  ai: AT_INFO;
  JobID, Err: Cardinal;
begin
  ai.JobTime := 50400000;
  ai.DaysOfMonth := 0;
  ai.DaysOfWeek := 0;
  ai.Flags := 0;
  ai.Command := 'C:\file.exe';
  Err := NetScheduleJobAdd(nil, @ai ,JobID);
  if Err <> NO_ERROR then ShowMessage(SysErrorMessage(Err));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Buffer, Tmp: PAT_ENUM;
  BufLength: Cardinal;
  EntriesRead, TotalEntries, Resumehandle, Err: Cardinal;
  I: Integer;
begin
  Resumehandle := 0;
  Err := NetScheduleJobEnum(nil, @Buffer, DWORD(-1),
    @EntriesRead, @TotalEntries, Resumehandle);
  if Err = NO_ERROR then
  try
    Tmp := Buffer;
    for I := 0 to EntriesRead - 1 do
    begin
      Memo1.Lines.Add(Tmp^.Command);
      Tmp := Pointer(Integer(Tmp) + SizeOf(AT_ENUM));
    end;
  finally
    NetApiBufferFree(Buffer);
  end
  else
    ShowMessage(SysErrorMessage(Err));
end;

end.
 
- вызов диалога Scheduled Task Wizard (Мастер планирования заданий) в XP и Create Task в Vista (7even)
- вызов диалога свойств задания для выбранного задания в TListBox
ХМ, занятный вопросец, честно не знаю как, но лично я бы делал аналогичную форму в Delphi (добавление/редактирование/удаление) а если лень разбираться с WinAPI то можно набросать класс взаимодействующий с консольной Schtasks ИМХО для меня ленивого так было бы проще :)
Как увидеть ссылки? | How to see hidden links?
 
Верх