跳到主要内容
版本:最新版

🛠️ 开发指南(RMT)

本文档概述了 RMT(若梦兔)按键宏工具的模块架构与功能,方便开发者快速理解项目结构与功能。


📂 项目总体架构

用户操作 / 热键触发

BindUtil.ahk (热键路由)

MacroUtil.ahk.OnTriggerMacroOnce (指令解析 & 分发)

ExecuteMacroCmdOnce (单条指令执行)
├─ 键盘/鼠标/手柄模拟
├─ 图片识别 (OpenCV)
├─ 文字识别 (RapidOcr)
├─ 循环/条件判断
├─ 运行程序/脚本
└─ 其他指令...
支持多线程: WorkPool.ahk → Thread/Work.exe (独立进程)

📂 主程序入口

RMT.ahk

程序的主入口,负责初始化与启动。

初始化流程:

  1. SelfCheckMissingFiles() — 文件完整性自检(开发阶段注释掉)
  2. InitFilePath() — 初始化文件路径(配置文件、日志等)
  3. LoadCurMacroSetting() — 加载用户配置文件
  4. HandleOpenArg() — 处理打开软件的参数
  5. EditListen() — 滚轮按键监听
  6. InitData() — 初始化软件内部数据缓存
  7. InitUI() — 初始化主界面 UI
  8. SetEditData() — 缓存编辑器数据
  9. PluginInit() — 初始化插件(耗时较长,放后面)
  10. TimingCheck() — 轮询检测定时触发
  11. BindKey() — 绑定全局快捷键

🧠 核心模块 (Main/)

GlobalUtil.ahk

功能概述: 全局变量声明与模块引用中心。通过 #Include 串联所有核心模块和 GUI 模块。

职责内容:

  • 声明 MySoftDataMainSoftData 等全局变量
  • #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_8F4FlodInfoCompatEnsureArrLength)。主程序与 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.ahkUI 宏编辑
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.ahkRMT 命令

🧵 线程 Worker (Thread/)

文件说明
Work.ahk工作脚本入口,编译为 Work.exe 用于并行执行宏
WorkUtil.ahkWorker 工具函数(初始化、指令执行、通信)
WorkGlobalUtil.ahkWorker 全局配置与变量声明

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 为例)

如果你想新增指令,请参考以下流程:

  1. 新增数据保存文件路径
    AssetUtil.ahkInitFilePath 函数中添加:

    global OpenSourceFile := A_WorkingDir "\Setting\OpenSourceSettings.ini"
  2. 定义指令数据结构
    DataClass.ahk 中新增结构体 OpenSourceData,类似已有的 RunData
    重点字段:

    • SerialStr — 指令序列化标识,必须唯一,用于区分不同指令。
    • 其他参数根据指令需求定义。
  3. 新增指令编辑界面

    • 复制现有的 Gui/RunGui.ahk,重命名为 Gui/OpenSourceGui.ahk
    • GetCMDSerialStr("运行") 改成 GetCMDSerialStr("开源")
    • 根据指令参数调整 AddGui() 和相关接口,确保界面能编辑对应参数。
  4. 添加指令按钮入口

    • Gui/MacroEditGui.ahk 中新增按钮,调用 OpenSourceGui.ahk 以打开编辑界面。
    • 参考已有"文件"按钮实现。
  5. 实现指令执行逻辑

    • Main/Util/MacroUtil.ahkExecuteMacroCmdOnce() 中添加 Actions 映射:
      "开源", OnOpenSource,
    • 实现 OnOpenSource() 函数,复杂指令参考"按键"指令,简单指令参考"文件"指令。

🚀 Debug 运行测试

编译 Work.ahk

如果调整会对 Work.ahk 有影响,需要先重新编译: 如果重新编译觉得麻烦,也可以临时把多线程改成 0。

  1. 清理旧文件
    删除 Thread 目录下所有的 .exe 文件(或删除后运行时会自动重新生成)。

  2. 打开编译工具
    通过 AutoHotkey Dash → 选择 Compile

  3. 选择源文件

    • Source:选择 Thread\Work.ahk 文件。
  4. 设置输出路径

    • Destination:设置为 Thread 目录下的 Work.exe

运行 RMT.ahk

直接双击 RMT.ahk 文件即可运行。