一个基于Rust的Windows自动化工具库,支持鼠标键盘操作、窗口捕获、定时任务、AI推理等功能。
将 luo-utils 添加到你的 Cargo.toml:
[dependencies]
luo-utils = "0.1.0"然后在代码中使用:
use luo_utils::{
mouse::{move_mouse, click_mouse},
capture::{create_dxgi_capture, capture_fullscreen, capture_region, capture_fullscreen_and_save}
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 移动鼠标并点击
move_mouse(100, 200)?;
click_mouse()?;
// 方法1:快速捕获(每次都创建新实例)
let result = capture_fullscreen()?;
println!("捕获到 {}x{} 的图像", result.width, result.height);
// 方法2:创建可复用的捕获器实例(推荐用于频繁捕获)
let mut capturer = create_dxgi_capture()?;
let result = capturer.capture_fullscreen(false, 1000)?;
let result = capturer.capture_region(100, 100, 800, 600, true, 1000)?;
println!("区域截图已保存");
// 快捷方法
capture_fullscreen_and_save()?;
Ok(())
}- 🖱️ 鼠标控制(移动、点击、拖拽)
- ⌨️ 键盘模拟输入
- 🖼️ 窗口截图和捕获(支持 Graphics Capture API 和 DXGI)
- 🖼️ 全屏和区域屏幕捕获(基于 DXGI,性能更佳)
- ⏰ 定时任务执行
- 🤖 AI辅助功能集成
- 📊 DPI感知和适配
cargo add luo-utils确保你已安装Rust,然后:
cargo install luo-utils --features cli或者从源码构建:
git clone <repository-url>
cd luo-utils
cargo build --release --features cli# 移动鼠标到指定坐标
luo-utils move <x> <y>
# 在指定坐标点击鼠标
luo-utils click <x> <y>
# 截取屏幕指定区域
luo-utils screenshot <left,top,right,bottom>
# 执行定时任务
luo-utils timedtask <config_file.json>创建JSON配置文件定义定时任务序列:
{
"datetime": "2024-01-07 15:30:00",
"click_items": [
{
"x": 100,
"y": 200,
"before": 1000,
"after": 500
},
{
"x": 300,
"y": 400,
"before": 2000,
"after": 1000
}
]
}库提供了两种屏幕捕获方式:
基于 Windows DXGI (DirectX Graphics Infrastructure) 的高效捕获,支持全屏和区域捕获:
use luo_utils::capture::*;
// 全屏捕获
let result = capture_fullscreen()?;
println!("尺寸: {}x{}", result.width, result.height);
// 区域捕获
let result = capture_region(0, 0, 800, 600)?;
// 自动保存到文件
capture_fullscreen_and_save()?; // 保存为 dxgi_fullscreen.png
capture_region_and_save(100, 100, 400, 300)?; // 保存为 dxgi_region.pnguse luo_utils::capture::*;
// 创建可复用的捕获器实例(执行耗时的初始化操作)
let mut capturer = create_dxgi_capture()?;
// 现在可以快速重复调用捕获方法
for _ in 0..10 {
let result = capturer.capture_fullscreen(false, 1000)?;
println!("捕获成功! 耗时: {:.2}ms", result.capture_time_ms);
}
// 区域捕获
let result = capturer.capture_region(100, 100, 800, 600, true, 1000)?;use luo_utils::capture::*;
use windows_capture::monitor::Monitor;
// 获取所有显示器
let monitors = Monitor::enumerate()?;
// 使用第二个显示器
if monitors.len() > 1 {
let capturer = create_dxgi_capture_with_monitor(monitors[1].clone())?;
// 使用 capturer 进行捕获...
}基于 Windows Graphics Capture API 的窗口特定捕获:
use luo_utils::capture::*;
// 创建窗口捕获器
let capturer = create_window_capture(hwnd)?;
// 捕获窗口
let result = capturer.capture_frame(false)?;src/
├── main.rs # 主程序入口
├── config.rs # 配置管理
├── lib.rs # 库文件
└── utils/ # 工具模块
├── ai.rs # AI功能
├── capture.rs # 屏幕捕获
├── dpi.rs # DPI处理
├── keyboard.rs # 键盘控制
├── mouse.rs # 鼠标控制
├── timer.rs # 定时器
├── types.rs # 类型定义
└── window.rs # 窗口管理
windows- Windows API绑定image- 图像处理serde- 序列化/反序列化clap- 命令行参数解析reqwest- HTTP客户端tokio- 异步运行时
MIT License
欢迎提交Issue和Pull Request!