winsafe\taskschd\com_interfaces/
itaskservice.rs

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