🛠️ 开发指南(RMT)
本文档概述了 RMT(若梦兔)按键宏工具的模块架构与功能,方便开发者快速理解项目结构与功能。
📂 项目总体架构
用户操作 / 热键触发
↓
BindUtil.ahk (热键路由)
↓
MacroUtil.ahk.OnTriggerMacroOnce (指令解析 & 分发)
↓
ExecuteMacroCmdOnce (单条指令执行)
├─ 键盘/鼠标/手柄模拟
├─ 图片识别 (OpenCV)
├─ 文字识别 (RapidOcr)
├─ 循环/条件判断
├─ 运行程序/脚本
└─ 其他指令...
支持多线程: WorkPool.ahk → Thread/Work.exe (独立进程)
📂 主程序入口
RMT.ahk
程序的主入口,负责初始化与启动。
初始化流程:
SelfCheckMissingFiles()— 文件完整性自检(开发阶段注释掉)InitFilePath()— 初始化文件路径(配置文件、日志等)LoadCurMacroSetting()— 加载用户配置文件HandleOpenArg()— 处理打开软件的参数EditListen()— 滚轮按键监听InitData()— 初始化软件内部数据缓存InitUI()— 初始化主界面 UISetEditData()— 缓存编辑器数据PluginInit()— 初始化插件(耗时较长,放后面)TimingCheck()— 轮询检测定时触发BindKey()— 绑定全局快捷键
🧠 核心模块 (Main/)
GlobalUtil.ahk
功能概述:
全局变量声明与模块引用中心。通过 #Include 串联所有核心模块和 GUI 模块。
职责内容:
- 声明
MySoftData、MainSoftData等全局变量 #Include所有核心模块(WorkPool, UIUtil, TimingUtil, BindUtil, VariableUtil 等)#Include所有 GUI 模块#Include部分插件(ViGEm, AHK-XAML, MacroGraph)
DataClass.ahk
功能概述: 定义程序中用到的数据结构与宏指令的数据模型。
职责内容:
TableItem— 主表格数据结构,含每个宏项的状态、触发键、循环次数等Timer— 定时器/计划配置SoftData/MainConfig— 全局配置对象(主题、快捷键映射、用户偏好设置)- 各类
*Data类(KeyboardData,SearchData,LoopData,RunData等)— 宏指令数据模型
AssetUtil.ahk
功能概述: 统一管理资源(如图标、配置文件等)的加载、保存与转换。
职责内容:
InitFilePath()— 初始化所有文件路径- 加载本地资源(图像、图标、模板等)
- 保存用户生成的数据(宏配置文件)
- 语言文件加载与切换
SelfCheck.ahk
功能概述: 文件完整性自检工具。
职责内容:
SelfCheckMissingFiles()— 检查关键依赖文件是否存在(OCR模型、DLL、音频等)- 若缺失则从 GitHub Releases 自动下载
工具模块 (Main/Util/)
MacroUtil.ahk — ⭐ 核心宏执行逻辑
功能概述: 解析并执行宏指令。
职责内容:
OnTriggerMacroOnce(tableItem, macro, index)— 触发并执行单条宏(拆分指令、遍历执行)ExecuteMacroCmdOnce(tableItem, cmdStr, index, graphNode)— 执行单条宏指令- 所有指令类型的执行函数:
OnPressKey,OnInterval,OnSearchWrapper,OnMouseMove,OnRunFile,OnCompare,OnVariable,OnLoop等 - 支持递归调用(循环、条件分支等)
MacroClipboardUtil.ahk
宏的复制、粘贴、导入导出操作。
GraphMacroUtil.ahk
流程图宏的执行逻辑。
JsonUtil.ahk
JSON 解析与序列化。
InputUtil.ahk
输入框验证与处理工具。
TextOpsUtil.ahk
文本处理指令的执行逻辑。
SearchUtil.ahk
图片搜索指令的执行逻辑(调用 OpenCV 插件)。
CompareUtil.ahk
条件比较指令的工具函数。
ExcelUtil.ahk
Excel 文件读写工具。
FileIOUtil.ahk
文件读写指令的执行逻辑。
ExpressUtil.ahk
表达式计算引擎。
LangUtil.ahk
国际化工具(加载语言文件、翻译字符串)。
FixCompatUtil.ahk
旧版本配置文件的迁移改写(入口 Gui/SettingMgrGui.ahk)。仅主程序加载,由 Main/GlobalUtil.ahk 引入,Worker 不加载。新增迁移函数请放这里。
CompatDataUtil.ahk
内存数据结构的旧版本字段补齐(Compat1_0_8F4FlodInfo、CompatEnsureArrLength)。主程序与 Worker 共用,由 Main/AssetUtil.ahk 引入,因此不可引用主程序专属函数。
Gdip_All.ahk
GDI+ 图像处理库。
HumanMouse.ahk
人类化鼠标移动算法。
PressKeyUtil.ahk
底层按键模拟工具。
ArrayUtil.ahk
数组操作工具函数。
SerialUtil.ahk
指令序列化标识管理(GetCMDSerialStr)。
RingBuffer.ahk
环形缓冲区(用于 Worker 进程通信)。
SharedMemory.ahk
共享内存封装(用于 Worker 进程通信)。
PluginUtil.ahk
插件加载与管理。
ErrorHandler.ahk
全局错误处理与报告。
MergeUtil.ahk
配置合并工具。
其他核心模块
WorkPool.ahk
功能概述: 多线程 Worker 池管理。
职责内容:
TaskQueue— 任务队列WorkerData— Worker 进程数据封装- Worker 进程的创建、销毁、任务分发
- 通过共享内存 + 环形缓冲区与 Worker 通信
BindUtil.ahk
功能概述: 全局热键注册与触发路由。
职责内容:
BindKey()— 绑定所有快捷键BindShortcut()— 注册单个热键/热字串InitTriggerKeyMap()— 初始化触发键映射- 暂停/终止/截图/自由粘贴等工具热键
UIUtil.ahk
功能概述: 主窗口 UI 模板,负责构建和控制所有主窗口相关的 UI 元素。
TimingUtil.ahk
功能概述: 定时/计划宏的调度与执行。
职责内容:
TimingScheduler— 定时调度器类- 支持按时间、间隔、系统启动等多种触发方式
VariableUtil.ahk
功能概述: 变量管理与替换引擎。
职责内容:
- 系统变量与用户变量的读取/写入
- 宏文本中的变量替换
- 支持
{变量名}语法
RecordUtil.ahk
功能概述: 键盘/鼠标宏录制。
职责内容:
- 底层原始输入(Raw Input)监听
- 按键/鼠标动作捕获与序列化
RecordJoyUtil.ahk
功能概述: 手柄宏录制。
JoyMacro.ahk
功能概述: 手柄宏支持(按键映射、轴处理)。
TriggerKeyData.ahk
功能概述: 触发键数据结构定义。
职责内容:
TriggerKeyData类 — 管理单个按键的多种触发方式(按下、松开、长按、双击、开关等)
WindowHotkeyManager.ahk
功能概述: 窗口热键管理器(为指定窗口绑定热键)。
FolderPackager.ahk
功能概述: 文件夹打包工具(用于导出配置)。
🖥️ GUI 模块 (Gui/)
MacroEditGui.ahk
功能概述: 主宏编辑器,支持用户自定义宏逻辑。
职责内容:
- 编辑界面的布局与控件初始化
- 支持多步骤宏指令添加/插入/删除等
- 提供"录制按键"、"调试"等便捷功能
- 各类指令的按钮入口
流程图编辑器 (MacroGraph/)
功能概述: 可视化流程图宏编辑与执行模块,包含 12 个文件:
| 文件 | 职责 |
|---|---|
MacroGraphGui.ahk | 主界面 |
MacroGraphData.ahk | 数据结构 |
MacroGraphNodeUI.ahk | 节点 UI 渲染 |
MacroGraphConnections.ahk | 连线管理 |
MacroGraphEvents.ahk | 事件处理 |
MacroGraphFormal.ahk | 格式化/布局 |
MacroGraphFormalHandlers.ahk | 格式化事件处理 |
MacroGraphHandlers.ahk | 通用事件处理 |
MacroGraphEdit.ahk | 编辑功能 |
MacroGraphBranch.ahk | 分支逻辑 |
MacroGraphIfPro.ahk | 条件判断节点 |
MacroGraphMenu.ahk | 右键菜单 |
指令编辑 GUI(部分列举)
| 文件 | 编辑功能 |
|---|---|
KeyGui.ahk | 按键指令编辑 |
BGKeyGui.ahk | 后台按键编辑 |
BGMouseGui.ahk | 后台鼠标编辑 |
SearchGui.ahk | 图片搜索编辑 |
SearchProGui.ahk | 专业搜索编辑 |
LoopGui.ahk | 循环指令编辑 |
RunGui.ahk | 运行文件编辑 |
CompareGui.ahk | 条件比较编辑 |
CompareProGui.ahk | 专业比较编辑 |
TextOpsGui.ahk | 文本处理编辑 |
ArrayGui.ahk | 数组操作编辑 |
InputGui.ahk | 输入指令编辑 |
FileIOGui.ahk | 文件读写编辑 |
VariableGui.ahk | 变量编辑 |
ExVariableGui.ahk | 变量提取编辑 |
OperationGui.ahk | 运算编辑 |
UIMacroGui.ahk | UI 宏编辑 |
MouseMoveGui.ahk | 鼠标移动编辑 |
MMProGui.ahk | 专业鼠标移动编辑 |
KeyCheckGui.ahk | 按键检测编辑 |
OutputGui.ahk | 输出指令编辑 |
SubMacroGui.ahk | 子宏调用编辑 |
WindowManageGui.ahk | 窗口管理编辑 |
ScreenShotGui.ahk | 截图指令编辑 |
CommentGui.ahk | 注释编辑 |
TimingGui.ahk | 定时设置编辑 |
TriggerKeyGui.ahk | 触发按键配置 |
TriggerStrGui.ahk | 触发字串配置 |
MenuWheelGui.ahk | 菜单滚轮设置 |
FreePasteGui.ahk | 自由粘贴设置 |
SettingMgrGui.ahk | 配置管理 |
VarListenGui.ahk | 变量监听 |
RMTCMDGui.ahk | RMT 命令 |
🧵 线程 Worker (Thread/)
| 文件 | 说明 |
|---|---|
Work.ahk | 工作脚本入口,编译为 Work.exe 用于并行执行宏 |
WorkUtil.ahk | Worker 工具函数(初始化、指令执行、通信) |
WorkGlobalUtil.ahk | Worker 全局配置与变量声明 |
Worker 通过共享内存(SharedMemory)+ 环形缓冲区(RingBuffer)与主进程通信。
🔌 插件 (Plugins/)
| 插件 | 能力 |
|---|---|
OpenCV/ | 图片识别(模板匹配、特征检测),含 x64/x86 版本 DLL |
RapidOcr/ | 文字识别(OCR),支持中文/英文模型 |
ViGEm/ | 虚拟手柄模拟(通过 ViGEmBus 驱动模拟 Xbox/DS4) |
AhiDriver/ | 虚拟输入驱动 |
ScreenCapture/ | 屏幕截图工具(独立 exe 进程) |
AHK-XAML/ | XAML/WPF UI 渲染库 |
IbInputSimulator.ahk + .dll | 输入模拟库 |
MouseControl.ahk + .dll | 鼠标控制库 |
CLR.ahk | .NET CLR 宿主,支持调用 C# 代码 |
RMT/ | C# 辅助库(RMT.dll, Device.cs, Http.cs) |
🌐 国际化 (Lang/)
| 文件 | 说明 |
|---|---|
中文.txt | 中文 UI 字符串 |
English.txt | 英文 UI 字符串 |
语言文件通过 LangUtil.ahk 的键值对查找实现切换。
📦 其他资源目录
| 目录 | 说明 |
|---|---|
Audio/ | 提示音(Start.wav, End.wav) |
Images/ | 图片资源(FreePaste, Gif, ScreenShot, Soft) |
Setting/ | 用户配置文件(MainSettings.ini, themes.ini) |
MinTool/ | 小工具(CountDown 倒计时, PlayAudio 音频播放) |
Log/ | 运行时日志 |
Web/ | 文档(开发指南、指令手册、更新日志、常见问题等) |
ReleaseX64/ / ReleaseX86/ | 发布版本资源 |
Joy/ | 手柄驱动与按键映射图片 |
🆕 新指令添加流程(以"开源"指令 OpenSource 为例)
如果你想新增指令,请参考以下流程:
-
新增数据保存文件路径
在AssetUtil.ahk的InitFilePath函数中添加:global OpenSourceFile := A_WorkingDir "\Setting\OpenSourceSettings.ini" -
定义指令数据结构
在DataClass.ahk中新增结构体OpenSourceData,类似已有的RunData。
重点字段:SerialStr— 指令序列化标识,必须唯一,用于区分不同指令。- 其他参数根据指令需求定义。
-
新增指令编辑界面
- 复制现有的
Gui/RunGui.ahk,重命名为Gui/OpenSourceGui.ahk。 GetCMDSerialStr("运行")改成GetCMDSerialStr("开源")- 根据指令参数调整
AddGui()和相关接口,确保界面能编辑对应参数。
- 复制现有的
-
添加指令按钮入口
- 在
Gui/MacroEditGui.ahk中新增按钮,调用OpenSourceGui.ahk以打开编辑界面。 - 参考已有"文件"按钮实现。
- 在
-
实现指令执行逻辑
- 在
Main/Util/MacroUtil.ahk的ExecuteMacroCmdOnce()中添加Actions映射:"开源", OnOpenSource, - 实现
OnOpenSource()函数,复杂指令参考"按键"指令,简单指令参考"文件"指令。
- 在
🚀 Debug 运行测试
编译 Work.ahk
如果调整会对 Work.ahk 有影响,需要先重新编译:
如果重新编译觉得麻烦,也可以临时把多线程改成 0。
-
清理旧文件
删除Thread目录下所有的.exe文件(或删除后运行时会自动重新生成)。 -
打开编译工具
通过AutoHotkey Dash→ 选择Compile。 -
选择源文件
- Source:选择
Thread\Work.ahk文件。
- Source:选择
-
设置输出路径
- Destination:设置为
Thread目录下的Work.exe。
- Destination:设置为
运行 RMT.ahk
直接双击 RMT.ahk 文件即可运行。