2017-09-13 12 views
3

Mac에서 동일한 앱의 인스턴스 또는 여러 복사본을 실행할 수 있습니다. 그러나 AppleScript는 개별적으로 식별 할 수 없습니다. 내 응용 프로그램이 "FileMaker Pro"이고 여러 사본이 실행 중이라고 가정 해보십시오. AppleScript가 "FileMaker Pro"를 종료했다는 말을 듣고 실행 한 첫 번째 파일을 종료합니다. 종료하지 않을 수도 있습니다.AppleScript, 안전하게 ID로 앱 종료

먼저 프론트 엔드 응용 프로그램을 식별 한 다음 다른 응용 프로그램 (앞뒤로 다른 응용 프로그램을 가져올 수 있음)을 작성한 스크립트를 작성한 다음 처음에 확인한 원래 프론트 엔드 응용 프로그램을 완전히 종료하십시오.

나는 내가 프로세스 ID에 의해 전면에있는 응용 프로그램을 식별 제안을 발견 한 후

이 쉘 스크립트를 수행했던 일부 인터넷 검색을 "죽일 ..."

하지만에서

I "kill"이 변경 사항 등을 저장하도록 요청하지 않는다는 것을 알릴 수 있습니다. ").

이 스크립트가 AppleScript 종료 명령을 정확히 수행하거나 파일 메뉴에서 수동으로 종료를 선택하도록합니다. 변경 사항을 저장할지 묻는 지 포함하여 다른 것.

이것이 가능합니까? 그렇다면 어떻게?

+0

이름 대신 유닉스 ID를 사용해도 AppleScript는 응용 프로그램의 마지막으로 열린 인스턴스를 항상 주소 지정합니다. 해결 방법은 응용 프로그램 내부에서 이름을 FM1, FM2로 변경하는 것일 수 있지만 FileMaker와 같은 표준 응용 프로그램에서는 확실히 다른 문제가 발생합니다. 그런 다음 Filemaker의 첫 번째 인스턴스를 종료하려면이 첫 번째 인스턴스 다음에 열린 다른 모든 인스턴스를 먼저 올바르게 종료해야합니다. 끝내려면 "시스템 이벤트"블록에서 {command down}을 사용하여 키 스트로크 q를 사용하십시오. – pbell

답변

2

응용 프로그램 복사본 : 이름 대신 응용 프로그램 경로를 사용하면 가능합니다.

tell application "System Events" 
    tell (first application process whose frontmost is true) 
     set x to its application file -- get the path of this application (the result is an alias of "System Events") 
    end tell 
    set thisAppPath to path of x -- get the path (a string) 
end tell 

--- *** go off and do some other stuff **** 
--- 


--- SAFELY quit the original frontmost application that it identified at the start. 
tell application thisAppPath -- the path must be a string 
    try -- *** use 0 to no limit *** 
     with timeout of 240 seconds -- a time limit is given to the user to save changes, etc. 
      quit 
     end timeout 
    on error -- (timeout error): the user do nothing because the application is still open 
     -- do something 
    end try 
end tell 
-- 
-- script after the application quits 
-- 
+0

'set x 대신'string '으로 응용 프로그램 파일에'set thisAppPath '를 사용하고'set thisAppPath to x of path'를 제거하지 않는 이유는 무엇입니까? – user3439894

+0

@ user3439894이 오류가 발생했기 때문에 ** 오류 "응용 프로그램 \ Safari.app : \"응용 프로그램 \ "시스템 이벤트 \"의 별칭을 "Macintosh HD : 응용 프로그램 : \"형식 문자열로 만들 수 없습니다. " 별칭 "Macintosh HD : 응용 프로그램 : Safari.app :"에서 -1700으로 문자열 **. 차이점은 AppleScript의 별칭이 아니라 "시스템 이벤트"의 별칭입니다. 한 줄을 선호한다면'응용 프로그램 파일의 경로로 thisAppPath 설정 ' – jackjr300

+0

그래, 내가 일반적으로 실행하는 OS X 10.8.5에서는 괜찮 았지만, macOS에서는 잘 작동한다고 제안했다. 10.12.5 작동하지 않습니다. 당신의'thisAppPath를 (그 응용 프로그램 파일) 경로로 설정하십시오 '는 macOS 10.12.5에서 작동합니다. 어느 쪽이든 좋은 대답 +1! :) – user3439894