我很新的可可編程和我找不到做如下的方式:如何啓動應用程序並使用Cocoa API將它展現在前面?
- 按名稱
- 啓動特定的應用做了一些工作
- 後來把該應用程序我已經開始成爲前臺進程
從我在Carbon API中找到的內容看起來應該使用的調用是launchApplication()和setFrontProcess()。
但如何在可可中做到這一點?即啓動它,獲得PID,將PID設置爲前臺進程。我想谷歌的例子,並沒有發現任何...
如果你們能提供一個簡約樣本,這將是真棒:)
在此先感謝。
我很新的可可編程和我找不到做如下的方式:如何啓動應用程序並使用Cocoa API將它展現在前面?
從我在Carbon API中找到的內容看起來應該使用的調用是launchApplication()和setFrontProcess()。
但如何在可可中做到這一點?即啓動它,獲得PID,將PID設置爲前臺進程。我想谷歌的例子,並沒有發現任何...
如果你們能提供一個簡約樣本,這將是真棒:)
在此先感謝。
要啓動的應用程序:
[[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];
要啓動的應用程序,使用NSWorkspace
類:NSWorkspace Reference
具體地說,launchApplication:
功能。
我不知道激活部分的答案我的頭。您可以使用-[NSApplication activateIgnoringOtherApps:]
激活自己的應用程序,但我不知道如何爲其他應用程序執行此操作。
謝謝。這是正確的功能,是的,我看到了,但是我找不到找到pid並稍後重用它的方法。讓我們等待,也許有人知道答案:) – dimsuz
NSRunningApplication可以在Mac OS X 10.6或更高版本。
如果您必須支持較早的系統,則可以使用GetCurrentProcess()和SetFrontProcess()等API和舊的ProcessSerialNumber結構完成此操作。
對於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
{
}
我仍然在試圖找到知道 「主動」 的方式, 「隱藏」等應用程序狀態,但至今尚未成功。
在swift 4中,您可以使用NSWorkspace.shared.launchApplication(appName:)
來打開一個應用程序。它也使我推出的應用程序在我的情況。
你還可以嘗試:
do {
try NSWorkspace.shared.launchApplication(at: yourAppURL,
options: .andHideOthers,
configuration: [:])
} catch {
printError("Failed to launch the app.")
}
選項
andHideOthers
:隱藏除了新推出的一個所有的應用程序。
我試圖從後臺進程這種方式啓動應用程序,但似乎這種啓動方法不能在獅子或更高版本中工作,如果進行它的過程不是GUI應用程序。 –
'NSApplicationActivateAllWindows'選項將導致所有的應用程序窗口出現,這幾乎總是不是你想要的。相反,您可以傳入'NSApplicationActivateIgnoringOtherApps'來激活應用程序中最近激活的窗口。 – thomasfuchs