Sono molto nuovo a una programmazione di cocoa e non riesco a trovare il modo di fare quanto segue:
Da quello che ho trovato in Carbon API sembra che le chiamate che dovrei usare siano launchApplication () e setFrontProcess ().
Ma come si fa a Cocoa? Cioè lanciarlo, ottenere PID, impostare che il PID sia un processo frontale. Ho provato a google per gli esempi e non trovo nulla …
Se qualcuno di voi può fornire un campione minimalista sarebbe fantastico 🙂
Grazie in anticipo.
Per avviare un’applicazione:
[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Safari.app"];
Per triggersre un’app:
NSRunningApplication* app = [NSRunningApplication runningApplicationWithProcessIdentifier: PID]; [app activateWithOptions: NSApplicationActivateAllWindows]; // or NSArray* apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.bla.blah"]; [(NSRunningApplication*)[apps objectAtIndex:0] activateWithOptions: NSApplicationActivateAllWindows];
Per avviare un’applicazione, utilizzare la class NSWorkspace : NSWorkspace Reference
In particolare, la launchApplication:
function.
Non conosco la risposta della parte di triggerszione dalla mia testa. È ansible triggersre la propria applicazione con -[NSApplication activateIgnoringOtherApps:]
, ma non so come farlo per altre app.
Hai esaminato NSRunningApplication ?
NSRunningApplication è disponibile su Mac OS X 10.6 o successivo.
Se devi supportare sistemi precedenti, questo può essere fatto con API come GetCurrentProcess () e SetFrontProcess () e la vecchia struttura ProcessSerialNumber.
Per la versione Swift2
Avvio dell’app:
let task = NSTask() task.launchPath = "/usr/bin/env" task.arguments = ["/Applications/TextEdit.app/Contents/MacOS/TextEdit"] task.launch()
Per ottenere l’app utilizzando l’identificatore del gruppo:
var apps: [AnyObject] = NSRunningApplication.runningApplicationsWithBundleIdentifier("com.apple.TextEdit") var MyApp: [NSRunningApplication] = apps as! [NSRunningApplication] for app in MyApp { }
Sto ancora cercando di trovare il modo di conoscere lo stato “attivo”, “nascondi” ecc di app, ma non ci riesco fino ad ora.
In swift 4, è ansible utilizzare NSWorkspace.shared.launchApplication(appName:)
per aprire un’app. Nel mio caso rende anche l’app lanciata in primo piano.
Puoi anche provare:
do { try NSWorkspace.shared.launchApplication(at: yourAppURL, options: .andHideOthers, configuration: [:]) } catch { printError("Failed to launch the app.") }
Option
andHideOthers
: nasconde tutte le app tranne quella appena lanciata.