AutoHotKey]艰难自学之:#Include命令求解【转载】

[AutoHotKey]艰难自学之:#Include命令求解


一、前言:
  上一篇帖子得到版主和网友的鼓励,感到十分荣幸,同时也深感自身水平的有限,今后继续努力学习。


二、问题:
在上一篇帖子中,代码行标号为16的语句为:
#Include lib\lib.ahk  ;包含入主函数库文件
意思是将脚本所在项目目录中的lib子目录中的lib.ahk文件包含到脚本中。
后来我无意中将脚本拷贝到虚拟盘s:\运行,结果报错。于是注意到#Include命令需要再次深入学习。


三、手册原文引用如下:
AutoHotKey]艰难自学之:#Include命令求解【转载】

来自 <https://wyagd001.github.io/zh-cn/docs/commands/_Include.htm>

四、手册看完后还是一头雾水。
结果在官方论坛找到网友的一片短文介绍如下:

本文的内容也可以直接阅读帮助文档中的 Libraries of Functions 部分获得。

对于函数库目录的用法,由于我没有仔细看帮助文件,我是在接触了 AHK 很久很久之后才陆续在实践中学习到的。。
好了,以下是正文。

引用外部文件最普通的方法是:
#Include 测试.ahk
不在脚本目录的则用完整路径,例如:
#Include d:\test\测试.ahk

但是如果你要经常某个引用外部文件,或者要引用很多外部文件,上面的方法非常浪费时间。这时候可以用函数库目录

函数库目录 可以建立在三个位置:

  • 脚本所在目录\Lib\
  • 我的文档路径\AutoHotkey\Lib\ ; %A_MyDocuments%\AutoHotkey\Lib\
  • AutoHotkey.exe 所在路径\Lib\

例如把“ahkscript.ahk”放到上面其中的一个 Lib 文件夹中,脚本中就可以直接调用跟文件名相同名称的函数 ahkscript() 或者以文件名为前缀的函数,例如 ahkscript_login(),而无需写 #Include 语句。

如果函数名与文件名不相同,用 #Include 也可以不需要输入路径,#Include <ahkscript> 即可。
来自:<https://www.autohotkey.com/boards/viewtopic.php?f=29&t=8906>

五、试验:
还是上代码:

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
;SetWorkingDir, %A_ScriptDir%  ;将脚本所在目录设置为工作目录,先注释掉
当前默认工作目录 := A_WorkingDir  ;在调试中查看可知,当前默认工作目录的值为 s:\
 
;;;下面练习使用include命令1
mydir := % ahk目录 . "lib\myLib.ahk"  ;目标是"d:\Program Files\AutoHotkey\lib\myLib.ahk"
;;;__________以下试验的环境:  脚本文件在s:\, 默认的工作目录也是s:\
;;;__________程序目录和函数库文件d:\Program Files\AutoHotkey\Lib\myLib.ahk文件
;;;__________我的项目目录和函数库文件:d:\Program Files\AutoHotkey\myVSCode\Lib\Lib.ahk
;;;###以下用法错误
;#Include mydir     ;结果是"s:\mydir",错误
;#Include %mydir%   ;结果是"s:\%mydir%",错误
;#Include % mydir   ;结果是"s:\% mydir",错误
;#Include Lib       ;结果是"s:\Lib"错误
;#Include myLib.ahk    ;结果是"s:\myLib.ahk",错误
;#Include <myLib.ahk>  ;这个文件在"程序\lib"目录中,结果是函数库没找到,错误
;#Include <d:\Program Files\AutoHotkey\myVSCode\Lib\Lib.ahk> ;文件在该位置,结果是函数库未找到,错误
 
;;;###以下用法正确!!
;#Include <myLib> ;库文件不能加扩展名!!!同时放到ahk程序目录下\lib内,  结果正确
;#Include <Lib>   ;将"程序\lib"目录下myLib.ahk文件改名为lib.ahk,  结果正确
 
;;;下面练习使用include命令2
;;;__________以下试验的环境:  脚本文件在s:\,默认的工作目录也是s:\
;;;__________建立目录并拷贝文件到:s:\lib\myslibLib.ahk, 以及: s:\sdirlib.ahk
;;;__________为了排除ahk程序文件库目录和库函数文件,特改名如下:
;;;__________程序目录和函数库文件改名为: d:\Program Files\AutoHotkey\wodeLib\wodemyLib.ahk
;;;__________我的项目目录和函数库文件不变:d:\Program Files\AutoHotkey\myVSCode\Lib\Lib.ahk
;;;###以下用法错误
;#Include <sdirlib>  ;结果为库函数找不到,错误
;#Include <sdirlib.ahk>  ;结果为库函数找不到,错误
;#Include <myslibLib.ahk> ;结果为库函数找不到,错误
;#Include myslibLib.ahk  ;结果为"s:\myslibLib.ahk"无法打开,错误
 
;;;###以下用法正确!!
;#Include sdirlib.ahk    ;结果正确,文件与脚本同目录
;#Include <myslibLib>   ;结果正确,文件在脚本目录下的\lib目录内
 
;;;下面练习使用include命令3, 通过改变默认工作目录用include命令
;;;__________以下试验的环境:  脚本文件在s:\, 默认工作目录为s:\,但下面将进行更改
;;;__________程序目录和函数库为: d:\Program Files\AutoHotkey\wodeLib\wodemyLib.ahk
;;;__________我的项目目录和函数库:d:\Program Files\AutoHotkey\myVSCode\Lib\Lib.ahk
;  先改变默认工作目录
截取位置 := InStr(A_AhkPath,"\",,0)
ahk目录 := SubStr(A_AhkPath,1,截取位置) . "wodeLib"
SetWorkingDir, %ahk目录%  ;将ahk程序目录设置为工作目录
;注意:SetWorkingDir对#Include没有效果, 因为#Include是在脚本开始执行之前处理的.这是帮助手册原话
;;;###以下用法错误
;#Include  <wodemyLib>  ;结果为库文件找不到
;#Include  wodemyLib.ahk  ;结果为"s:\wodemyLib.ahk"找不到,说明改工作目录确实对includ命令无效
 
;;;###以下用法正确!!
;#Include d:\Program Files\AutoHotkey\wodeLib\wodemyLib.ahk
 
;;;__________结论__________
;;;#Include命令写法有3种方式:
;;;1\是在ahk程序或者脚本目录,建立"\lib"目录(用其他目录名不可以), 库文件放其中,
;;;命令写法为:“  #Include  <>  ” , 在<>中写库函数文件名,但不可带扩展名
;;;2\是与脚本同目录,也就是脚本在当前工作目录
;;;命令写法为:“  #Include  文件名.ahk  ” , 函数库文件名必须带扩展名
;;;3\用绝对路径和文件名.
;#Include d:\Program Files\AutoHotkey\myVSCode\Lib\Lib.ahk ;绝对路径结果正确
;#Include d:\Program Files\AutoHotkey\Lib\myLib.ahk ;绝对路径结果正确

    注意,如果试验上述代码的话,试验哪句,就把哪句前面的“;”去掉,实验完这句后再加上.结论在代码的最后几行.
    注意,这里仅仅试验手册和网友文章所说包含函数库文件,没有涉及试验不使用#includ命令而直接引用函数名的情况.

给TA捐赠
共{{data.count}}人
人已捐赠
其他

求助大佬帮我看下正文代码的问题

2023-12-21 16:11:36

其他

如何备份已经安装并设置AutoHotkey脚本编程环境的Windows电脑系统分区 2024.01.22

2024-1-22 22:42:51

2 条回复 A文章作者 M管理员
  1. iadngos

    谢谢分享!

  2. dbgba

    SetWorkingDir %A_ScriptDir%
    #Include %A_ScriptDir%FindText.ahk

    或者

    #Include

    我是这两种写法居多

个人中心
购物车
优惠劵
有新私信 私信列表
搜索