2009-09-24 76 views
4

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

感谢

凯文

回答

9

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

+0

ok我在调试时出现这个错误是我的代码 NSRunningApplication * selectedApp = appName; \t \t [selectedApp terminate]; – lab12 2009-09-24 21:11:32

+2

你可能想调用[[[NSRunningApplication runningApplicationsWithBundleIdentifier:@“com.apple.iTunes”] objectAtIndex:0] terminate]。你不能分配j。随机字符串常量到完全不同类的变量。 – cdespinosa 2009-11-22 19:26:50

1

对于高层次的应用如iTunes,基于碳或可可,他们将到AppleScript的回应。 “退出”是标准包的一部分。你只需要发送:

tell application "iTunes" to quit 

有很多方法可以做到这一点。实现最简单的是做一个系统调用osascript

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

你可以从那里到更强大的工具上去像Apple Events,这将是非常适合这个问题。你甚至可以去Scripting Bridge,但终止一个应用程序,这将是矫枉过正。

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

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 2011-05-18 03:14:33

相关问题