| Crates.io | uiohook-rs |
| lib.rs | uiohook-rs |
| version | 0.2.6 |
| created_at | 2024-08-10 00:45:42.060306+00 |
| updated_at | 2025-02-15 07:01:16.091468+00 |
| description | uiohook-rs is a Rust wrapper for the libuiohook, providing cross-platform keyboard and mouse hooking capabilities. |
| homepage | |
| repository | https://github.com/efJerryYang/uiohook-rs |
| max_upload_size | |
| id | 1331885 |
| size | 719,745 |
uiohook-rs is a Rust wrapper for the libuiohook, providing cross-platform keyboard and mouse hooking capabilities.
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.