最近用上了rpt工具,但是用rpt自带的工具执行起一些定时任务不方便,有些功能不能自主,于是我在delphi中用定时器制作了自己的定时执行程序。
1、首先在窗体中放一个timer对象
2、在窗体的formcreate事件中加入以下关键代码,让定时器按自己规定的时间节奏开始运行起来
// 这段代码是一个窗体创建时的事件处理程序,用于设置定时器的间隔并启用定时器
procedure TForm3.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1000 * 60; // 设置定时器的间隔为 10 分钟(1000 毫秒 * 60 秒)
Timer1.Enabled := True; // 启用定时器
end;
这段代码在窗体创建时,将定时器的间隔设置为 10 分钟(以毫秒为单位),然后启用定时器,以便触发相应的定时事件
3定时器触发代码
// 这段代码是一个定时器的事件处理程序,用于根据当前时间执行不同的操作
procedure TForm3.Timer1Timer(Sender: TObject);
var
CurrentHour: Word; // 当前小时
CurrentMinute: Word; // 当前分钟
CurrentSecond: Word; // 当前秒数
CurrentMiliSec: Word; // 当前毫秒
begin
DecodeTime(Now, CurrentHour, CurrentMinute, CurrentSecond, CurrentMiliSec); // 获取当前的小时、分钟、秒和毫秒
if CurrentMinute = 10 then // 如果当前分钟为 10,则执行以下操作(每个小时的第十分钟执行)
if (CurrentHour = 11) or (CurrentHour = 16) or (CurrentHour = 1) then // 如果当前小时为 11、16 或者 1
ExecBat; // 执行批处理程序
if (CurrentHour >= 8) and (CurrentHour < 18) then // 如果当前小时大于等于 8 并且小于 18
begin
if CurrentMinute = 0 then // 如果当前分钟为 0,则执行以下操作(每个小时的第一分钟执行)
if CurrentHour mod 4 = 0 then // 如果当前小时能被 4 整除(判断是否为偶数小时)
downallDingDing // 执行 downallDingDing 操作
else if CurrentHour mod 2 = 0 then // 如果当前小时能被 2 整除(判断是否为偶数小时)
downSimpleDingDing; // 执行 downSimpleDingDing 操作
end
else if (CurrentHour = 0) and (CurrentMinute = 0) then // 如果当前小时和分钟均为 0(深夜 12 点执行)
dosomething; // 执行 dosomething 操作
end;
这段代码首先获取当前的小时、分钟、秒和毫秒,然后根据不同的时间条件执行相应的操作。具体包括在每个小时的第十分钟执行 ExecBat
,在每个小时的第一分钟根据当前小时的奇偶性执行 downallDingDing
或者 downSimpleDingDing
,以及在深夜 12 点执行 dosomething
。
4、当然可能会调用一些windows的批处理及其他可执行文件,其调用如下
procedure TForm3.ExecBat;
var
BatchFile: string;
begin
// 指定批处理文件的路径
BatchFile := 'C:\Users\17993\AppData\Local\Programs\UiPath\Studio\#kis.bat';
// 使用ShellExecute执行批处理文件
if ShellExecute(0, 'open', PChar(BatchFile), nil, nil, SW_SHOWNORMAL) <= 32 then
ShowMessage('无法执行批处理文件');
Label2.caption := '已导入kis金碟凭证,最后导入时间【kis金碟凭证】是' +
DateTimeToStr(Now());
end;
这段代码演示如何执行bat处理,当然引用单元中要加入shellapi.