终止另一个运行的应用程序 - 可可

时间:2009-09-24 02:45:39

标签: objective-c cocoa terminate

如何终止在cooca中运行的其他应用。假设我有iTunes运行,我在我的应用程序中键入退出,它将退出iTunes。 “iTunes”只是一个例子,它可以是用户想要的任何东西。我可以从我的应用程序中打开任何应用程序,但我想知道如何关闭任何正在运行的应用程序。

感谢

凯文

3 个答案:

答案 0 :(得分:11)

AppleScript是一种发送单个Quit事件的高级方法。 SIGTERM是一种非常强大,低级的方式。

退出另一个应用程序的正确方法是获取其进程序列号(psn)并使用以下两行代码向其发送kAEQuitApplication Apple事件:

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 :(得分:10)

如果你在Mac OS X 10.6,Snow Leopard上运行,你可以使用新的NSRunningApplication terminate方法。

答案 2 :(得分:1)

对于像iTunes这样基于Carbon或Cocoa的高级应用程序,他们会对Applescript做出回应。 “退出”是标准包的一部分。你只需要发送:

tell application "iTunes" to quit

有很多方法可以做到这一点。最简单的方法是对osascript进行系统调用:

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

你可以从那里上升到更强大的工具,如Apple Events,这对于这个问题非常合适。你甚至可以到Scripting Bridge,但是对于终止一个应用程序来说,那就太过分了。

这只适用于响应Applescript的程序,但这应该是您在Dock中看到的任何程序(我认为您的意思是“应用程序”)。对于像守护进程这样的低级进程,您需要其他技术,例如launchctlkill,但如果您需要,我们可以讨论这些技术。