怎么通过代码来添加计划任务?

解决方案 »

  1.   

    难道你没有用过windows?计划任务都不知道?
      

  2.   

    有api可以用
    type 
      TAT_INFO = record
        JobTime: DWord;
        DaysOfMonth: DWord;
        DaysOfWeek: UCHAR;
        Flags: UCHAR;
        Command: PWideChar;
      end;  PAT_INFO = ^TAT_INFO;
      NET_API_STATUS = LongInt;
    function NetScheduleJobAdd(ServerName: PWideChar; Buffer: PAT_INFO; var JobID: LongInt): NET_API_STATUS; external 'netapi32.dll' name 'NetScheduleJobAdd';
    ParametersServernamePointer to a Unicode string containing the name of the remote server on which the function is to execute. A NULL pointer or string specifies the local computer.BufferPointer to a buffer containing an AT_INFO structure describing the job to be submitted.JobIdPointer to a job identifier for a newly submitted job. This entry is valid only if the function returns successfully.AT_INFO:
    MembersJobTimeTime of day at which a job is scheduled to run. Time is a local time at a computer on which the Schedule service is running. Time is measured from midnight and is expressed in milliseconds.DaysOfMonthBitmask for the days of the month on which a job is scheduled to run. The bitmask is NULL if a job was scheduled to run only once at the first occurrence of JobTime. For each bit that is set in the bitmask a job will run at JobTime on a corresponding day of the month. Bit 0 corresponds to the first day of the month, and so on.DaysOfWeekBitmask for the days of the week on which the job is scheduled to run. The bitmask is NULL if a job was scheduled to run only once at the first occurrence of JobTime. For each bit that is set in the bitmask a job will run at JobTime on a corresponding day of the week. Bit 0 corresponds to Monday (first day of the week), and so on.FlagsBitmask describing job properties. For job submission (NetScheduleJobAdd), the possible values are:JOB_RUN_PERIODICALLYIf this flag bit is set, the job runs on every day for which corresponding bits in DaysOfMonth or DaysOfWeek are set. If this flag bit is clear, then job runs only once for each bit that was set in DaysOfMonth or DaysOfWeek at the time of job submission.JOB_ADD_CURRENT_DATEWhen this flag bit is set, the job will also execute at the first occurrence of JobTime at the computer to which the job is submitted. In other words, setting this flag bit is equivalent to setting the corresponding day bit in the DaysOfMonth bitmask.For job information retrieval (NetScheduleJobEnum and NetScheduleJobGetInfo), possible values are:JOB_RUN_PERIODICALLYThis flag bit is equal to the original value of this flag bit when a job was submitted.JOB_EXEC_ERRORThis flag bit is set whenever Schedule service failed to successfully execute this job the last time it was supposed to run.JOB_RUNS_TODAYThis flag bit is set if JobId is larger than the current time of day at the computer at which this job is queued.CommandPointer to a Unicode string that contains the name of the command, batch program, or binary file to execute.
      

  3.   

    这是以前hubdog调试通过的一段程序
    借花献佛了unit insjob;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TAT_INFO = record
        JobTime: DWord;
        DaysOfMonth: DWord;
        DaysOfWeek: UCHAR;
        Flags: UCHAR;
        Command: PWideChar;
      end;  PAT_INFO = ^TAT_INFO;
      NET_API_STATUS = LongInt;  TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;function NetScheduleJobAdd(ServerName: PWideChar; Buffer: PAT_INFO; var JobID: PDWord): NET_API_STATUS;stdcall;var
      Form1: TForm1;implementation
    {$R *.DFM}
    function NetScheduleJobAdd; external 'netapi32.dll' name 'NetScheduleJobAdd';procedure TForm1.Button1Click(Sender: TObject);
    var
      ATInfo:PAT_Info;
      jobid:PDword;
    begin
      getmem(atinfo,sizeof(TAt_info));
      getmem(jobid,sizeof(dword));
      atinfo^.jobtime:=3*60*60*1000+15*60*1000;//miliseconds from midnight to 3:15
      atinfo^.DaysOfMonth:=4294967295;
      atinfo^.DaysOfWeek:=255;
      atinfo^.command:='c:\showok.exe';
      atinfo^.flags:=8;
      if NetScheduleJobAdd(nil,atinfo,jobid)<>2 then
        showmessage('ok');
      freemem(jobid);
      freemem(atinfo);
    end;end.
      

  4.   

    另外
    我刚刚从www.delphi-jedi.com上回来
    上面已经TaskSchedule解释到了pas单元中
    你可以去下载
    然后就可以直接用像NetScheduleJobAdd等操作计划任务的API函数了
      

  5.   

    ftp://delphi-jedi.org/api/TaskScheduler.zip
      

  6.   

    呵呵
    是我搞错我
    www.delphi-jedi.org