#task #scheduled #builder-pattern #windows #winapi #events

planif

planif 是 windows-rs 的 Windows 任务计划程序 API 的构建器模式包装器

8 个版本 (1 个稳定版)

1.0.0 2023年11月17日
0.2.2 2023年6月16日
0.2.1 2022年10月22日
0.1.1 2022年8月4日
0.0.0-alpha2022年4月20日

Windows API 中排名 #43

MIT 协议

97KB
1K SLoC

planif 是围绕 windows-rs 的 Windows 任务计划程序 API 的构建器模式包装器 (windows-rs).

功能

planif 包提供对 Win32 任务计划程序 API 的易于使用的构建器。

构建器支持以下触发器类型

  • 启动
  • 每日
  • 事件
  • 空闲
  • 登录
  • 每月DOW
  • 每月
  • 注册
  • 时间
  • 每周

使用情况

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
planif = "0.2"

示例

use chrono::prelude::*;
use planif::enums::TaskCreationFlags;
use planif::schedule_builder::{Action, ScheduleBuilder};
use planif::schedule::TaskScheduler;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let ts = TaskScheduler::new()?;
    let com = ts.get_com();
    let sb = ScheduleBuilder::new(&com).unwrap();

    sb.create_daily()
        .author("Matt")?
        .description("Test Trigger")?
        .trigger("test_trigger", true)?
        .days_interval(1)?
        .action(Action::new("test", "notepad.exe", "", ""))?
        .start_boundary(&Local::now().to_rfc3339())?
        .build()?
        .register("TaskName", TaskCreationFlags::CreateOrUpdate as i32)?;

    Ok(())
}

有关更多示例,请参阅 planif/examples 文件夹。文件夹包含创建每个触发器的代码。

触发器设置

所有设置均适用于任务。

文档包含来自 Microsoft 任务计划程序文档 的所有相关信息。

运行示例

在克隆仓库后,可以使用以下方式运行示例

cargo run --example <name> 运行特定示例或,cargo run --examples 运行所有示例。

变更日志

请参阅 变更日志文件

升级指南 (0.* 到 1.0)

ComRuntime

创建

ComRuntime 现由 TaskScheduler 处理,应使用以下方法创建

    let ts = TaskScheduler::new()?;
    let com = ts.get_com();
    let sb = ScheduleBuilder::new(&com).unwrap();
    // ... snip

未初始化

ScheduleBuilder不再需要手动进行初始化。在1.0版本之前,ScheduleBuilding::uninitalize()会调用CoUninitialize,这会有效地关闭COM。如果你创建了多个构建器或调度,这可能会成问题,因为n+1个COM会简单地重用初始COM。

在1.0版本中引入的更改现在会在TaskScheduler中私藏一个Rc<Com>。现在当所有引用都释放后,COM的初始化将自动处理。

依赖项

~128MB
~2M SLoC