什么是 #Include 指令?
#Include 是 AutoHotkey 实现代码模块化、复用和组织的重要命令。它可以帮助你将代码拆分为多个文件,便于管理和维护,同时还能加载强大的第三方库扩展脚本功能。在使用时注意路径问题和函数命名冲突,就能充分发挥 #Include 的优势。
使用 #Include 的基本语法 和 文件路径的解释
以下按推荐顺序来解释3种路径写法的不同之处,推荐分先后顺序,但是你需要了解3种用法便于看懂别人代码的引用。
一、本地库 和 标准库 写法,例如 #Include <FindText>
1、本地库 适用于项目模块化管理。将类库文件(例如:FindText.ahk)存放在脚本文件所在目录的 Lib 文件夹中,主脚本运行时会自动识别。避免了主脚本中包含几十上百K的函数库内容,便于将主逻辑和函数库分离,提高可读性和可维护性。

使用 #Include 加载第三方函数库,例如 FindText.ahk、 Gdip.ahk 等,用于扩展 AutoHotkey 的功能。
; 主脚本内容如下: #Include <FindText> ; FindText全屏截图 FindText().SavePic(A_Desktop "\FindText全屏截图.bmp", 0, 0, A_ScreenWidth, A_ScreenHeight) Return
2、标准库 是存放在 AHK 安装目录的 Lib 文件夹中的脚本类库。这些类库也可通过 #Include <类库名> 语法直接调用。
标准库路径:通常,标准库的路径为 AHK 安装目录下的 Lib 文件夹 (C:\Program Files\AutoHotkey\Lib)

将类库文件(例如:FindText.ahk)标准库路径后,通过标准库加载时,文件名就可省略掉路径,直接用尖括号 <类库名>。
; 主脚本内容如下:【和本地库用法一致】 #Include <FindText> ; FindText全屏截图 FindText().SavePic(A_Desktop "\FindText全屏截图.bmp", 0, 0, A_ScreenWidth, A_ScreenHeight) Return
标准库高级技巧:
如下代码所示,在AHKv1版中如果调用FindText(),#Include又不存在时。脚本会在标准库中搜索名为 "FindText.ahk" 的文件,如果标准库中有与函数同名的.ahk类库时,下面这段代码无需写 #Include 语句也能自动加载并截图成功。更多细节详见
; FindText全屏截图 FindText().SavePic(A_Desktop "\FindText全屏截图.bmp", 0, 0, A_ScreenWidth, A_ScreenHeight) Return
二、路径写法 例如 #Include C:\MyScripts\FindText.ahk
路径写法可以是绝对路径或相对于当前脚本的相对路径。它指定了要加载包含的文件路径。例如:
#Include C:\MyScripts\FindText.ahk ; 绝对路径 #Include %A_ScriptDir%\Lib\FindText.ahk ; 相对路径1 #Include .\Lib\FindText.ahk ; 相对路径2【等效于上条】
当脚本运行时,#Include 会将目标文件的代码内容加载到当前位置。
使用 #Include 的注意事项
- 路径解析规则
-
- 如果使用相对路径,路径是相对于当前脚本所在的目录,而非运行时的工作目录。
- 可使用
A_ScriptDir内置变量获取当前脚本目录,确保路径解析正确。【受 SetWorkingDir %A_ScriptDir% 影响】
总结
#Include 是将指定文件的内容直接插入到当前脚本中。这样你就可以将不同的代码模块分开存储,并在多个脚本之间复用代码模块,组织脚本结构以及方便地共享公共函数或库。因此被包含的文件中的代码会被当作当前脚本的一部分。在编译时,也是会将#Include的脚本内容一同编译到exe之中。
一般#Include命令都是放在脚本头部的,这样做是方便阅读时查看这个脚本都调用了哪些库。但是有些Lib类库内容中不全是函数,一旦引用的类库包含了Return或者热键就会打断主脚本的正常运行。这种情况可将#Include命令写在主脚本的底部,避免不好的类库影响主脚本运行。
题外话:如果不想用#Include引用,可以把库复制到主脚本底部也行。但是像FindText这种很长的库,就会让主脚本看起来冗长而已。

评论(0)