16个版本 (7个破坏性更新)
0.9.1 | 2024年6月7日 |
---|---|
0.8.1 | 2024年5月19日 |
0.7.3 | 2024年5月18日 |
0.6.1 | 2024年5月6日 |
0.2.3 | 2023年2月14日 |
#235 in 硬件支持
62KB
1.5K SLoC
为Rust提供易于使用的 uinput
包装器。
比任何其他Linux输入仿真的库都要快(更低延迟)。
通过在Linux中创建虚拟设备,允许您发送键盘和鼠标事件。
uinput
是一个基本的Linux库,因此它可以在任何发行版以及 X11
或 Wayland
上运行。
为鼠标滚轮发送高分辨率事件,允许更平滑的滚动和更好的精度。
库设计上安全,当调用 VirtualDevice
的析构函数时自动释放资源。与其他Rust的 uinput
库相比,依赖项是最新的。
安装
要无 sudo
使用,请将当前用户添加到输入组(将 user
替换为您的用户名)
sudo usermod -a -G input user
sudo reboot
所需库
在Ubuntu和Debian上
sudo apt install libudev-dev libevdev-dev libhidapi-dev
添加到 Cargo.toml
mouse-keyboard-input = "0.9.1"
要使用最新开发版本
mouse-keyboard-input = { git = "https://github.com/positiveway/mouse-keyboard-input", branch = "main" }
linux上的armv7构建
构建脚本可在 /scripts/build_armv7.sh 中找到
cd ./scripts
sudo chmod +x ./build_armv7.sh #make script executable
./build_armv7.sh
为了使其工作,需要安装 arm-linux-gnueabi-gcc
对于Ubuntu
sudo apt install gcc-arm-linux-gnueabi
安装包后需要重启
有关更多详细信息,请参阅 官方讨论
如何使用
函数
click(button_or_key) - click mouse button or type a key
press(button_or_key)
release(button_or_key)
smooth_move_mouse(x, y) - gradually move mouse from the current position on screen by (x, y) pixels. this method is preferred
move_mouse(x, y) - move mouse instantly
move_mouse_x(value) - move mouse instantly
move_mouse_y(value)- move mouse instantly
smooth_scroll(x, y) - gradually scroll. this method is preferred
scroll_x(value) - instantly scroll horizontally
scroll_y(value) - instantly scroll vertically
按钮列表
鼠标
BTN_LEFT - left mouse button
BTN_RIGHT - right mouse button
BTN_MIDDLE - middle mouse button
键盘
键码可以在 /src/key_codes.rs 中找到
示例
KEY_A
KEY_LEFTSHIFT
KEY_LEFTMETA (Meta means Windows button on Linux)
代码示例
鼠标
use mouse_keyboard_input::VirtualDevice;
use mouse_keyboard_input::key_codes::*;
use std::thread;
use std::time::Duration;
fn main() {
let mut device = VirtualDevice::default().unwrap();
for _ in 1..3 {
thread::sleep(Duration::from_secs(1));
// gradually scroll down by 100
device.smooth_scroll(0, -100).unwrap();
// gradually move cursor 250 pixels up and 250 pixels to the right from the current position
device.smooth_move_mouse(250, 250).unwrap();
//click the left mouse button
device.click(BTN_RIGHT).unwrap();
}
for _ in 1..2 {
thread::sleep(Duration::from_secs(1));
// scroll down by 100
device.scroll_y(-100).unwrap();
// instantly move cursor 250 pixels up and 250 pixels to the right from the current position
device.move_mouse(250, 250).unwrap();
//click the left mouse button
device.click(BTN_RIGHT).unwrap();
}
}
键盘
use mouse_keyboard_input::VirtualDevice;
use mouse_keyboard_input::key_codes::*;
use std::thread;
use std::time::Duration;
fn main() {
let mut device = VirtualDevice::default().unwrap();
thread::sleep(Duration::from_secs(2));
// type hello
for key in [KEY_H, KEY_E, KEY_L, KEY_L, KEY_O] {
device.click(key).unwrap();
}
}
还支持从多个线程发送事件。请参阅 /examples/channels.rs
贡献者
依赖项
~2MB
~41K SLoC