[−][src]Crate rdev
Simple library to listen and send events to keyboard and mouse on MacOS, Windows and Linux (x11).
You can also check out Enigo which is another crate which helped me write this one.
This crate is so far a pet project for me to understand the rust ecosystem.
Simple Usage
Listening to global events
use rdev::{listen, Event}; fn main() { // This will block. if let Err(error) = listen(callback) { println!("Error: {:?}", error) } } fn callback(event: Event) { println!("My callback {:?}", event); match event.name { Some(string) => println!("User wrote {:?}", string), None => (), } }
Sending some events
use rdev::{simulate, Button, EventType, Key, SimulateError}; use std::{thread, time}; fn send(event_type: &EventType) { let delay = time::Duration::from_millis(20); match simulate(event_type) { Ok(()) => (), Err(SimulateError) => { println!("We could not send {:?}", event_type); } } // Let ths OS catchup (at least MacOS) thread::sleep(delay); } fn main() { send(&EventType::KeyPress(Key::KeyS)); send(&EventType::KeyRelease(Key::KeyS)); send(&EventType::MouseMove { x: 0.0, y: 0.0 }); send(&EventType::MouseMove { x: 400.0, y: 400.0 }); send(&EventType::ButtonPress(Button::Left)); send(&EventType::ButtonRelease(Button::Right)); send(&EventType::Wheel { delta_x: 0, delta_y: 1, }); }
Getting the main screen size
use rdev::{display_size}; fn main() { let (w, h) = display_size(); assert!(w > 0); assert!(h > 0); }
Structs
Event | When events arrive from the OS they get some additional information added from EventType, which is the time when this event was received, and the name Option which contains what characters should be emmitted from that event. This relies on the OS layout and keyboard state machinery. Caveat: Dead keys don't function on Linux(X11) yet. You will receive None for a dead key, and the raw letter instead of accentuated letter instead. |
SimulateError | Marking an error when we tried to simulate and event |
Enums
Button | Standard mouse buttons |
EventType | In order to manage different OS, the current EventType choices is a mix&match to account for all possible events. |
Key | Key names based on physical location on the device Merge Option(MacOS) and Alt(Windows, Linux) into Alt Merge Windows (Windows), Meta(Linux), Command(MacOS) into Meta Characters based on Qwerty layout, don't use this for characters as it WILL depend on the layout. Use Event.name instead. Key modifiers gives those keys a different value too. Careful, on Windows KpReturn does not exist, it' s strictly equivalent to Return, also Keypad keys get modified if NumLock is Off and ARE pagedown and so on. |
ListenError | Errors that occur when trying to capture OS events. Be careful on Mac, not setting accessibility does not cause an error it justs ignores events. |
Functions
display_size | Returns the size in pixels of the main screen. This is useful to use with x, y from MouseMove Event. |
listen | Listening to global events. Caveat: On MacOS, you require the listen loop needs to be the primary app (no fork before) and need to have accessibility settings enabled. |
simulate | Sending some events |
Type Definitions
Callback | Callback type to send to listen function. |