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单位
}

注意事项

  1. 需要系统权限(特别是macOS)
  2. 不同平台行为可能略有差异
  3. 推荐在 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!("自动填写完成!");
}

注意事项

  1. 权限问题:在某些系统上可能需要特殊权限
  2. 跨平台差异:不同平台的鼠标坐标系统和按键映射可能不同
  3. 时序控制:使用 thread::sleep() 控制操作间隔
  4. 错误处理:实际使用时应该妥善处理可能的错误

常用按键常量

  • Key::Return - 回车键
  • Key::Tab - Tab键
  • Key::Escape - Esc键
  • Key::Backspace - 退格键
  • Key::Control - Ctrl键
  • Key::Alt - Alt键
  • Key::Shift - Shift键
  • Key::Unicode('c') - 字符键

这个库非常适合自动化测试、宏录制等场景使用。

回到顶部