Verwenden Sie „ODER“ mit Bedingung im AutoHotkey-Skript

Verwenden Sie „ODER“ mit Bedingung im AutoHotkey-Skript

Ich habe das folgende AHK-Skript erstellt, um meine eigene Frage zu beantwortenHier:

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

Das Skript ist jedoch nicht perfekt – derzeit prüft es nur, ob der Apache-Prozess vorhanden ist httpd.exe, aber XAMPP startet sowohl den Apache-Server als auch die MySQL-Datenbank, die den mysqld.exeProzess verwendet. In dem Szenario, in dem Apache ausgefallen, MySQL jedoch aktiv ist, scheint die Logik des Skripts zu versagen, daher möchte ich diese Zeile korrigieren:

Process, Exist, httpd.exe

...zur Überprüfung der Existenz vonentweder httpd.exeoder mysqld.exe.

AHK hat einen ODER-Operator, für den Sie entweder oroder verwenden können ||. Gehen Sie dazu wie folgt vor:

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

...versucht lediglich, die Server zu starten (d. h. den ersten Codeblock auszuführen, was auf einen Fehler in der Logik und/oder Syntax hinweist). Mit anderen Worten, es scheint nicht so, als ob OR in Verbindung mit einer Bedingung wie verwendet werden kann Process, Exist.

Ist das mit der AHK möglich?

Antwort1

In einem IFAusdruck verwendet AHK den Operator or(Dokumentation). Sie könnten Processzweimal aufrufen, jedes Mal das Ergebnis speichern und dann prüfen, ob eines davon ist 0.

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

Eine Alternative, die Ihre Frage zwar nicht direkt beantwortet, von der ich aber glaube, dass sie in Ihrem speziellen Fall funktionieren wird:

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

Suchen Sie zunächst nach httpd.exe. Wenn dies der Fall ErrorLevelist 0, suchen Sie nach mysqld.exe.

verwandte Informationen