在 AutoHotkey 脚本中使用条件或

在 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 服务器和使用该mysqld.exe进程的 MySQL 数据库。在 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。如果 设置ErrorLevel0,则查找mysqld.exe

相关内容