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}