use rand::{rng, RngExt};
use windows::Win32::Foundation::HWND;
use windows::Win32::UI::WindowsAndMessaging::{ShowWindow, SW_MINIMIZE, SW_RESTORE};
pub use crate::desktop::{list_windows, WindowInfo};
pub fn hide_random_window() -> Option<WindowInfo> {
let windows = list_windows();
hide_random_window_from(&windows)
}
fn hide_random_window_from(windows: &[WindowInfo]) -> Option<WindowInfo> {
if windows.is_empty() {
return None;
}
let mut rng = rng();
let index = rng.random_range(0..windows.len());
let target = &windows[index];
hide_window(target.handle());
Some(target.clone())
}
pub fn hide_window(window: HWND) -> bool {
unsafe { ShowWindow(window, SW_MINIMIZE).as_bool() }
}
pub fn hide_by_title(title: &str) -> Option<WindowInfo> {
list_windows()
.into_iter()
.find(|w| w.title() == title)
.inspect(|w| {
hide_window(w.handle());
})
}
pub fn restore_window(window: HWND) -> bool {
unsafe { ShowWindow(window, SW_RESTORE).as_bool() }
}