
























AutoHotkey v2 的源码结构清晰,建议按以下路径逐步深入:
1. 从顶层目录结构开始
AutoHotkey/
├── source/ ← 核心源码目录
│ ├── script.h/.cpp # 脚本解析器
│ ├── script2.cpp # 内置命令实现
│ ├── script_func_impl.h/.cpp # 函数实现
│ ├── window.h/.cpp # GUI/窗口管理
│ ├── keyboard_mouse.h/.cpp # 热键/热字串输入处理
│ ├── globaldata.h/.cpp # 全局状态
│ ├── application.h/.cpp # 主程序入口
│ └── ...
├── source_v1/ # v1 兼容层(可跳过)
└── 其他构建文件
2. 先看 source/application.cpp
WinMain),理解初始化流程3. 再看 source/globaldata.h 和 source/globaldata.cpp
g_script, g_array 等线程结构)4. source/script.h — 核心头文件
这是整个项目的"地图",包含:
Script 类:脚本加载、解析、执行Line / Label / Func 结构:脚本元素的内存表示5. source/script.cpp — 脚本解析
::hotkey::)的识别6. source/script2.cpp — 内置命令
BIF_(Built-In Function)函数BIF_MsgBox, BIF_Send 等7. 热键/输入系统:source/keyboard_mouse.cpp
SetWindowsHookEx)的安装8. 表达式引擎:source/ExprEval.cpp(或类似文件)
9. 对象系统:source/Object.h/.cpp
Array, Map, Object 的实现__Call, __Get, __Set)的派发| 专题 | 对应文件 |
|---|---|
| GUI 系统 | source/window.h/.cpp, source/gui.h/.cpp |
| COM/DllCall | source/script_com.h/.cpp |
| 文件/注册表操作 | source/script2.cpp 中相关 BIF |
| 线程与中断 | source/globaldata.h, source/MsgSleep() 相关 |
| 注册回调(你之前看的) | source/script_func_impl.h 中的 CallbackCreate |
1. source/application.cpp ← 入口,了解程序生命周期
2. source/globaldata.h ← 全局状态,理解线程结构
3. source/script.h ← 核心数据结构总览
4. source/script.cpp ← 脚本解析流程(选读 LoadFromFile 等关键函数)
5. source/script2.cpp ← 挑熟悉的命令读实现(如 Send, MsgBox, Sleep)
6. source/keyboard_mouse.cpp ← 热键机制(从 SetWindowsHookEx 开始追踪)
BIF_Sleep → 追踪 Sleep() 的调用WinMain 或某个 BIF 函数下断点,单步执行AutoHotkey 使用 Visual Studio 解决方案文件(.sln),直接打开即可编译。建议:
OutputDebug 输出),验证改动生效尝试回答:当用户按下 ^a::MsgBox "Hello" 时,代码执行路径是什么?
答案线索:
keyboard_mouse.cpp → 钩子回调收到 Ctrl+ALine 结构MsgSleep() 或线程调度 → 创建新线程执行script.cpp → 执行 Line 的 Action 字段BIF_MsgBox(在 script2.cpp 或 script_func_impl.h 中)按照这个路径,你就能把分散在多个文件中的机制串联起来。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。