吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4235|回复: 5
收起左侧

[其他原创] [AutoHotKey]艰难自学之:#Include命令求解

[复制链接]
laozhhaiJohn 发表于 2021-3-22 19:44
本帖最后由 laozhhaiJohn 于 2021-3-22 20:01 编辑

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


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


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


三、手册原文引用如下:
Image 001.gif


来自 <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] 纯文本查看 复制代码
;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命令而直接引用函数名的情况.
屏幕截图 2021-03-22 194936.png

免费评分

参与人数 4吾爱币 +9 热心值 +4 收起 理由
xihua + 1 谢谢@Thanks!
求学的稳健少年 + 1 + 1 谢谢@Thanks!
gaoyonggang66 + 1 + 1 热心回复!
苏紫方璇 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gaoyonggang66 发表于 2021-3-22 20:17
很牛&#128046;&#128046;&#128046;&#128046;佩服
iphuter 发表于 2021-3-22 20:22
silverkey 发表于 2021-3-22 20:47
这手册都写这样了,还有啥疑问啊,可以百度下绝对路径
zgydsy 发表于 2021-3-22 21:10
可以说是十分励志了
我真的爱发明 发表于 2021-12-4 10:29
为什么说直接引用非常浪费时间呢?
lff283 发表于 2022-11-8 11:44
加油.好好学习天天向上
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表