5

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

谢谢

凯文

4

3 回答 3

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 链接。

于 2009-09-24T03:39:56.083 回答
10

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

于 2009-09-24T05:11:10.107 回答
1

对于 iTunes 等基于 Carbon 或 Cocoa 的高级应用程序,它们将响应 Applescript。“退出”是标准包的一部分。您只需要发送:

tell application "iTunes" to quit

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

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

你可以从那里升级到更强大的工具,比如Apple Events,这将非常适合这个问题。您甚至可以使用Scripting Bridge,但要终止应用程序,那将是矫枉过正。

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

于 2009-09-24T02:56:11.860 回答