use windows::core::BSTR;
use windows::Win32::System::TaskScheduler::{
IActionCollection, IRegistrationInfo, ITaskDefinition, ITaskFolder, ITaskService,
ITaskSettings, ITrigger, ITriggerCollection, TASK_LOGON_INTERACTIVE_TOKEN,
};
use windows::Win32::System::Com::VARIANT;
use crate::com::ComRuntime;
#[derive(Debug, PartialEq)]
pub struct Schedule {
pub(crate) task_folder: ITaskFolder,
pub(crate) actions: IActionCollection,
pub(crate) force_start_boundary: bool,
pub(crate) registration_info: IRegistrationInfo,
pub(crate) settings: ITaskSettings,
pub(crate) task_definition: ITaskDefinition,
pub(crate) task_service: ITaskService,
pub(crate) trigger: Option<ITrigger>,
pub(crate) triggers: ITriggerCollection,
}
impl Schedule {
pub fn register(self, task_name: &str, flags: i32) -> Result<(), Box<dyn std::error::Error>> {
unsafe {
self.task_folder.RegisterTaskDefinition(
&BSTR::from(task_name),
&self.task_definition,
flags,
VARIANT::default(),
VARIANT::default(),
TASK_LOGON_INTERACTIVE_TOKEN,
VARIANT::default(),
)?;
}
Ok(())
}
}
pub struct TaskScheduler {
com: ComRuntime
}
impl TaskScheduler {
pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
Ok(Self {
com: ComRuntime::new()?
})
}
pub fn get_com(&self) -> ComRuntime {
self.com.clone()
}
}