Delphi 接口至 Windows 任务计划程序 2.0 自 Windows Vista 起,实施了一个新版本的任务计划程序。除了前一版本的功能外,还提供了一些新的选项,例如错过预定启动时间后运行任务或使用无密码的用户账户。Windows API 提供了多个新函数,以便将任务计划程序与用户程序集成。 为了使 Delphi 开发者更容易实现这一点,我开发了几个单元,将 Windows 任务计划程序 2.0 的功能封装进 Delphi 对象中。为了展示这些对象如何集成到自己的代码中,包内包含了一个示例程序(2020 年 8 月新增)。
注意:此实现并不完整。但是,创建和编辑用户应用程序的时间表所需的所有功能都是可用的。
单元 TaskSchedApi.pas - Delphi 接口至 Windows 任务计划程序 2.0 (taskschd.dll) 单元 WinTask.pas - 用于在自己的程序中使用 Windows 任务计划程序 2.0 的 Delphi 对象 单元 WinTaskConsts.pas - WinTask.pas 的语言资源(英语和德语) 程序 TaskSchedTest.dpr - 示例程序(新版增强版) 下载: 版本 2.3(2023 年 1 月)
源代码和演示程序 (1.23 MB) 在 GitHub 上下载
Delphi接口(Delphi interface)到Windows Task Scheduler 2.0 是指使用Delphi编程语言,通过特定的接口(API)与Windows操作系统的任务计划程序(Task Scheduler)进行交互。Windows Task Scheduler 2.0是Windows Vista及更高版本中的一个系统组件,它允许用户和程序安排定期执行的任务。
1.Windows Task Scheduler 2.0Task Scheduler 2.0是Windows操作系统的一部分,用于管理和安排任务自动执行。它支持更细粒度的调度选项,并且相较于旧版(Task Scheduler 1.0),它提供了更多的功能,比如:
更加灵活的任务触发机制(基于事件、系统空闲、时间间隔等)对任务的更细致控制(如任务的运行权限、条件、以及是否在电池模式下运行等)更加安全和细化的用户权限管理更好的事件日志和错误处理功能2.Delphi接口到Task Scheduler 2.0为了让Delphi程序能够与Task Scheduler 2.0进行交互,通常需要通过访问Windows的COM接口。这些接口提供了与Task Scheduler进行通信的功能。例如,你可以通过调用Windows提供的ITaskService、ITaskDefinition等接口来创建、修改或删除计划任务。
主要接口:ITaskService:是与任务调度程序的连接接口,可以用来访问调度程序的功能。ITaskFolder:用于管理任务文件夹(任务以文件夹形式组织)。ITaskDefinition:代表一个任务的定义,它包含任务的属性、触发条件、操作、设置等。IRegisteredTask:表示已经注册的任务,可以对其进行管理。通过这些接口,Delphi程序可以执行以下操作:
创建和删除计划任务设置任务触发条件和执行操作获取和修改任务的属性查询任务的状态等3.为什么需要Delphi接口访问Task Scheduler 2.0使用Delphi与Windows Task Scheduler 2.0接口可以在多个场景中发挥作用,主要优势包括:
自动化任务管理:在需要自动执行定时任务(如备份、报告生成、定期检查等)的应用中,可以直接通过Delphi代码来管理这些任务,而不需要用户手动干预。更高的灵活性:Delphi程序可以根据特定条件创建和管理任务,极大提高了任务的调度灵活性和自动化程度。系统管理和运维:对于开发系统管理工具或需要与操作系统底层交互的程序,Task Scheduler接口是非常有用的。4.如何使用Delphi访问Task Scheduler 2.0要在Delphi中使用Task Scheduler 2.0接口,你需要使用Windows的COM接口。以下是一些简单的步骤:
添加必要的库:首先,你需要确保你的Delphi项目中可以访问Windows COM库。可以通过OleVariant或ComObj等库来实现。创建Task Scheduler服务:delphiCopy Codeuses ComObj, ActiveX; var TaskService: OLEVariant; begin CoInitialize(nil); // 初始化COM库 try TaskService := CreateOleObject('Schedule.Service'); TaskService.Connect('localhost', '', '', ''); // 连接到本地Task Scheduler服务 finally CoUninitialize; // 释放COM库 end; end;创建任务:通过ITaskService接口来创建一个任务定义并设置任务的触发条件和执行操作:delphiCopy Codevar TaskDefinition: OLEVariant; TaskTrigger: OLEVariant; TaskAction: OLEVariant; begin TaskDefinition := TaskService.NewTask(0); TaskTrigger := TaskDefinition.Triggers.Create(1); // 1表示基于时间的触发器 TaskTrigger.StartBoundary := '2024-11-06T08:00:00'; // 设置开始时间 TaskAction := TaskDefinition.Actions.Create(0); // 0表示启动程序 TaskAction.Path := 'C:\Path\To\YourProgram.exe'; // 设置执行的程序路径 TaskService.RootFolder.RegisterTaskDefinition('My Task', TaskDefinition, 6, '', '', 3, nil); end;执行任务:一旦任务定义并注册成功,你可以通过相同的接口来启动或停止任务,或查询任务的状态。Delphi接口到Windows Task Scheduler 2.0可以为开发者提供强大的任务调度和自动化功能。通过COM接口,Delphi程序可以非常灵活地与Task Scheduler交互,实现任务的创建、修改、删除、运行等操作。这在系统自动化管理、定时任务、批处理操作等场景中非常有用。
然而,要使用这些接口,你需要熟悉COM编程,并了解Windows Task Scheduler的API文档和接口设计。