スクリプトコンパイラディレクティブにより、Ahk2Exeで、どのようにスクリプトをコンパイルするかの詳細を指定することができます。いくつかの特徴を挙げよう:
スクリプトコンパイラは、ソーススクリプト内の特別なコメントを探し、コンパイラディレクティブとして認識します。すべてのコンパイラディレクティブは@Ahk2Exe-
という文字列で始まり、その前にコメントフラグ (通常は;
) が付きます。
ディレクティブで囲むことによって、コンパイルされたスクリプトからコードセクションを削除することができる:
MsgBox "This message appears in both the compiled and uncompiled script" ;@Ahk2Exe-IgnoreBegin MsgBox "This message does NOT appear in the compiled script" ;@Ahk2Exe-IgnoreEnd MsgBox "This message appears in both the compiled and uncompiled script"
その逆も可能である。つまり、コンパイルされたスクリプトでのみ実行されるコードセクションをマークするのである:
/*@Ahk2Exe-Keep MsgBox "This message appears only in the compiled script" */ MsgBox "This message appears in both the compiled and uncompiled script"
これはA_IsCompiledよりも利点がある。なぜなら、前処理中にコンパイルされたスクリプトからコードが完全に取り除かれるため、コンパイルされたスクリプトが小さくなるからだ。逆もまた然りである:このコードは、コンパイルされていないスクリプトのコメント・ブロック内にあるので、A_IsCompiledをチェックする必要はない。
これらのディレクティブのパラメータでは、以下のエスケープシーケンスがサポートされています:``
、`,
、`n
、`r
、`t
。カンマは、パラメータの位置に関係なく、常にエスケープする必要がある。「整数」とは、符号なし16ビット整数(0~0xFFFF)を指す。
必要であれば、ディレクティブパラメータは、変数名を%
記号で囲むことによって、以下の標準組み込み変数のリストを参照することができます:
グループ1:A_AhkPath、A_AppData、A_AppDataCommon、A_ComputerName、A_ComSpec、A_Desktop、A_DesktopCommon、A_MyDocuments、A_ProgramFiles、A_Programs、A_ProgramsCommon、A_ScriptDir、A_ScriptFullPath、A_ScriptName、A_Space、A_StartMenu、A_StartMenuCommon、A_Startup、A_StartupCommon、A_Tab、A_Temp、A_UserName、A_WinDir。
グループ2:A_AhkVersion、A_IsCompiled、A_PtrSize。
これらの変数名に加えて、特殊変数A_WorkFileNameは、処理された.exeファイルの一時的な名前を保持する。これは、生成された .exe にアクセスする必要のあるPostExecディレクティブのパラメータとしてファイル名を渡すために使われます。
さらに、特別な変数A_BasePathは、選択されたベースファイルのフルパスと名前を含んでいる。
また、特殊変数A_PriorLineには、現在のコンパイラ指令の直前のソース行が格納される。空白やコメントだけの行は無視され、コンパイラ指令の行も無視される。この変数は、スクリプトのソースから定数情報を「抜き取り」、後のコンパイラのディレクティブで使用するために使うことができる。例えば、頻繁に変更される可能性のあるスクリプトのバージョン番号にアクセスするような場合である。この方法でバージョン番号にアクセスするということは、バージョン番号をソースコードの中で一度だけ変更すればよく、その変更は必要なディレクティブにコピーされるということです。(詳細は以下のRegExの例を参照。)
また、以下に説明するLetディレクティブとObeyディレクティブを使用して、特別なユーザー変数をU_Name
形式で作成することもできます。
すべての変数は、AddResourceディレクティブのパラメータとして利用できるだけでなく、以下のAddResourceディレクティブに与えられたRT_MENU、RT_DIALOG、RT_STRING、RT_ACCELERATORS、RT_HTML、RT_MANIFESTファイルからアクセスすることができます。
必要であれば、上記の変数から返される値は、組み込み変数名の末尾の%
より前に、チルダ~
で区切られた2つまでのパラメータ(p2とp3と呼ばれる)を含めることで操作できる。p2 と p3 パラメータは、RegExReplace関数の 2 番目と 3 番目のパラメータでリテラルとして使用され、返される値を操作します。(RegExクイックリファレンス参照。) p3はオプションであることに注意。
p2またはp3にチルダをデータとして含めるには、チルダの前にバックチック、すなわち`~
を付ける。バックティック文字をp2またはp3のデータとして含めるには、それをダブルにする``
。
%A_ScriptName~\.[^\.]+$~.exe%
これは、実際のスクリプト名では、拡張子とその前の完全停止を.exe
に置き換えます。
(\.[^\.]+$~.exe
は、.
の後に.
以外の文字が1文字以上続くか、文字列の末尾が.exe
であるかをスキャンし、.exe
に置き換えることを意味する)
ソース行に続いて、次のような2つのコンパイラ指令があるとする:
CodeVersion := "1.2.3.4", company := "My Company"
;@Ahk2Exe-Let U_version = %A_PriorLine~U)^(.+"){1}(.+)".*$~$2%
;@Ahk2Exe-Let U_company = %A_PriorLine~U)^(.+"){3}(.+)".*$~$2%
これらのディレクティブはバージョン番号1.2.3.4
を特殊変数U_version
にコピーし、会社名My Company
を特殊変数U_company
にコピーして、後で他のディレクティブで使えるようにします。
(最初の正規表現の{1}
は2番目の正規表現の{3}
に変更され、会社名を抽出するために3番目の"
の後を選択する。)
その他の例:ダウンロードして調べることができる他の実例は、ここから入手できる。
コンパイル済みの実行ファイルにリソースを追加する。(以下のUseResourceLangも参照)
;@Ahk2Exe-AddResource FileName , ResourceName
*type Filename
。省略された場合、Ahk2Exeはファイルの拡張子によって自動的にタイプを検出します。以下は、一般的な標準リソースタイプと、それをデフォルトでトリガーするエクステンションのリストです。
.bmp
、.dib
.cur
(未対応).ico
.htm
、.html
、.mht
.manifest
。リソース名が指定されていない場合、デフォルトは1
です例1:(メインアイコン以外の)標準アイコンを置き換える場合:
;@Ahk2Exe-AddResource Icon1.ico, 160 ; Replaces 'H on blue' ;@Ahk2Exe-AddResource Icon2.ico, 206 ; Replaces 'S on green' ;@Ahk2Exe-AddResource Icon3.ico, 207 ; Replaces 'H on red' ;@Ahk2Exe-AddResource Icon4.ico, 208 ; Replaces 'S on red'
例2:別のスクリプトを別のRCDATAリソースとして含める場合(「埋め込みスクリプト」を参照):
;@Ahk2Exe-AddResource MyScript1.ahk, #2 ;@Ahk2Exe-AddResource MyScript2.ahk, MYRESOURCE
このディレクティブで追加された各スクリプトは、コンパイラによって完全かつ個別に処理され、さらにディレクティブを含めることができることに注意してください。全体として競合するディレクティブがあれば、コンパイラが最後に見つけたものが使われる。
.exeファイルの生成に使用するAutoHotkeyのベースバージョンを指定します。このディレクティブは、GUIまたはCLIで指定されたベースファイルのパラメータによって上書きされる可能性があります。このディレクティブは、必要であれば何度でも指定できるが、トップレベルのスクリプトファイルでのみ指定する(つまり、#Includeファイルでは指定しない)。コンパイラは、Bin/Baseディレクティブが見つかるたびに少なくとも1回は実行されます。(このディレクティブに実際のコメントを付加する場合は、;
フラグを使用しなければならない。このディレクティブを本当にコメントアウトするには、最初のコメントフラグの後にスペースを挿入する。)
;@Ahk2Exe-Bin [Path\]Name , [Exe_path\][Name], Codepage ; Deprecated ;@Ahk2Exe-Base [Path\]Name , [Exe_path\][Name], Codepage
.bin
とみなされる。絶対パスが指定されていない場合、ファイルはコンパイラー自身のディレクトリにある(または相対的な)ものとみなされる。DOSマスクはNameに指定することができる。例えば、3 つすべてについては ANSI*
、Unicode 32*
、Unicode 64*
、または*bit
です。コンパイラーは、マッチした*.binまたは*.exeファイルごとに実行される。ビルトイン変数の置換は、上記グループ1のものでなければならない。.exe
に置き換えられます。パスが指定されていない場合、.exeはスクリプト・フォルダーに作成されます。名前を指定しない場合、.exeはデフォルトの名前になる。ビルトイン変数の置換は、上記グループ1のものでなければならない。(このパラメータはExeNameディレクティブで上書きすることができます。)実行サブシステムをコンソールモードに変更する。
;@Ahk2Exe-ConsoleApp
直前のディレクティブの継続行を指定する。これにより、長い行のディレクティブをソースコード上で読みやすいように書式設定することができます。
;@Ahk2Exe-Cont Text
Cont
キーワードに続く半角スペースの後に始まる。デバッグ用に、指定したテキストでメッセージボックスを表示する。
;@Ahk2Exe-Debug Text
%
記号の間に特別な変数を含める。生成される .exe ファイルの場所と名前を指定します。(Baseディレクティブも参照してください。) このディレクティブは、GUIやCLIで指定された出力ファイルによって上書きされることがあります。
;@Ahk2Exe-ExeName [Path\][Name]
.exe
に置き換えられます。パスが指定されていない場合、.exeはスクリプト・フォルダーに作成されます。名前を指定しない場合、.exeはデフォルトの名前になる。;@Ahk2Exe-Obey U_bits, = %A_PtrSize% * 8 ;@Ahk2Exe-Obey U_type, = "%A_IsUnicode%" ? "Unicode" : "ANSI" ;@Ahk2Exe-ExeName %A_ScriptName~\.[^\.]+$%_%U_type%_%U_bits%
組み込み変数(上記参照)と同様に、%U_Name%
でアクセスできる 1 つ以上のユーザー変数を作成(または変更)します。
;@Ahk2Exe-Let Name = Value , Name = Value, ...
U_
はあってもなくてもよい)。何もしない。
;@Ahk2Exe-Nop Text
Ver := A_AhkVersion "" ; If quoted literal not empty, do 'SetVersion' ;@Ahk2Exe-Obey U_V, = "%A_PriorLine~U)^(.+")(.*)".*$~$2%" ? "SetVersion" : "Nop" ;@Ahk2Exe-%U_V% %A_AhkVersion%%A_PriorLine~U)^(.+")(.*)".*$~$2%
U_Name
の結果を持つ、孤立した AutoHotkey コマンドまたは式に従います。
;@Ahk2Exe-Obey Name, CmdOrExp , Extra
U_
はあってもなくてもよい)。従えという命令や表現。
コマンド・フォーマットでは、出力変数(多くの場合、最初のパラメーター)としてNameを使用しなければならない。
;@Ahk2Exe-Obey U_date, FormatTime U_date`, R D2 T2
式の書式は=
で始まる必要があります。
;@Ahk2Exe-Obey U_type, = "%A_IsUnicode%" ? "Unicode" : "ANSI"
式はコマンド形式で書くことができる。
;@Ahk2Exe-Obey U_bits, U_bits := %A_PtrSize% * 8
必要であれば、複数のコマンドや式を`n
で区切ってください。
U_name
、U_name1
、U_name2
で返される。name
の値は、まず式やコマンドによって設定されなければならない。コンパイルに成功した後、.exeに圧縮が適用される前(または後)に実行されるプログラムを指定します。このディレクティブは何度も指定することができ、Whenパラメータで指定された適切なキューで、コンパイラが見つけた順番に実行される。
;@Ahk2Exe-PostExec Program [parameters] , When, WorkingDir, Hidden, IgnoreErrors
"%A_WorkFileName%"
のように、引用符で囲まれたパラメータとして特殊変数A_WorkFileNameを指定する。プログラムが.exeを変更した場合、変更された.exeは、プログラムによって%A_WorkFileName%
で指定された入力ファイルに戻される必要があります。(。exeにはバイナリデータが含まれることに注意。)(オプション) 圧縮が実行される前に実行する場合は空白のままにします。そうでない場合は、以下のように圧縮後に実行する数値を設定する:
例1:(最初の2つの例を使うには、まずBinMod.ahkをダウンロードし、ダウンロードしたスクリプトの指示に従ってコンパイルする)
この例は、生成された.exeから "AutoHotkey"への参照を削除し、コンパイルされたAutoHotkeyスクリプトであることを偽装するために使用できます:
;@Ahk2Exe-Obey U_au, = "%A_IsUnicode%" ? 2 : 1 ; Script ANSI or Unicode? ;@Ahk2Exe-PostExec "BinMod.exe" "%A_WorkFileName%" ;@Ahk2Exe-Cont "%U_au%2.>AUTOHOTKEY SCRIPT<. DATA "
例 2:UPX で圧縮された .exe をUPX -d
で解凍できないようにする例です:
;@Ahk2Exe-PostExec "BinMod.exe" "%A_WorkFileName%" ;@Ahk2Exe-Cont "11.UPX." "1.UPX!.", 2
(BinMod.ahkスクリプトには他にも例がある。)
例3:この例では、CLIまたはGUIで何も指定されていない場合に、コンパイルされたスクリプトで使用する圧縮を指定します。コンパイラが通常使用するデフォルト・パラメータを示す。
For MPRESS:
;@Ahk2Exe-PostExec "MPRESS.exe" "%A_WorkFileName%" -q -x, 0,, 1
For UPX:
;@Ahk2Exe-PostExec "UPX.exe" "%A_WorkFileName%" ;@Ahk2Exe-Cont -q --all-methods --compress-icons=0, 0,, 1
.exe ベースファイルを使用するコンパイルのメインスクリプトに使用する非標準のリソース ID を割り当てます(「埋め込みスクリプト」を参照)。このディレクティブは、GUIまたはCLIで指定されたリソースIDによって上書きされる。このディレクティブは、AddResourceディレクティブによって挿入されたスクリプトの中に現れると無視されます。
リソースID名前
コンパイルに使用されるカスタム EXE アイコンを上書きします。(他のアイコンを変更するには、AddResourceの例を参照のこと。) このディレクティブは、GUIまたはCLIで指定されたアイコンファイルによって上書きされることがある。The new icon might not be immediately visible in Windows Explorer if the compiled file existed before with a different icon, however the new icon can be shown by selecting Refresh Windows Icons
from the Ahk2Exe File
menu.
;@Ahk2Exe-SetMainIcon IcoFile
コンパイルされた実行ファイルのバージョン情報のプロパティを変更します。すべてのプロパティは、指定された順番に関係なく、アルファベット順に処理されることに注意してください。
;@Ahk2Exe-SetProp Value
変更するプロパティの名前。以下のいずれかに該当すること。
プロパティ | 説明 |
---|---|
CompanyName | 社名を変更する。 |
Copyright | 法的な著作権情報を変更します。 |
Description | ファイルの説明を変更します。Windows 8以上では、タスクマネージャの「プロセス」でスクリプトの名前も変更されます。 |
FileVersion | ファイルのバージョンを、テキスト形式と生のバイナリ形式の両方で変更します。(詳細は下記バージョンを参照。) |
InternalName | 内部名称を変更する。 |
Language | 言語コードを変更する。16進数には0x のプレフィックスが必要です。 |
LegalTrademarks | 法定商標情報を変更する。 |
Name | 製品名と内部名称を変更します。 |
OrigFilename | 元のファイル名情報を変更する。 |
ProductName | 商品名を変更します。 |
ProductVersion | 製品バージョンを、テキスト形式と生のバイナリ形式の両方で変更します。(詳細は下記バージョンを参照。) |
Version |
ファイルのバージョンと製品のバージョンを、テキスト形式と生のバイナリ形式の両方で変更します。 Ahk2Exe はバイナリのバージョンフィールドに、バージョンテキストの先頭に表示されるピリオドで区切られた数字(最大4つ)を入力します。未記入のフィールドはゼロに設定される。たとえば、 |
SetPropディレクティブでカバーされていない、 コンパイルされた実行ファイルのバージョン情報の その他の雑多なプロパティを変更する。すべてのプロパティは、指定された順番に関係なく、アルファベット順に処理されることに注意してください。本指令は特殊用途にのみ適用される。
;@Ahk2Exe-Set Prop, Value
.exe のマニフェストの詳細を変更します。本指令は特殊用途にのみ適用される。
;@Ahk2Exe-UpdateManifest RequireAdmin , Name, Version, UIAccess
AddResourceが使用するリソース言語を変更します。このディレクティブは位置指定であり、それに続くすべてのAddResourceディレクティブに影響します。
;@Ahk2Exe-UseResourceLang LangCode
0x
のプレフィックスが必要です。デフォルトのリソース言語はUS English (0x0409)です。