Skip to main content

winsafe\taskschd\com_interfaces/
itaskservice.rs

1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::decl::*;
4use crate::macros::*;
5use crate::ole::privs::*;
6use crate::prelude::*;
7use crate::taskschd::vts::*;
8
9com_interface! { ITaskService: "2faba4c7-4da9-4013-9697-20cc3fd40f85";
10	/// [`ITaskService`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nn-taskschd-itaskservice)
11	/// COM interface.
12	///
13	/// Automatically calls
14	/// [`Release`](https://learn.microsoft.com/en-us/windows/win32/api/unknwn/nf-unknwn-iunknown-release)
15	/// when the object goes out of scope.
16	///
17	/// # Examples
18	///
19	/// ```no_run
20	/// use winsafe::{self as w, prelude::*, co};
21	///
22	/// let obj = w::CoCreateInstance::<w::ITaskService>(
23	///     &co::CLSID::TaskScheduler,
24	///     None::<&w::IUnknown>,
25	///     co::CLSCTX::INPROC_SERVER,
26	/// )?;
27	/// # w::HrResult::Ok(())
28	/// ```
29}
30
31impl oleaut_IDispatch for ITaskService {}
32impl taskschd_ITaskService for ITaskService {}
33
34/// This trait is enabled with the `taskschd` feature, and provides methods for
35/// [`ITaskService`](crate::ITaskService).
36///
37/// Prefer importing this trait through the prelude:
38///
39/// ```no_run
40/// use winsafe::prelude::*;
41/// ```
42pub trait taskschd_ITaskService: oleaut_IDispatch {
43	/// [`ITaskService::Connect`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-connect)
44	/// method.
45	fn Connect(
46		&self,
47		server_name: Option<&str>,
48		user: Option<&str>,
49		domain: Option<&str>,
50		password: Option<&str>,
51	) -> HrResult<()> {
52		HrRet(unsafe {
53			(vt::<ITaskServiceVT>(self).Connect)(
54				self.ptr(),
55				Variant::from_opt_str(server_name).to_raw()?,
56				Variant::from_opt_str(user).to_raw()?,
57				Variant::from_opt_str(domain).to_raw()?,
58				Variant::from_opt_str(password).to_raw()?,
59			)
60		})
61		.to_hrresult()
62	}
63
64	/// [`ITaskService::get_Connected`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connected)
65	/// method.
66	#[must_use]
67	fn get_Connected(&self) -> HrResult<bool> {
68		let mut connected = i16::default();
69		HrRet(unsafe { (vt::<ITaskServiceVT>(self).get_Connected)(self.ptr(), &mut connected) })
70			.to_hrresult()
71			.map(|_| connected != 0)
72	}
73
74	fn_com_bstr_get! { get_ConnectedDomain: ITaskServiceVT;
75		/// [`ITaskService::get_ConnectedDomain`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connecteddomain)
76		/// method.
77	}
78
79	fn_com_bstr_get! { get_ConnectedUser: ITaskServiceVT;
80		/// [`ITaskService::get_ConnectedUser`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connecteduser)
81		/// method.
82	}
83
84	/// [`ITaskService::get_HighestVersion`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_highestversion)
85	/// method.
86	#[must_use]
87	fn get_HighestVersion(&self) -> HrResult<u32> {
88		let mut ver = 0u32;
89		HrRet(unsafe { (vt::<ITaskServiceVT>(self).get_HighestVersion)(self.ptr(), &mut ver) })
90			.to_hrresult()
91			.map(|_| ver)
92	}
93
94	fn_com_bstr_get! { get_TargetServer: ITaskServiceVT;
95		/// [`ITaskService::get_TargetServer`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_targetserver)
96		/// method.
97	}
98
99	/// [`ITaskService::GetFolder`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-getfolder)
100	/// method.
101	#[must_use]
102	fn GetFolder(&self, path: &str) -> HrResult<ITaskFolder> {
103		let mut queried = unsafe { ITaskFolder::null() };
104		HrRet(unsafe {
105			(vt::<ITaskServiceVT>(self).GetFolder)(
106				self.ptr(),
107				BSTR::SysAllocString(path)?.as_ptr(),
108				queried.as_mut(),
109			)
110		})
111		.to_hrresult()
112		.map(|_| queried)
113	}
114
115	/// [`ITaskService::NewTask`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-newtask)
116	/// method.
117	#[must_use]
118	fn NewTask(&self) -> HrResult<ITaskDefinition> {
119		let mut queried = unsafe { ITaskDefinition::null() };
120		HrRet(unsafe { (vt::<ITaskServiceVT>(self).NewTask)(self.ptr(), 0, queried.as_mut()) })
121			.to_hrresult()
122			.map(|_| queried)
123	}
124}