Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Cocoa api启动应用程序并将其推向前台?_Cocoa_Macos - Fatal编程技术网

如何使用Cocoa api启动应用程序并将其推向前台?

如何使用Cocoa api启动应用程序并将其推向前台?,cocoa,macos,Cocoa,Macos,我对cocoa编程非常陌生,无法找到执行以下操作的方法: 按名称启动特定应用程序 做些工作 稍后带上那个应用程序,我已经开始成为前台流程 从我在Carbon API中发现的情况来看,我应该使用的调用是launchApplication()和setFrontProcess() 但是如何在可可中做到这一点呢?也就是说,启动它,获取PID,将PID设置为前端进程。我试着用谷歌搜索例子,但什么也没找到 如果你们中有人能提供一个极简主义的样本,那将是非常棒的:) 提前感谢。要启动应用程序,请使用NSW

我对cocoa编程非常陌生,无法找到执行以下操作的方法:

  • 按名称启动特定应用程序
  • 做些工作
  • 稍后带上那个应用程序,我已经开始成为前台流程
从我在Carbon API中发现的情况来看,我应该使用的调用是launchApplication()和setFrontProcess()

但是如何在可可中做到这一点呢?也就是说,启动它,获取PID,将PID设置为前端进程。我试着用谷歌搜索例子,但什么也没找到

如果你们中有人能提供一个极简主义的样本,那将是非常棒的:)


提前感谢。

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

具体来说,
启动应用程序:
函数


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

您是否查看过?

要启动应用程序:

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

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.")
}
选项
和隐藏其他应用程序
:隐藏除新启动的应用程序以外的所有应用程序


在目标C中的Mac中打开应用程序

#import <Cocoa/Cocoa.h>

int main(int argc, const char * argv[]) {

    @autoreleasepool {
        // insert code here...
        [[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Books.app"];
    }
    return 0;
}
#导入
int main(int argc,const char*argv[]{
@自动释放池{
//在这里插入代码。。。
[[NSWorkspace sharedWorkspace]启动应用程序:@“/Applications/Books.app”];
}
返回0;
}

谢谢。这是正确的函数,是的,我看到了,但我找不到一种方法来找到pid并在以后重用它。让我们等待,也许有人知道答案:)我尝试从后台进程以这种方式启动应用程序,但如果启动的进程不是GUI应用程序,那么这种启动方法在Lion或更高版本中似乎不起作用。
NSApplicationActivateAllWindows
选项将导致所有应用程序窗口出现,这几乎总是不是你想要的。相反,您可以传入
nsapplicationactivategignoringotherapps
,只激活应用程序中最近激活的窗口。