Как запустить приложение и вывести его на передний план с помощью Cocoa api? - PullRequest
16 голосов
/ 25 февраля 2010

Я очень плохо знаком с программированием какао и не могу найти способ сделать следующее:

  • Запустить определенное приложение по имени
  • Выполняй работу
  • Позже принесите приложение, которое я начал для фронтального процесса

Из того, что я нашел в Carbon API, похоже, что вызовы, которые я должен использовать, это launchApplication () и setFrontProcess ().

Но как это сделать в Какао? То есть запустите его, получите PID, установите этот PID как фронтальный процесс. Я пытался гуглить по примерам и ничего не нашел ...

Если кто-нибудь из вас может предоставить минималистичный образец, который был бы великолепен:)

Заранее спасибо.

Ответы [ 6 ]

30 голосов
/ 25 февраля 2010

Чтобы запустить приложение:

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

Чтобы активировать приложение:

NSRunningApplication* app = [NSRunningApplication
                             runningApplicationWithProcessIdentifier: PID];
[app activateWithOptions: NSApplicationActivateAllWindows];
// or
NSArray* apps = [NSRunningApplication
                 runningApplicationsWithBundleIdentifier:@"com.bla.blah"];
[(NSRunningApplication*)[apps objectAtIndex:0]
 activateWithOptions: NSApplicationActivateAllWindows];
4 голосов
/ 25 февраля 2010

Чтобы запустить приложение, используйте класс NSWorkspace: NSWorkspace Reference

В частности, функция launchApplication:.

Я не знаю ответа части активации с моей головы. Вы можете активировать свое собственное приложение с помощью -[NSApplication activateIgnoringOtherApps:], но я не знаю, как это сделать для других приложений.

1 голос
/ 25 июня 2012

Приложение NSRunningApplication доступно в Mac OS X 10.6 или более поздней версии.

Если вам требуется поддержка более ранних систем, это можно сделать с помощью таких API, как GetCurrentProcess () и SetFrontProcess () и старой структуры ProcessSerialNumber.

1 голос
/ 25 февраля 2010

Вы смотрели в NSRunningApplication ?

0 голосов
/ 09 февраля 2018

В Swift 4 вы можете использовать NSWorkspace.shared.launchApplication(appName:), чтобы открыть приложение. Это также делает запущенное приложение впереди в моем случае.

Вы также можете попробовать:

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

Параметр andHideOthers: Скрыть все приложения, кроме недавно запущенного.

0 голосов
/ 02 декабря 2015

Для версии Swift2

Запустить приложение:

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

Чтобы получить приложение с помощью идентификатора пакета:

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

Я все еще пытаюсь найти способ узнать «активное», «скрытое» и т. Д. Состояние приложения, но пока не удается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...