Enigo:Rust 中的 "键盘鼠标操控大师"
如果你想在 Rust 中控制键盘和鼠标(比如做自动化操作、游戏脚本或 GUI 测试),那 enigo crate 绝对是你的不二之选!它就像一个 "远程操控器",能模拟鼠标点击、键盘输入,甚至移动鼠标指针,跨平台支持 Windows、macOS 和 Linux。
一、Enigo 能做什么?
想象你有一个无形的手,能帮你:
- 自动点击鼠标(比如连续点击按钮)
- 模拟键盘输入(自动打字、按快捷键)
- 移动鼠标指针到指定位置
- 甚至滚轮滚动页面
无论是做自动化测试,还是搞点小恶作剧(比如远程让朋友的鼠标跳个舞),enigo 都能胜任!
二、快速上手:安装与第一个程序
步骤 1:创建项目并添加依赖
bash
cargo new enigo_demo # 新建项目
cd enigo_demo # 进入项目
编辑 Cargo.toml,添加 enigo 依赖:
toml
[dependencies]
enigo = "0.1.4" # 检查最新版本:https://crates.io/crates/enigo
步骤 2:第一个程序 —— 让鼠标跳个舞
rust
// src/main.rs
use enigo::Enigo;
use std::thread;
use std::time::Duration;
fn main() {
// 创建一个"操控器"实例
let mut enigo = Enigo::new();
// 给用户3秒时间切换到目标窗口(比如记事本)
println!("3秒后开始表演...");
thread::sleep(Duration::from_secs(3));
// 鼠标移动:画个小正方形
let positions = [
(300, 300), // 左上角
(500, 300), // 右上角
(500, 500), // 右下角
(300, 500), // 左下角
(300, 300), // 回到起点
];
for &(x, y) in &positions {
// 移动鼠标到(x, y)坐标
enigo.mouse_move_to(x, y);
thread::sleep(Duration::from_millis(500)); // 停顿一下,看得清楚
}
// 点击左键,然后输入一段文字
enigo.mouse_click(enigo::MouseButton::Left);
thread::sleep(Duration::from_secs(1));
// 输入文字:"Hello from Enigo!"
enigo.key_sequence("Hello from Enigo!");
}
步骤 3:编译运行
bash
cargo run
运行后,赶紧切换到一个文本编辑器(比如记事本),3 秒后你会看到:
- 鼠标自动画一个正方形
- 点击一下左键(激活输入框)
- 自动输入 "Hello from Enigo!"
三、进阶案例:常用操作大全
案例 1:模拟键盘快捷键(比如复制粘贴)
rust
use enigo::{Enigo, Key, KeyboardControllable};
use std::thread;
use std::time::Duration;
fn main() {
let mut enigo = Enigo::new();
println!("3秒后演示复制粘贴...");
thread::sleep(Duration::from_secs(3));
// 输入一段文字
enigo.key_sequence("要复制的文字");
thread::sleep(Duration::from_secs(1));
// 全选:Ctrl+A(Windows/Linux)或 Command+A(macOS)
#[cfg(target_os = "macos")]
enigo.key_down(Key::Meta); // Mac的Command键
#[cfg(not(target_os = "macos"))]
enigo.key_down(Key::Control); // Windows/Linux的Ctrl键
enigo.key_click(Key::KeyA); // 按A
enigo.key_up(Key::Control); // 松开Ctrl/Command
thread::sleep(Duration::from_millis(500));
// 复制:Ctrl+C / Command+C
#[cfg(target_os = "macos")]
enigo.key_down(Key::Meta);
#[cfg(not(target_os = "macos"))]
enigo.key_down(Key::Control);
enigo.key_click(Key::KeyC);
enigo.key_up(Key::Control);
thread::sleep(Duration::from_millis(500));
// 按两次回车,留出空间
enigo.key_click(Key::Return);
enigo.key_click(Key::Return);
// 粘贴:Ctrl+V / Command+V
#[cfg(target_os = "macos")]
enigo.key_down(Key::Meta);
#[cfg(not(target_os = "macos"))]
enigo.key_down(Key::Control);
enigo.key_click(Key::KeyV);
enigo.key_up(Key::Control);
}
案例 2:鼠标滚轮滚动
rust
use enigo::Enigo;
use std::thread;
use std::time::Duration;
fn main() {
let mut enigo = Enigo::new();
println!("3秒后演示滚轮滚动...");
thread::sleep(Duration::from_secs(3));
// 先把鼠标移到窗口中间(假设屏幕分辨率1920x1080)
enigo.mouse_move_to(960, 540);
thread::sleep(Duration::from_secs(1));
// 向下滚动3次(每次滚动100单位)
for _ in 0..3 {
enigo.mouse_scroll_y(100); // 正数向下,负数向上
thread::sleep(Duration::from_millis(500));
}
}
四、跨平台注意事项
- 键盘修饰键:macOS 用 Key::Meta(Command 键),Windows/Linux 用 Key::Control。
- 坐标系统:(0,0) 通常是屏幕左上角。
- 权限问题:macOS 可能需要在 "系统设置 - 安全性与隐私" 中给程序授予 "辅助功能" 权限,否则无法控制输入设备。
总结:Enigo 是 Rust 自动化的 "瑞士军刀"
无论是做 GUI 测试、自动化办公,还是开发小游戏辅助,enigo 都能提供简单直观的 API 来控制输入设备。它的底层封装了各平台的原生 API,所以效率高且兼容性好。
下次想让电脑自己动手干活时,记得召唤 enigo 这个 "无形的助手" 哦!
标题
- 《Rust Enigo:用代码操控键盘鼠标的全指南》
- 《Enigo 入门:Rust 自动化操作的 "远程操控器"》
简介
本文介绍了 Rust 中用于控制键盘和鼠标的 enigo 库,通过趣味类比和实战案例,展示其如何模拟鼠标移动、点击、键盘输入及快捷键操作。包含详细的安装步骤、基础与进阶示例,以及跨平台注意事项,帮助你快速掌握用 Rust 实现自动化操作的方法。
关键词
#Rust #Enigo #自动化操作 #键盘鼠标控制 #跨平台