簡體   English   中英

終止另一個運行的應用程序 - 可可

[英]Terminating Another App Running - Cocoa

如何終止在cooca中運行的另一個應用程序。 假設我有iTunes運行,我在我的應用程序中鍵入退出,它將退出iTunes。 “iTunes”只是一個例子,它可以是用戶想要的任何東西。 我可以從我的應用程序中打開任何應用程序,但我想知道如何關閉任何運行的應用程序。

謝謝

凱文

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

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

對於像iTunes這樣基於Carbon或Cocoa的高級應用程序,他們將對Applescript做出回應。 “退出”是標准包的一部分。 你只需要發送:

tell application "iTunes" to quit

有很多方法可以做到這一點。 最簡單的實現是對osascript進行系統調用:

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

您可以從那里上升到更強大的工具,如Apple Events ,這非常適合這個問題。 你甚至可以使用Scripting Bridge ,但是為了終止應用程序,這將是一種過度殺傷力。

這只適用於響應Applescript的程序,但這應該是您在Dock中看到的任何程序(我認為您的意思是“應用程序”)。 對於像守護進程這樣的低級進程,你需要其他技術,如launchctlkill ,但是如果你需要它們我們可以討論它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM