willhook 0.6.3

Capture all keyboard and mouse input regardless of application focus on the active windows desktop
Documentation
#[cfg(test)]
mod willhook {
    use willhook::*;
    use MouseButtonPress::*;
    use willhook::MouseButton::*;
    use willhook::MouseClick::*;
    use willhook::KeyboardKey::*;
    use willhook::IsSystemKeyPress::*;
    use mki::Keyboard;
    use mki::Mouse;

    #[test]
    pub fn mixed_inputs() {            
        let h = willhook().unwrap();

        utils::fixme::vertical_wheel_backward();
        assert_eq!(h.try_recv(), utils::a_wheel(MouseWheel::Vertical, MouseWheelDirection::Backward));
        assert!(h.try_recv().is_err());

        Keyboard::A.click();
        utils::fixme::vertical_wheel_backward();
        utils::fixme::move_by(10, 15);
        utils::fixme::horizontal_wheel_forward();
        Keyboard::B.click();
        utils::fixme::click(Mouse::Middle);

        assert_eq!(h.try_recv(), utils::a_key(A, KeyPress::Down(Normal)));
        assert_eq!(h.try_recv(), utils::a_key(A, KeyPress::Up(Normal)));
        assert_eq!(h.try_recv(), utils::a_wheel(MouseWheel::Vertical, MouseWheelDirection::Backward));
        assert!(utils::is_mouse_move(h.try_recv()));
        assert_eq!(h.try_recv(), utils::a_wheel(MouseWheel::Horizontal, MouseWheelDirection::Forward));
        assert_eq!(h.try_recv(), utils::a_key(B, KeyPress::Down(Normal)));
        assert_eq!(h.try_recv(), utils::a_key(B, KeyPress::Up(Normal)));
        assert_eq!(h.try_recv(), utils::a_button(Middle(SingleClick), Down));
        assert_eq!(h.try_recv(), utils::a_button(Middle(SingleClick), Up));
        assert!(h.try_recv().is_err());
    }
    
    #[test]
    pub fn blocking_mixed_inputs() {            
        let h = willhook().unwrap();

        Keyboard::A.click();
        utils::fixme::vertical_wheel_backward();
        utils::fixme::horizontal_wheel_forward();
        Keyboard::B.click();
        utils::fixme::click(Mouse::Middle);

        assert_eq!(h.recv(), utils::as_blocking(utils::a_key(A, KeyPress::Down(Normal))));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_key(A, KeyPress::Up(Normal))));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_wheel(MouseWheel::Vertical, MouseWheelDirection::Backward)));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_wheel(MouseWheel::Horizontal, MouseWheelDirection::Forward)));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_key(B, KeyPress::Down(Normal))));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_key(B, KeyPress::Up(Normal))));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_button(Middle(SingleClick), Down)));
        assert_eq!(h.recv(), utils::as_blocking(utils::a_button(Middle(SingleClick), Up)));
    }
}