#Include
是什么
一句话介绍:可以将一个脚本的代码插入到Include语句的位置。
作用
使用#Include
可以实现分模块开发,对于代码组织有十分重要的作用。
通常使用小型脚本(只有些热键和热字串)不需要使用;但当脚本不仅仅是这些,还要写ui界面或更繁杂的功能时,我们最好将ui和数据处理的逻辑分开。
下面是一个分模块的例子:
分别是:
- bin -> 编译后的脚本。
- cfg -> 配置脚本与配置文件。
- fs -> 文件读写脚本。
- handler -> 特定的数据处理。
- home -> 脚本产生的文件。
- res -> ui需要的资源。
- ui -> ui实现脚本。
- utils -> 使用的工具脚本,如一些数据结构,字符串处理。
- 启动脚本。
注意:这些并不通用,大部分是专门为脚本而设计的。
使用#Include
以上面的启动脚本PToolLauncher.ahk
为例子:
#Requires AutoHotkey v2.0
#SingleInstance Force
#Include ./ui/ui_planE.ahk
PlanEGui.Show({ theme: 'light' })
!0:: Reload
!Space::
{
static flag := false
flag ? PlanEGui.Show({ theme : 'light'}) : PlanEGui.Hide()
flag := !flag
}
!q:: ExitApp()
这个脚本只做些脚本指令配置(如单例启动)和ui脚本引入。
其中便是通过#Include
引入ui脚本,然后就像ui脚本出现在这一样,之后就可以调用里面的类和方法等。
使用时的注意点
使用#Include
并不会修正资源路径。
为更好的说明,请看下面的例子:
; 假设有这样的目录树
; ui
; |--a.ahk
; res
; |--light.png
; b.ahk
; 脚本一 a.ahk
Class MyGui extends Gui {
__New() {
this.AddPicture('yp h30 w50', ../res/light.png'))
}
}
; 脚本二 b.ahk
#Include ./ui/a.ahk
g := MyGui()
g.show()
如果运行b.ahk,则会报错,提示无法读取资源。
这是因为在b脚本中,资源引用的路径是基于b而言的,而这个路径本意是相对a的,所以当然会报错。
解决
如果写过nodeJs的就知道可以使用__dirname和Path.resolve()解决这个问题,所以我们写个类似的方法就行。
这将在后面实现。
标签:脚本,AHK2,ahk,flag,ui,light,UI,Include From: https://www.cnblogs.com/refiz/p/17651507.html