wintrack 1.0.1

Library for monitoring window related events on Windows.
Documentation
# Wintrack

A library for monitoring window related events on Windows.

> View API reference on [docs.rs]https://docs.rs/wintrack, and the crate page on [crates.io]https://crates.io/crates/wintrack.

## Features

- Listen for various window related events
    -  Foreground (active) window changed
    -  Window title or name changed
    -  Window became visible (unminimized / moved onscreen)
    -  Window became hidden (minimized / moved offscreen)
    -  New window was created
    -  Window was destroyed or closed
    -  Window was moved or resized
-  Define callback that will be called when event is received
-  Callback includes snapshot of window's state at time of event
-  snapshot has title, rect, executable, etc.
- Safe wrapper over Win32 API & robust error handling

## Demo

Using a channel to receive messages:
```rust
use std::sync::mpsc;
use wintrack::WindowEventKind;

wintrack::try_hook().expect("hook should not be set yet");

let (tx, rx) = mpsc::channel();

wintrack::set_callback(Box::new(move |event| {
    let snapshot_exe = event.snapshot.executable.file_name();
    let is_firefox = snapshot_exe == Some(OsStr::new("firefox.exe"));
    // only monitor name change events from Firefox
    // (this checks when the tab changes)
    if is_firefox && event.kind == WindowEventKind::WindowNameChanged {
        // send the event to the main thread
        let res = tx.send(event.snapshot);
        if let Err(err) = res {
            // ...
        }
    }
}));

while let Ok(browser_snapshot) = rx.recv() {
    println!("Your active Firefox tab changed to {}.", browser_snapshot.title);
}
```