スクリプトの起動を妨げる構文エラーは、ダイアログを表示するのではなく、標準エラーストリーム(stderr)に送信します。
#ErrorStdOut Encoding
If omitted, it defaults to CP0 (the system default ANSI code page). Otherwise, specify an encoding string indicating how to encode the output. 例えば、#ErrorStdOut "UTF-8"
は、エラーメッセージをUTF-8にエンコードしてからstderrに送ります。出力をキャプチャするプログラムは、UTF-8をサポートしている必要があり、場合によってはUTF-8を期待するように設定する必要があることもあります。
注:このパラメータは式ではなく、引用符(「シングル」または「ダブル」のいずれか)で囲むことができます。
If this directive is unspecified in the script, any syntax error is displayed in a dialog.
エラーは標準出力ではなく、標準エラーに書き込まれます。コマンドプロンプトやファンシーエディターでは、通常両方表示されます。
これにより、TextPad、SciTE、Crimson、EditPlusなどの高級エディタは、シンタックスエラーが発生したときに問題のある行にジャンプすることができます。#ErrorStdOutディレクティブはすべてのスクリプトに追加する必要があるため、通常はAutoHotkeyスクリプトを起動する際にコマンドラインスイッチ /ErrorStdOutを使用するようにエディタを設定する方がよいでしょう(設定方法は以下をご覧ください)。
AutoHotkeyはコンソールプログラムではないので、コマンドプロンプトに直接エラーが表示されることはありません。これは、1)Ahk2Exe ConsoleAppディレクティブでスクリプトをコンパイルするか、2)パイプやリダイレクトでスクリプトの出力をキャプチャすることで回避することができます。事例:
"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>&1 |more "C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>"Syntax-Error Log.txt"
また、オペレーティングシステムに内蔵されたクリップコマンドを使用すれば、出力を直接クリップボードにパイプすることができます。事例:
"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" 2>&1 |clip
注: 2>&1
はstderrをstdoutにリダイレクトさせ、2>Filename
は、stderrのみをファイルにリダイレクトさせる。
他のディレクティブと同様に、#ErrorStdOutは条件付きで実行することはできません。
EditPlus:
C:\Program Files\AutoHotkey\AutoHotkey.exe
/ErrorStdOut "$(FilePath)"
$(FileDir)
TextPad:
C:\Windows\System32\cmd.exe
-- を入力したのち、OKを推してください。cmd.exe
(またはそのフルパス)/c ""C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "$File""
$FileDir
FileAppend(標準エラーまたは標準アウトにテキストを送信することもできるため)