Используйте OR с условием в скрипте AutoHotkey

Используйте OR с условием в скрипте AutoHotkey

Я создал следующий скрипт 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, так и базу данных MySQL, которая использует этот mysqld.exeпроцесс. В сценарии, когда Apache выключен, но MySQL включен, похоже, что логика скрипта не сработает, поэтому я хотел бы исправить эту строку:

Process, Exist, httpd.exe

...чтобы проверить наличиеили httpd.exeили mysqld.exe.

В AHK есть оператор OR, для которого можно использовать либо , orлибо ||, но при этом:

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

...просто пытается запустить серверы (т.е. запускает первый блок кода, указывая на ошибку в логике и/или синтаксисе). Другими словами, не похоже, что OR можно использовать вместе с условием вроде Process, Exist.

Возможно ли это с AHK?

решение1

В IFвыражении AHK использует оператор or(Документация). Вы можете вызвать 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.

Связанный контент