Как запустить приложение и перенести его на передний план, используя Cocoa api?
Я очень новичок в программировании cocoa, и я не могу найти способ сделать следующее:
- Запустить конкретное приложение по имени
- Сделайте некоторые работы.
- Позже принесите это приложение, которое я начал быть передним процессом.
Из того, что я нашел в Carbon API, похоже, что вызовы, которые я должен использовать, - это launchApplication() и setFrontProcess().
Но как это сделать в Cocoa? То есть запустить его, получить PID, установить, что PID будет фронт-процессом. Я попробовал Google на примерах и ничего не нашел...
Если любой из вас может предоставить минималистский образец, который был бы потрясающим:)
Спасибо заранее.
Ответы
Ответ 1
Запустить приложение:
[[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];
Ответ 2
Чтобы запустить приложение, используйте класс NSWorkspace
: Справка NSWorkspace
В частности, функция launchApplication:
.
Я не знаю ответа части активации с моей головы. Вы можете активировать собственное приложение с помощью -[NSApplication activateIgnoringOtherApps:]
, но я не знаю, как это сделать для других приложений.
Ответ 3
Вы просмотрели NSRunningApplication?
Ответ 4
NSRunningApplication доступен в Mac OS X 10.6 или новее.
Если вам нужно поддерживать более ранние системы, это можно сделать с помощью API, таких как GetCurrentProcess() и SetFrontProcess() и старой структуры ProcessSerialNumber.
Ответ 5
Для версии 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
{
}
Я все еще пытаюсь найти способ узнать "активное", "скрытое" и т.д. состояние приложения, но не удалось до сих пор.