Вот пример работы с NetScheduleJobEnum:
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.