AutoHotkey スクリプトで条件に OR を使用する

AutoHotkey スクリプトで条件に OR を使用する

私は自分の質問に答えるために次のAHKスクリプトを作成しましたここ:

NumpadEnter::
Process, Exist, httpd.exe
If ErrorLevel = 0
    {
    Run, C:\XAMPP\apache_start.bat,,Hide
    Run, C:\XAMPP\mysql_start.bat,,Hide
    }
Else
    {
    Run, C:\XAMPP\apache_stop.bat
    Run, C:\XAMPP\mysql_stop.bat
    Sleep, 2000
    Run, C:\XAMPP\apache_start.bat,,Hide
    Run, C:\XAMPP\mysql_start.bat,,Hide
    }
Return

ただし、スクリプトは完璧ではありません。現在、Apache プロセスの存在のみをチェックしますhttpd.exeが、XAMPP は Apache サーバーと、そのmysqld.exeプロセスを使用する MySQL データベースの両方を起動します。Apache がダウンしていても MySQL が起動しているシナリオでは、スクリプトのロジックが失敗すると思われるので、次の行を修正したいと思います。

Process, Exist, httpd.exe

...存在を確認するどちらか httpd.exeまたはmysqld.exe

orAHK には OR 演算子があり、または を使用できます||が、次のようにします。

Process, Exist, httpd.exe || mysqld.exe

...サーバーの起動を試行するだけです (つまり、コードの最初のブロックを実行し、ロジックや構文に障害があることを示します)。言い換えると、OR は のような条件と組み合わせて使用​​することはできないようですProcess, Exist

AHK でこれは可能ですか?

答え1

式ではIF、AHKは演算子orドキュメンテーション)。 を 2 回呼び出してProcess、そのたびに結果を保存し、どちらかが であるかどうかを確認できます0

Process, Exist, httpd.exe
errHTTPD := ErrorLevel
Process, Exist, mysqld.exe
errMYSQLD := ErrorLevel
If (errHTTPD = 0 or errMYSQLD = 0)
{
   ...
}
else
{
   ...
}

代わりに、あなたの質問に直接答えるわけではありませんが、あなたの特定のケースではうまくいくと思います:

Process, Exist, httpd.exe
IfEqual, ErrorLevel, 0
    Process, Exist, mysqld.exe

まず、 を確認しますhttpd.exe。 がErrorLevelに設定されたら0、 を探しますmysqld.exe

関連情報