Crates.io | uiohook-rs |
lib.rs | uiohook-rs |
version | 0.2.3 |
source | src |
created_at | 2024-08-10 00:45:42.060306 |
updated_at | 2024-08-17 10:03:31.79248 |
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 | 716,577 |
uiohook-rs
is a Rust wrapper for the libuiohook, providing cross-platform keyboard and mouse hooking capabilities.
IMPORTANT: This crate has not been tested on MacOS
and Windows
yet, please report any issues you encounter (likely to be compilation issues related to dependencies).
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.