我创建了以下 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
。如果 设置ErrorLevel
为0
,则查找mysqld.exe
。