winsafe_input_manager 0.1.0

Safe winapi wrapper to manage input globally (no window/dll) (Keyboard & Mouse).
Documentation
use winsafe_input_manager::{listener, WindowsResult};
use winsafe_input_manager::listener::EventType;
use winsafe_input_manager::sender::Event;
use winsafe_input_manager::structs::keyboard::{KeyboardEvent, VirtualKey};
use winsafe_input_manager::structs::mouse::{MouseButton, MouseEvent};

fn main() -> WindowsResult {
	listener::init();
	let recv = listener::get_event_receiver();

	let movement_speed = 1000.0;
	let delta_time = 0.01;
	let shift_multiplier = 5.0;

	let mut left = false;
	let mut up = false;
	let mut right = false;
	let mut down = false;
	let mut shift = false;

	loop {
		while let Ok(c) = recv.try_recv() {
			if let Some(EventType::KeyboardEvent(k)) = c.into_event() {
				match k {
					KeyboardEvent::VirtualKeyDown(VirtualKey::ArrowLeft) => left = true,
					KeyboardEvent::VirtualKeyDown(VirtualKey::ArrowUp) => up = true,
					KeyboardEvent::VirtualKeyDown(VirtualKey::ArrowRight) => right = true,
					KeyboardEvent::VirtualKeyDown(VirtualKey::ArrowDown) => down = true,
					KeyboardEvent::VirtualKeyDown(VirtualKey::LeftShift) => shift = true,
					KeyboardEvent::VirtualKeyDown(VirtualKey::Enter) => MouseEvent::ButtonDown(MouseButton::Left).into_event_queue().execute()?,

					KeyboardEvent::VirtualKeyUp(VirtualKey::ArrowLeft) => left = false,
					KeyboardEvent::VirtualKeyUp(VirtualKey::ArrowUp) => up = false,
					KeyboardEvent::VirtualKeyUp(VirtualKey::ArrowRight) => right = false,
					KeyboardEvent::VirtualKeyUp(VirtualKey::ArrowDown) => down = false,
					KeyboardEvent::VirtualKeyUp(VirtualKey::LeftShift) => shift = false,
					KeyboardEvent::VirtualKeyUp(VirtualKey::Enter) => MouseEvent::ButtonUp(MouseButton::Left).into_event_queue().execute()?,

					_ => {}
				}
			}
		}

		let mut new_pos = (0.0, 0.0);
		if left {
			new_pos.0 -= movement_speed;
		}
		if up {
			new_pos.1 -= movement_speed;
		}
		if right {
			new_pos.0 += movement_speed;
		}
		if down {
			new_pos.1 += movement_speed;
		}
		if shift {
			new_pos.0 *= shift_multiplier;
			new_pos.1 *= shift_multiplier;
		}
		new_pos.0 *= delta_time;
		new_pos.1 *= delta_time;
		MouseEvent::MoveCursor(new_pos.0 as i32, new_pos.1 as i32).into_event_queue().execute()?;
		std::thread::sleep(std::time::Duration::from_millis((1_000.0 * delta_time) as u64));
	}
}