Я создал следующий скрипт 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
.