AutoHotkey 스크립트에서 조건과 함께 OR 사용

AutoHotkey 스크립트에서 조건과 함께 OR 사용

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

orAHK에는 OR 연산자가 있으며 이를 위해 or 를 사용할 수 있지만 ||다음을 수행합니다.

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

...그냥 서버를 시작하려고 시도합니다(예: 논리 및/또는 구문에 오류가 있음을 나타내는 첫 번째 코드 블록 실행). 즉, OR과 같은 조건을 함께 사용할 수는 없는 것 같습니다 Process, Exist.

AHK로 가능할까요?

답변1

표현식에서 IFAHK는 연산자 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.

관련 정보