delphi中自定义自己的定时器

2024-01-08 15:33:21

最近用上了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.

文章来源:https://blog.csdn.net/lxy6904/article/details/135386066
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。