winapi-easy 0.3.0

A safe interface to various winapi functionality
Documentation
use std::io;

use winapi_easy::hooking::{
    WinEventHook,
    WinEventKind,
    WinEventMessage,
};
use winapi_easy::ui::Rectangle;
use winapi_easy::ui::window::WindowHandle;

fn main() -> io::Result<()> {
    #[expect(dead_code)]
    #[derive(Debug)]
    struct MessageContent {
        kind: WinEventKind,
        caption: Option<String>,
        client_area: Option<Rectangle>,
    }
    let callback = |message: WinEventMessage| match message.event_kind {
        WinEventKind::ForegroundWindowChanged
        | WinEventKind::WindowUnminimized
        | WinEventKind::WindowMinimized
        | WinEventKind::WindowMoveStart
        | WinEventKind::WindowMoveEnd => {
            let window_handle = message.window_handle;
            let message_content = MessageContent {
                kind: message.event_kind,
                caption: window_handle.map(WindowHandle::get_caption_text),
                client_area: window_handle
                    .map(WindowHandle::get_client_area_coords)
                    .transpose()
                    .ok()
                    .flatten(),
            };
            println!("{message_content:#?}");
        }
        _ => (),
    };
    WinEventHook::run_hook_loop(callback, None)?;
    Ok(())
}