#Include / #IncludeAgain

让脚本认为指定文件的内容会出现在这个准确的位置。

#Include FileOrDirName
#Include <LibName>
#IncludeAgain FileOrDirName

参数

FileOrDirName

文件或目录的路径,接着会详细说明。这里不能包含双引号、通配符和除 %A_ScriptDir%%A_AppData%%A_AppDataCommon% 及(在 v1.1.11+)%A_LineFile% 外的变量引用。不能使用除分号(`;)外的其他转义序列,也不需要使用它们,因为像百分号这样的字符会被当成原义处理。

File: 要包含的文件名, 如果未指定绝对路径, 则假定在启动/工作目录 (除了 ahk2exe, 它会假定文件在脚本自身目录). 注意:SetWorkingDir 对 #Include 没有效果,因为在脚本开始执行前已经处理了 #Include。

Directory: 指定目录而不是文件来改变后续所有的 #Include 和 FileInstall 使用的工作目录. 注意:用这种方式改变工作目录不会影响脚本启动时的初始工作目录 (A_WorkingDir)。要改变初始工作目录,请在脚本的顶部使用 SetWorkingDir

LibName

[AHK_L 57+]: 库文件或函数的名称. 例如, #include <lib>#include <lib_func> 都会包含某个 函数库文件夹 中的 lib.ahk.

备注

脚本认为包含文件的内容实际会出现在 #Include 指令的准确位置 (就好像从包含的文件中复制粘贴过来一样). 因此, 它通常不能把两个孤立的脚本合并成一个可运行的脚本 (要实现这样的效果, 请参阅 www.autohotkey.com/forum/topic18545.html).

#Include 确保仅包含 FileName 一次, 即使它遇到多次重复的包含. 与之相比, #IncludeAgain 允许多次包含同一文件, 其他方面则和 #Include 一样.

可以在 FileName 参数前加上 *i 和单个空格,这样会使程序忽略读取包含文件时出现的任何问题。例如:#Include *i SpecialOptions.ahk。此选项应该仅在包含文件的内容对主脚本的操作可有可无的情况下才使用.

通过 ListLines 或菜单 View->Lines 显示在主窗口的那些行总是按照它们在文件内的物理顺序编号的. 换句话说, 包含新文件只会改变主脚本文件的一行编号, 即 #Include 所在行 (除了 已编译脚本, 它会在编译时把它们包含的文件合并成一个大的脚本).

#Include 常用来加载在外部文件中定义的 函数. 和子程序标签不同, 可以在脚本的顶部包含 函数 而不影响 自动执行段.

与其他 # 指令类似, 不能根据条件执行 #Include. 换句话说, 这个例子不起作用:

if x = 1
    #Include SomeFile.ahk  ; 不管 x 的值是什么此行都会执行.
    y = 2  ; 而此行属于上面的 IF, 因为 # 指令不属于 IF.

通过调用 库函数 中的函数名称可以自动将文件包含进来 (即不需要使用 #Include).

[v1.1.11+]:使用%A_LineFile%\.. 可以引用包含当前文件的目录,即使当前文件不是主脚本文件也有效。例如,#Include %A_LineFile%\..\other.ahk

相关

函数库, 函数, FileInstall

示例

#Include C:\My Documents\Scripts\Utility Subroutines.ahk
#Include %A_ScriptDir%  ; 为后续的 #Include 和 FileInstall 改变工作目录.
#Include C:\My Scripts  ; 和上面相同, 不过这里指定明确的命名目录.