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}