#keyboard #uinput #macos #simulat

keybd_event

在 Rust 中模拟 Linux、Windows 和 Mac OS 上的键盘

3 个版本

使用旧的 Rust 2015

0.1.2 2019 年 8 月 11 日
0.1.1 2019 年 8 月 10 日
0.1.0 2019 年 8 月 10 日

#363 in 模拟

每月 40 次下载

MIT 许可证

41KB
589

在 Rust 中模拟 Linux、Windows 和 Mac OS 上的键盘

在下一个示例中,该库模拟按键 A 和 Z 被按下。

计算机上的键盘布局很重要!

如果您使用的是美国键盘布局,您将有相应的按键,但如果您使用的是,例如,法语布局,您将得到另一个结果。

extern crate keybd_event;

#[cfg(target_os = "linux")]
use std::thread::sleep;
#[cfg(target_os = "linux")]
use std::time::Duration;
use keybd_event::KeyboardKey::{KeyA,KeyZ};
use keybd_event::KeyBondingInstance;

fn main() {
   let mut kb = KeyBondingInstance::new().unwrap();
   #[cfg(target_os = "linux")]
       sleep(Duration::from_secs(2));
   kb.has_shift(true);
   kb.add_keys(&[KeyA, KeyZ]);
   kb.launching();
}

keyboard

Linux

在 Linux 上,此库使用 uinput,但通常 uinput 只适用于 root 用户。

简单的解决方案是在 root 用户下执行或通过 chmod 修改权限,但这并不好。

您可以遵循以下示例,以获得更高的安全性。

sudo groupadd uinput
sudo usermod -a -G uinput my_username
sudo udevadm control --reload-rules
echo "SUBSYSTEM==\"misc\", KERNEL==\"uinput\", GROUP=\"uinput\", MODE=\"0660\"" | sudo tee /etc/udev/rules.d/uinput.rules
echo uinput | sudo tee /etc/modules-load.d/uinput.conf

Linux 上的另一个微妙之处,在创建 KeyBondingInstance 之后,需要在运行第一个键盘动作之前等待 2 秒。

Darwin (MAC OS)

此库依赖于 Apple 的框架,我没有找到交叉编译的解决方案。

依赖项

~0–410KB