🤖 一个基于 Tauri 2.0 的现代化桌面自动化工具,使用 Rust 和 Vue.js 构建
- 🔥 热键管理 - 注册和管理全局热键,快速触发脚本
- 📸 像素选择器 - 屏幕取色和图像识别功能
- ✏️ 脚本编辑器 - 基于 CodeMirror 的 JavaScript 脚本编辑器
- 📦 资源收集器 - 管理和组织脚本资源
- ⚙️ 配置管理 - 灵活的系统配置选项
- 📖 API 文档 - 内置完整的 API 文档
- 框架: Vue 3.4 + TypeScript
- UI 组件库: Element Plus
- 构建工具: Vite 5.0
- 代码编辑器: CodeMirror 6
- 样式: SCSS
- 框架: Tauri 2.0
- 语言: Rust
- 脚本引擎: rquickjs (JavaScript 运行时)
- 自动化库:
- rdev (输入模拟)
- enigo (跨平台输入控制)
- screenshots (屏幕截图)
- image (图像处理)
- Node.js 18+
- Rust 1.70+
- Windows 10/11
git clone https://github.com/yourusername/autohotkey-rust.git
cd autohotkey-rustnpm installnpm run devnpm run tauri devnpm run build
npm run tauri build- 创建、编辑、删除 JavaScript 脚本
- 脚本持久化存储(JSON 格式)
- 支持脚本热键绑定
- 启用/禁用脚本控制
- 实时脚本执行和输出
- 鼠标控制:移动、点击、滚动
- 键盘输入:按键、文本输入
- 窗口管理:查找、激活、移动窗口
- 剪贴板操作:读取和写入
- 屏幕截图:全屏和窗口截图
- 图像识别:像素匹配和查找
- 捕获屏幕区域像素数据
- 保存和加载像素模式
- 在图像中查找匹配模式
- 获取像素颜色值
autohotkey-rust/
├── src/ # 前端源代码
│ ├── components/ # Vue 组件
│ │ ├── ApiDocs.vue # API 文档组件
│ │ ├── HotkeyManager.vue # 热键管理组件
│ │ ├── PixelSelector.vue # 像素选择器
│ │ ├── ResourceCollector.vue # 资源收集器
│ │ ├── ScriptEditor.vue # 脚本编辑器
│ │ ├── ScriptEditorPage.vue # 脚本编辑页面
│ │ ├── ScriptManager.vue # 脚本管理器
│ │ └── Settings.vue # 设置组件
│ ├── styles/ # 样式文件
│ │ └── miku-theme.scss # 主题样式
│ ├── utils/ # 工具函数
│ │ └── rhaiLanguage.ts # Rhai 语言支持
│ ├── App.vue # 主应用组件
│ └── main.ts # 入口文件
├── src-tauri/ # Tauri 后端源代码
│ ├── capabilities/ # 权限配置
│ ├── icons/ # 应用图标
│ ├── scripts/ # 脚本文件
│ └── src/
│ ├── commands/ # Tauri 命令
│ │ ├── automation.rs # 自动化命令
│ │ ├── hotkey.rs # 热键命令
│ │ ├── mod.rs # 模块导出
│ │ ├── pixel.rs # 像素操作命令
│ │ ├── screenshot.rs # 截图命令
│ │ ├── script.rs # 脚本命令
│ │ └── window.rs # 窗口命令
│ └── main.rs # 后端入口
├── public/ # 公共资源
├── index.html # HTML 模板
├── package.json # Node.js 依赖配置
├── tsconfig.json # TypeScript 配置
└── vite.config.ts # Vite 配置
// 打印输出
print("开始执行脚本...");
// 鼠标操作
moveMouse(100, 100);
clickMouse(100, 100, "left");
scrollMouse(100, 100, 120);
// 键盘操作
typeText("Hello World");
keyPress("enter");
keyDown("shift");
keyUp("shift");
// 等待
sleep(1000);
// 检查停止状态
if (isStopped()) {
print("脚本已停止");
}
// 像素操作
let color = getPixelColor(100, 100);
let positions = findPattern("myImage", 90); // 90% 相似度
// 窗口操作
let hwnd = findWindow("Untitled - Notepad");
activateWindow(hwnd);
moveWindow(hwnd, 0, 0, 800, 600);
postChar(hwnd, "A");
// 循环等待
let found = waitForPattern("target", 5000); // 5 秒超时
if (found) {
print("找到目标!");
}print(msg)- 输出消息sleep(ms)- 延迟指定毫秒isStopped()- 检查是否被停止screenshot()- 截取屏幕
moveMouse(x, y)- 移动鼠标clickMouse(x, y, button)- 点击鼠标scrollMouse(x, y, delta)- 滚动鼠标
typeText(text)- 输入文本keyPress(key)- 按下并释放键keyDown(key)- 按下键keyUp(key)- 释放键
getPixelColor(x, y)- 获取像素颜色findPattern(name, tolerance)- 查找保存的图案findCustomPattern(pattern, tolerance)- 查找自定义图案waitForPattern(name, timeout)- 等待图案出现
findWindow(title)- 查找窗口getForegroundWindow()- 获取前台窗口getWindowInfo(hwnd)- 获取窗口信息activateWindow(hwnd)- 激活窗口moveWindow(hwnd, x, y, w, h)- 移动窗口showWindow(hwnd, state)- 显示/隐藏窗口postClick(hwnd, x, y, button)- 后台发送点击postKey(hwnd, vkCode)- 后台发送虚拟键postChar(hwnd, char)- 后台发送字符
MIT License
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 GitHub Issues 联系我们。
注意: 本项目仅供学习和研究使用。请合理使用自动化工具,遵守相关法律法规。