現在実行中のスクリプトのインスタンスを新しいものに置き換えます。
Reload
この機能は、頻繁に変更されるスクリプトに有効です。この機能にホットキーを割り当てることで、エディターで変更内容を保存した後、簡単にスクリプトを再起動することができます。
デフォルトでは、スクリプトはトレイアイコンまたはメインウィンドウから再読み込みすることも可能です。
スクリプトの現在のインスタンスに/includeスイッチが渡された場合、新しいインスタンスにも自動的に渡されます。
スクリプトの現在のインスタンスに渡された他のコマンドラインパラメータは、新しいインスタンスに渡されません。このようなパラメータを渡すには、Reloadを使用しないでください。代わりに、A_AhkPathと A_ScriptFullPath(およびスクリプトがコンパイルされた状態で使用される場合はA_IsCompiled)と組み合わせてRunを使用します。また、最初のパラメータとして(つまり実行ファイル名の後に)文字列/restart
を含めることで、Reloadと同じ動作をするようプログラムに指示します。こちらも参照のこと:コマンドラインスイッチとシンタックス。
スクリプトが再起動すると、元の作業ディレクトリ(最初に起動したときに有効だったもの)で起動します。言い換えれば、SetWorkingDirは、新しいインスタンスに使用される作業ディレクトリを変更しません。
スクリプトを再読み込みできない場合(構文エラーなど)、スクリプトの元のインスタンスが実行され続けます。したがって、リロード関数の後には、失敗した場合に実行したい動作(現在のサブルーチンを終了するためのreturn)などを記述する必要があります。元のインスタンスに障害を検出させるには、この例に従います:
Reload Sleep 1000 ; 成功したときは、reload関数はこのインスタンスをSleep関数の実行中に閉じ、以下の行は実行されません。 Result := MsgBox("The script could not be reloaded. Would you like to open it for editing?",, 4) if Result = "Yes" Edit return
以前のスクリプトのインスタンスは、#SingleInstanceと同じメカニズムで識別され、同じ制限があります。
スクリプトが複数のインスタンスを許可している場合、Reloadが正しいインスタンスを識別できないことがあります。最も簡単な方法は、新しいインスタンスを実行し、終了することです。事例:
if A_IsCompiled Run Format('"{1}" /force', A_ScriptFullPath) else Run Format('"{1}" /force "{2}"', A_AhkPath, A_ScriptFullPath) ExitApp