2009-09-24 7 views
4

어떻게 cooca에서 실행중인 다른 응용 프로그램을 종료 할 수 있습니다. iTunes가 실행 중이고 내 앱에서 종료한다고 가정 해 봅시다. iTunes를 종료합니다. "아이튠즈"는 단지 예일 뿐이다. 내 응용 프로그램에서 모든 응용 프로그램을 열 수 있지만 실행중인 응용 프로그램을 닫는 방법을 알고 싶습니다.실행중인 다른 응용 프로그램 종료 - 코코아

덕분에 카본이나 코코아를 기반으로 아이튠즈와 같은 높은 수준의 응용 프로그램, 케빈

답변

9

Mac OS X 10.6, Snow Leopard에서 실행중인 경우 새 NSRunningApplication terminate 방법을 사용할 수 있습니다.

+0

괜찮습니다. 디버깅 할 때이 오류가 발생합니다. 내 코드는 여기 NSRunningApplication * selectedApp = appName; \t \t [selectedApp terminate]; – lab12

+2

아마도 [[[NSRunningApplication runningApplicationsWithBundleIdentifier : @ "com.apple.iTunes"] objectAtIndex : 0] terminate]를 호출하고 싶을 것입니다. j를 지정할 수 없습니다. 임의의 문자열 상수를 완전히 다른 클래스의 변수에 추가합니다. – cdespinosa

1

, 그들은 AppleScript를에 응답 할 것입니다. "종료"는 표준 패키지의 일부입니다. 보낼 내용 :

tell application "iTunes" to quit 

다양한 방법이 있습니다. 구현하는 가장 간단한 osascript에 시스템 호출을하는 것입니다

osascript -e 'tell application "iTunes" to quit' 

당신은이 문제에 대한 매우 적절한 것 Apple Events처럼 거기에 더 강력한 도구에서 이동 할 수 있습니다. 너는 Scripting Bridge까지 갈 수는 있지만, 앱을 종료 할 때 지나치게 잔인 할 수 있습니다.

이것은 AppleScript에 응답하는 프로그램에서만 작동하지만 사용자의 도크에서 볼 수있는 프로그램이어야하며 ("응용 프로그램"이라고 생각하는) 프로그램이어야합니다. 데몬과 같은 하위 프로세스의 경우 launchctl 또는 kill과 같은 다른 기술이 필요하지만 필요한 경우 해당 기술에 대해 이야기 할 수 있습니다.

11

AppleScript는 단일 종료 이벤트를 보내는 꽤 높은 수준의 방법입니다. SIGTERM은 꽤 무차별적이고 낮은 수준의 방법이다.

다른 응용 프로그램을 종료하는 올바른 방법은 프로세스 일련 번호 (PSN)를 획득하고 코드의 두 라인 그것을 kAEQuitApplication 애플 이벤트를 보내는 것입니다 :

result = AEBuildAppleEvent(kCoreEventClass, kAEQuitApplication, typeProcessSerialNumber, &currentProcessPSN, 
sizeof(ProcessSerialNumber), kAutoGenerateReturnID, kAnyTransactionID, &tAppleEvent, &tAEBuildError,""); 
result = AESend(&tAppleEvent, &tReply, kAEAlwaysInteract+kAENoReply, kAENormalPriority, kNoTimeOut, nil, nil);   

당신은 C, C에서이 작업을 수행 할 수 있습니다 ++ , Objective-C를 사용하면 CoreServices.framework와 연결해야합니다.

+1

AESend는 존재하지 않지만 AESendMessage는 존재하지만 – valexa

관련 문제