use windows::Win32::Foundation::{CloseHandle, HANDLE, HWND};
use windows::Win32::Graphics::Gdi::HDC;
#[derive(Debug)]
pub struct ProcessState {
pub pid: u32,
pub hwnd: Option<HWND>,
pub handle: Option<HANDLE>,
pub hdc: Option<HDC>,
}
impl ProcessState {
pub fn is_valid(&self) -> bool {
self.pid != 0 && (self.hwnd.is_some() || self.handle.is_some() || self.hdc.is_some())
}
pub fn has_hwnd(&self) -> bool {
self.hwnd.is_some()
}
pub fn has_handle(&self) -> bool {
self.handle.is_some()
}
pub fn has_dc(&self) -> bool {
self.hdc.is_some()
}
}
impl Drop for ProcessState {
fn drop(&mut self) {
if let Some(hdc) = self.hdc.take() {
if !hdc.is_invalid() {
unsafe {
let _ = windows::Win32::Graphics::Gdi::DeleteDC(hdc);
}
}
}
if let Some(handle) = self.handle.take() {
if !handle.is_invalid() {
unsafe {
let _ = CloseHandle(handle);
}
}
}
}
}