uiohook-rs is a Rust wrapper for the libuiohook, providing cross-platform keyboard and mouse hooking capabilities.
- Cross-platform support (Linux, macOS, Windows)
- Low-level keyboard and mouse event handling
- Easy-to-use Rust API
Note: All examples have now been tested on macOS, Windows and Linux.
On macOS the examples have been updated to use the CoreFoundation run loop (CFRunLoop) for proper event dispatch and exit.
Here's a basic example of how to use uiohook-rs:
use uiohook_rs::{EventHandler, Uiohook, UiohookEvent};
struct MyEventHandler;
impl EventHandler for MyEventHandler {
fn handle_event(&self, event: &UiohookEvent) {
println!("Event: {:?}", event);
}
}
fn main() {
let event_handler = MyEventHandler;
let uiohook = Uiohook::new(event_handler);
if let Err(e) = uiohook.run() {
eprintln!("Error: {}", e);
}
// Stop the hook
if let Err(e) = uiohook.stop() {
eprintln!("Error: {}", e);
}
}There are several example programs available under the examples/ directory, including demos for general event handling (demo.rs), pretty-printed output (pretty_demo.rs), and specific handlers for keyboard, mouse, and wheel events. Except for the pretty_demo.rs, all other examples use the minimal code to demonstrate the hook functionality.
To run the demo:
-
Clone the repo:
git clone https://github.com/efJerryYang/uiohook-rs.git cd uiohook-rs -
Run the demo:
cargo run --example demo
-
Press Ctrl-C to exit. See the output:
Press Ctrl-C to exit MOVED | Mouse | X: 802 | Y: 644 | Button: 0 | Clicks: 0 PRESSED | Caps Lock | Code: 58 | Raw: 65509 RELEASED | Caps Lock | Code: 58 | Raw: 65509 PRESSED | Caps Lock | Code: 58 | Raw: 65509 RELEASED | Caps Lock | Code: 58 | Raw: 65509 PRESSED | Left Shift | Code: 42 | Raw: 65505 PRESSED | B | Code: 48 | Raw: 66 TYPED | B | Code: 66 | Raw: 66 RELEASED | B | Code: 48 | Raw: 66 RELEASED | Left Shift | Code: 42 | Raw: 65505 PRESSED | H | Code: 35 | Raw: 104 TYPED | h | Code: 104 | Raw: 104 RELEASED | H | Code: 35 | Raw: 104 PRESSED | Mouse | X: 802 | Y: 644 | Button: 1 | Clicks: 1 RELEASED | Mouse | X: 802 | Y: 644 | Button: 1 | Clicks: 1 CLICKED | Mouse | X: 802 | Y: 644 | Button: 1 | Clicks: 1 PRESSED | Mouse | X: 802 | Y: 644 | Button: 1 | Clicks: 1 DRAGGED | Mouse | X: 803 | Y: 644 | Button: 0 | Clicks: 1 ... (more DRAGGED events) DRAGGED | Mouse | X: 920 | Y: 630 | Button: 0 | Clicks: 0 DRAGGED | Mouse | X: 921 | Y: 630 | Button: 0 | Clicks: 0 RELEASED | Mouse | X: 921 | Y: 630 | Button: 1 | Clicks: 0 PRESSED | Left Control | Code: 29 | Raw: 65507 PRESSED | C | Code: 46 | Raw: 99 TYPED | c | Code: 99 | Raw: 99 Exiting...
GNU General Public License v3.0, see LICENSE.