Skip to content

luo1227/rs-auto

Repository files navigation

luo-utils

一个基于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
    }
  ]
}

屏幕捕获功能

库提供了两种屏幕捕获方式:

DXGI 屏幕捕获(推荐,性能更佳)

基于 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.png

实例化使用(推荐用于频繁捕获)

use 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!

About

rs

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages