我对可可编程很新,我无法找到执行以下操作的方法:
从我在Carbon API中发现的看起来我应该使用的调用是launchApplication()和setFrontProcess()。
但是如何在Cocoa中做到这一点?即启动它,获取PID,将该PID设置为前端进程。我尝试谷歌的例子,什么都没找到......
如果你们中的任何人都能提供一个非常棒的简约样本:)
提前致谢。
答案 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);