내 질문에 답하기 위해 다음 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
.
or
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
.