Come avviare l’applicazione e portarla in primo piano usando Cocoa api?

Sono molto nuovo a una programmazione di cocoa e non riesco a trovare il modo di fare quanto segue:

  • Avvia una particolare applicazione per nome
  • Fai del lavoro
  • In seguito porto quella applicazione che ho iniziato ad essere il processo iniziale

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.