如何启动应用程序并使用Cocoa api将其引入前端?

时间:2010-02-25 09:55:43

标签: cocoa macos

我对可可编程很新,我无法找到执行以下操作的方法:

  • 按名称
  • 启动特定应用程序
  • 做一些工作
  • 后来把这个应用程序我开始成为前台程序

从我在Carbon API中发现的看起来我应该使用的调用是launchApplication()和setFrontProcess()。

但是如何在Cocoa中做到这一点?即启动它,获取PID,将该PID设置为前端进程。我尝试谷歌的例子,什么都没找到......

如果你们中的任何人都能提供一个非常棒的简约样本:)

提前致谢。

7 个答案:

答案 0 :(得分:30)

启动应用程序:

[[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];

答案 1 :(得分:4)

要启动应用程序,请使用NSWorkspace类:NSWorkspace Reference

具体来说,是launchApplication:功能。

我不知道激活部分的答案。您可以使用-[NSApplication activateIgnoringOtherApps:]激活自己的应用程序,但我不知道如何为其他应用程序执行此操作。

答案 2 :(得分:1)

你有没看过NSRunningApplication

答案 3 :(得分:1)

NSRunningApplication适用于Mac OS X 10.6或更高版本。

如果必须支持早期的系统,可以使用GetCurrentProcess()和SetFrontProcess()以及旧的ProcessSerialNumber结构等API来完成。

答案 4 :(得分:0)

对于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        
            {
            }

我仍然试图找到了解“活跃”,“隐藏”等应用状态的方法,但直到现在还没有成功。

答案 5 :(得分:0)

在swift 4中,您可以使用NSWorkspace.shared.launchApplication(appName:)打开应用。它也使得推出的应用程序在我的案例中处于领先地位。

您也可以尝试:

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

选项andHideOthers:隐藏除新推出的应用之外的所有应用。

答案 6 :(得分:0)

在Mac中使用Objective C的Open App

ConstraintLayout layout = (ConstraintLayout) view.findViewById(R.id.homeContainer);