unit Unit1;interfaceuses 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.