5 Stimmen

Beenden einer anderen laufenden Anwendung - Cocoa

Wie kann ich eine andere Anwendung, die in cooca läuft, beenden? Nehmen wir an, iTunes läuft, und ich gebe in meiner App quit ein, dann würde iTunes beendet werden. "iTunes" ist nur ein Beispiel, es könnte alles sein, was der Benutzer will. Ich kann jede beliebige Anwendung von meiner Anwendung aus öffnen, aber ich möchte wissen, wie ich eine laufende Anwendung schließen kann.

gracias

kevin

11voto

cdespinosa Punkte 20293

AppleScript ist ein ziemlich anspruchsvoller Weg, um ein einzelnes Quit-Ereignis zu senden. SIGTERM ist ein ziemlich brachialer Weg auf niedriger Ebene.

Der korrekte Weg, eine andere Anwendung zu beenden, besteht darin, ihre Prozess-Seriennummer (psn) zu erhalten und ihr ein kAEQuitApplication Apple-Ereignis mit diesen beiden Codezeilen zu senden:

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

Sie können dies von C, C++ oder Objective-C aus tun, und Sie müssen mit CoreServices.framework verknüpfen.

10voto

Jon Hess Punkte 14197

Wenn Sie mit Mac OS X 10.6, Snow Leopard, arbeiten, können Sie das neue NSRunningApplication beenden Methode.

1voto

Rob Napier Punkte 265102

Bei anspruchsvollen Anwendungen wie iTunes, die auf Carbon oder Cocoa basieren, werden sie auf Applescript reagieren. "Quit" ist Teil des Standardpakets. Sie müssen es nur senden:

tell application "iTunes" to quit

Es gibt viele Möglichkeiten, dies zu tun. Am einfachsten ist es, einen Systemaufruf an osascript :

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

Von dort aus können Sie zu leistungsfähigeren Werkzeugen übergehen wie Apple Ereignisse die für dieses Problem sehr gut geeignet wäre. Man könnte sogar so weit gehen Skripting-Brücke aber für das Beenden einer Anwendung wäre das zu viel des Guten.

Dies funktioniert nur bei Programmen, die auf Applescript reagieren, aber das sollte jedes Programm sein, das Sie in Ihrem Dock sehen (und ich nehme an, Sie meinen damit "Anwendungen"). Für Prozesse auf niedrigerer Ebene wie Daemons benötigen Sie andere Techniken wie launchctl o kill aber wir können darüber sprechen, wenn Sie sie brauchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X