Scheduled task wizard and Task properties

alexpotemkin

Турист
Регистрация
26 Ноя 2008
Сообщения
3
Реакции
0
Credits
4
Задал вопрос на винграде пока толком помощи не получил.
Запостил проект на вэблансере, результат тоже нулевой, народ брался, но в итоге задачу не осиливал.

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

Требования к реализации:
- красоты gui не требуются
- реализация в Delphi 7 и старше, лучше всего в BDS 2006
- не использовать сторонние юниты, возможно только jedi api, если понадобится
- работоспособность в сиcтемах Win2000, XP, Vista, 7
 

ASGDeveloper

Местный
Регистрация
3 Июн 2008
Сообщения
42
Реакции
34
Credits
78
Задал вопрос на винграде пока толком помощи не получил.
Для начала определитесь, какого ответа Вы ждете здесь:
1) рекомендацию ознакомиться с доками по Windows Task Scheduler API и функциями NetScheduleJobEnum и NetScheduleJobAdd (Для просмотра ссылки Войди или Зарегистрируйся) в частности
2) вопроса о сумме вопроса

Удачи!
 

alexpotemkin

Турист
Регистрация
26 Ноя 2008
Сообщения
3
Реакции
0
Credits
4
Стартовая сумма вопроса была определена мной на weblancer.net в размере 50вмз.
С доками ознакомился, но не осилю реализацию с теми требованиями что поставил.
 

asm64d

Местный
Регистрация
14 Июн 2008
Сообщения
940
Реакции
9,672
Credits
0
Нашел в закромах код, авторство 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.
 

asm64d

Местный
Регистрация
14 Июн 2008
Сообщения
940
Реакции
9,672
Credits
0
- вызов диалога Scheduled Task Wizard (Мастер планирования заданий) в XP и Create Task в Vista (7even)
- вызов диалога свойств задания для выбранного задания в TListBox
ХМ, занятный вопросец, честно не знаю как, но лично я бы делал аналогичную форму в Delphi (добавление/редактирование/удаление) а если лень разбираться с WinAPI то можно набросать класс взаимодействующий с консольной Schtasks ИМХО для меня ленивого так было бы проще :)
Для просмотра ссылки Войди или Зарегистрируйся