#mouse-event #mouse #keyboard #wheel #uiohook #libuiohook

uiohook-rs

uiohook-rs 是 libuiohook 的 Rust 封装,提供跨平台的键盘和鼠标钩子功能

5 个版本

0.2.3 2024年8月17日
0.2.2 2024年8月15日
0.2.1 2024年8月14日
0.2.0 2024年8月12日
0.1.0 2024年8月10日

#395 in 硬件支持

Download history 101/week @ 2024-08-05 422/week @ 2024-08-12

每月523次下载

GPL-3.0 许可证

540KB
8K SLoC

C 7K SLoC // 0.2% comments Rust 1.5K SLoC // 0.1% comments

uiohook-rs

Crates.io

uiohook-rslibuiohook 的 Rust 封装,提供跨平台的键盘和鼠标钩子功能。

特性

  • 跨平台支持(Linux、macOS、Windows)
  • 低级键盘和鼠标事件处理
  • 易于使用的 Rust API

重要:此 crate 尚未在 MacOSWindows 上进行测试,请报告您遇到的任何问题(可能是与依赖项相关的编译问题)。

用法

以下是如何使用 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);
    }
}

运行演示

examples/ 目录下有多个示例程序,包括通用事件处理(demo.rs)、格式化输出(pretty_demo.rs)以及键盘、鼠标和滚动事件的具体处理程序。除了 pretty_demo.rs 之外,所有其他示例都使用最少的代码来演示钩子功能。

要运行演示

  1. 克隆仓库

    git clone https://github.com/efJerryYang/uiohook-rs.git
    cd uiohook-rs
    
  2. 运行演示

    cargo run --example demo
    
  3. 按 Ctrl-C 退出。查看输出

    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 通用公共许可证 v3.0,请参阅 LICENSE

依赖项

~2–14MB
~132K SLoC