enigo-rust 使用教程及示例代码
最近在学习使用enigo-rust库进行自动化操作,但官方文档有些地方不太明白。请问有没有详细的教程和示例代码可以参考?特别是关于鼠标和键盘事件模拟的部分,希望能看到一些实用的代码片段和应用场景。
2 回复
以下是 enigo-rust 的基本使用教程和示例代码:
安装依赖 在 Cargo.toml 添加:
[dependencies]
enigo = "0.7"
基础示例
use enigo::{Enigo, Keyboard, Settings};
fn main() {
let mut enigo = Enigo::new(&Settings::default()).unwrap();
// 输入字符串
enigo.text("Hello World!").unwrap();
// 模拟按键
enigo.key(enigo::Key::Return, enigo::Direction::Press).unwrap(); // 回车键
enigo.key_sequence("rust\n").unwrap(); // 输入字符串并回车
}
鼠标控制示例
use enigo::{Enigo, Mouse, Settings};
fn main() {
let mut enigo = Enigo::new(&Settings::default()).unwrap();
// 移动鼠标到坐标(500, 300)
enigo.mouse_move_to(500, 300).unwrap();
// 点击左键
enigo.mouse_click(enigo::MouseButton::Left).unwrap();
// 滚动鼠标
enigo.mouse_scroll_y(5).unwrap(); // 向上滚动5单位
}
注意事项
- 需要系统权限(特别是macOS)
- 不同平台行为可能略有差异
- 推荐在 release 模式下测试性能
可用于自动化测试、宏程序等场景,建议查阅官方文档获取最新 API 信息。
enigo-rust 使用教程
enigo-rust 是一个跨平台的输入自动化库,支持模拟键盘和鼠标操作。
安装
在 Cargo.toml 中添加依赖:
[dependencies]
enigo = "0.8"
基本使用
1. 键盘操作
use enigo::{Enigo, Key, Keyboard};
fn main() {
let mut enigo = Enigo::new();
// 输入文本
enigo.text("Hello World!").unwrap();
// 单个按键
enigo.key(Key::Return, enigo::Direction::Press).unwrap();
// 组合键(Ctrl+C)
enigo.key(Key::Control, enigo::Direction::Press).unwrap();
enigo.key(Key::Unicode('c'), enigo::Direction::Click).unwrap();
enigo.key(Key::Control, enigo::Direction::Release).unwrap();
}
2. 鼠标操作
use enigo::{Enigo, Mouse, Button};
fn main() {
let mut enigo = Enigo::new();
// 移动鼠标到指定位置
enigo.move_mouse(500, 300, enigo::Coordinate::Abs).unwrap();
// 点击鼠标
enigo.button(Button::Left, enigo::Direction::Click).unwrap();
// 拖动操作
enigo.button(Button::Left, enigo::Direction::Press).unwrap();
enigo.move_mouse(600, 400, enigo::Coordinate::Abs).unwrap();
enigo.button(Button::Left, enigo::Direction::Release).unwrap();
// 滚轮
enigo.scroll(5, enigo::Axis::Vertical).unwrap(); // 向上滚动
enigo.scroll(-3, enigo::Axis::Vertical).unwrap(); // 向下滚动
}
3. 获取鼠标位置
use enigo::{Enigo, Mouse};
fn main() {
let mut enigo = Enigo::new();
let (x, y) = enigo.location().unwrap();
println!("当前鼠标位置: ({}, {})", x, y);
}
完整示例:自动填写表单
use enigo::{Enigo, Key, Keyboard, Mouse, Button};
use std::thread;
use std::time::Duration;
fn main() {
let mut enigo = Enigo::new();
// 等待用户准备
println!("5秒后开始自动操作...");
thread::sleep(Duration::from_secs(5));
// 移动到用户名输入框并点击
enigo.move_mouse(200, 150, enigo::Coordinate::Abs).unwrap();
enigo.button(Button::Left, enigo::Direction::Click).unwrap();
// 输入用户名
enigo.text("test_user").unwrap();
// 按Tab键切换到密码框
enigo.key(Key::Tab, enigo::Direction::Click).unwrap();
// 输入密码
enigo.text("password123").unwrap();
// 按回车提交
enigo.key(Key::Return, enigo::Direction::Click).unwrap();
println!("自动填写完成!");
}
注意事项
- 权限问题:在某些系统上可能需要特殊权限
- 跨平台差异:不同平台的鼠标坐标系统和按键映射可能不同
- 时序控制:使用
thread::sleep()控制操作间隔 - 错误处理:实际使用时应该妥善处理可能的错误
常用按键常量
Key::Return- 回车键Key::Tab- Tab键Key::Escape- Esc键Key::Backspace- 退格键Key::Control- Ctrl键Key::Alt- Alt键Key::Shift- Shift键Key::Unicode('c')- 字符键
这个库非常适合自动化测试、宏录制等场景使用。

