2010-02-25 8 views
15

Jestem bardzo nowe do programowania kakaowego i nie mogę znaleźć sposób, aby wykonać następujące czynności:Jak uruchomić aplikację i przenieść ją do przodu za pomocą interfejsu API Cocoa?

  • Rozpocznij szczególne zastosowanie wg nazwy
  • popracować
  • Później przynieść z aplikacji I "Zaczęliśmy być czołowym procesem"

Z tego, co znalazłem w Carbon API, wynika, że ​​połączenia, których powinienem użyć to launchApplication() i setFrontProcess().

Ale jak to zrobić w kakao? To znaczy. uruchom go, uzyskaj PID, ustaw PID na frontowy proces. Próbowałem google dla przykładów i znaleźć nic ...

Jeśli ktoś z was może dostarczyć próbkę minimalistyczny, że byłoby super :)

góry dzięki.

Odpowiedz

29

Aby uruchomić aplikację:

[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Safari.app"]; 

Aby aktywować aplikację:

NSRunningApplication* app = [NSRunningApplication 
          runningApplicationWithProcessIdentifier: PID]; 
[app activateWithOptions: NSApplicationActivateAllWindows]; 
// or 
NSArray* apps = [NSRunningApplication 
       runningApplicationsWithBundleIdentifier:@"com.bla.blah"]; 
[(NSRunningApplication*)[apps objectAtIndex:0] 
activateWithOptions: NSApplicationActivateAllWindows]; 
+0

Próbowałem uruchomić aplikację w ten sposób z procesu w tle, ale wydaje się, że ta metoda uruchamiania nie działa w Lion lub później, jeśli proces ten nie jest aplikacją GUI. –

+1

Opcja 'NSApplicationActivateAllWindows' spowoduje, że wszystkie okna aplikacji pojawią się naprzód, co prawie zawsze nie jest tym, czego potrzebujesz. Zamiast tego możesz przekazać w "NSApplicationActivateIgnoringOtherApps", aby aktywować okno, które było ostatnio aktywne w aplikacji. – thomasfuchs

4

Aby uruchomić aplikację, należy użyć klasy NSWorkspace: NSWorkspace Reference

Konkretnie funkcję launchApplication:.

Nie znam odpowiedzi części aktywacyjnej z mojej głowy. Możesz aktywować własną aplikację za pomocą -[NSApplication activateIgnoringOtherApps:], ale nie wiem, jak to zrobić w przypadku innych aplikacji.

+0

Dzięki. To jest właściwa funkcja, tak, widziałem to, ale nie mogę znaleźć sposobu na znalezienie pid i ponowne użycie go później. Poczekajmy może ktoś zna odpowiedź :) – dimsuz

1

NSRunningApplication jest dostępna w systemie Mac OS X 10.6 lub nowszy.

Jeśli musisz obsługiwać wcześniejsze systemy, można to zrobić za pomocą interfejsów API, takich jak GetCurrentProcess() i SetFrontProcess() oraz starej struktury ProcessSerialNumber.

0

Dla wersji Swift2

uruchamianie aplikacji:

let task = NSTask() 
task.launchPath = "/usr/bin/env" 
task.arguments = ["/Applications/TextEdit.app/Contents/MacOS/TextEdit"] 
task.launch() 

Aby pobrać aplikację za pomocą wiązki Identyfikator:

var apps: [AnyObject] = NSRunningApplication.runningApplicationsWithBundleIdentifier("com.apple.TextEdit") 
    var MyApp: [NSRunningApplication] = apps as! [NSRunningApplication]   
      for app in MyApp   
      { 
      } 

Nadal staram się znaleźć sposób, aby wiedzieć "aktywny", "ukryj" itp. stan aplikacji, ale nie udało się do tej pory.

0

W szybkim 4, możesz użyć NSWorkspace.shared.launchApplication(appName:), aby otworzyć aplikację. To sprawia, że ​​uruchomiona aplikacja z przodu w moim przypadku.

Można też spróbować:

do { 
    try NSWorkspace.shared.launchApplication(at: yourAppURL, 
              options: .andHideOthers, 
              configuration: [:]) 
} catch { 
    printError("Failed to launch the app.") 
} 

Option andHideOthers: Ukryj wszystkie aplikacje z wyjątkiem nowo uruchomiony jeden.

Powiązane problemy