LoginSignup
5
3

More than 5 years have passed since last update.

[AutoHotKey]#Includeに関する覚書

Last updated at Posted at 2018-06-16

インクルード元:#Includeって書いてある方
インクルード先:#Include hoge.ahkのhoge.ahk
とする。

基本

#Include / #IncludeAgainは、スクリプトが実行される前の解析の段階で実行される。
スクリプトが実行されるときには、あたかも#Includeが書かれたところに指定されたスクリプトファイルの内容が書かれているかのようになる。

つまり、仮想的に単一のスクリプトファイルを生成した上で実行されるということ。

実行される段階では、インクルード先のファイルは存在していない。インクルード元のファイルしか存在しない。

組み込み変数A_ScriptPathが参照するパスはどこ?

よって、これはインクルード元のスクリプトファイルになる。A_ScriptDirとかも同じ。

しかしながら、特にFileReadとかで外部ファイルから何かを読み込みたい場合などは、対象ファイルをインクルード先からの相対パスで指定したい場合もあるはず。
そのような場合は、組み込み変数A_LineFileによって、実行中の行が記述されたファイルのパスを得ることができる。
これをSplitPathすれば、インクルード先ファイルが存在するディレクトリのパスも得ることができる。

Auto-executeセクションとの関係

Auto-executeセクションについては下記を参照。

スクリプトが読み込まれると、最初にReturnかExitあるいはホットキーラベルが現れるか、スクリプトの終わりに達するまでが実行される。
この部分のことを、Auto-executeセクションと呼ぶ。

ホットキーラベルや#Persistent指令、Lock系キーの固定などで常駐状態にされない場合、Auto-executeセクションが終了したらスクリプトは終了する。

#Includeを含むスクリプトにおいては、インクルード実行後にこれが判定される。

つまり、Auto-executeセクションにおいて、#Includeの後に、まだAuto-executeセクションが続く(別の#Includeも含む)場合、インクルード先ファイルの末尾にReturn/Exit/ExitAppを書いてはならない。もちろんホットキーラベルも同様。
最初のReturn/Exitないしはホットキーが現れた時点で、Auto-executeセクションが終了し、続く処理は行われなくなってしまうのだ。

言い換えれば、インクルード先のファイルにおいては、「Auto-executeセクションで実行されるべき処理」と「Auto-executeセクション以外で実行されるべき処理」を両方書くべきではない。
(唯一許容されるのは、「境目」に該当するファイルということになる。)

よって、望ましい#Includeの書き方は以下のようになる。

; ファイル先頭からAuto-executeセクションが開始

; Auto-executeセクションで実行したい処理を書く
SetTitleMatchMode, 2

; Auto-executeセクションで実行したいファイルをインクルードする
#Include AutoExec1.ahk
#Include AutoExec2.ahk

; Auto-executeセクションの終了(省略可)
Exit

; ホットキー等のファイルをインクルードする
#Include HotKey.ahk
#Include HotString.ahk
#Include SubRoutineLabel.ahk
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3