获取最近启动的应用程序的PID的最简单方法

Hip*_*Man 5 macos cocoa pid objective-c launch

我想使用指定的应用程序启动文件,并且希望启动的程序立即成为最前面的窗口。

我知道我可以这样做,如下所示:

[[NSWorkspace sharedWorkspace] openFile:fileName withApplication:appName];
Run Code Online (Sandbox Code Playgroud)

然后,如果我可以获取该启动的应用程序的PID,则可以这样做以使该应用程序位于最前面:

NSRunningApplication* app = [NSRunningApplication
                             runningApplicationWithProcessIdentifier: PID];
[app activateWithOptions: NSApplicationActivateAllWindows];
Run Code Online (Sandbox Code Playgroud)

我的问题是:启动后立即获取此应用程序的PID的最简单,最快和最可靠的方法是什么,因此我可以确保该应用程序位于最前端?

这并不像乍看起来那样简单。例如,我需要一个进程名称,以便使用Carbon调用或通过可以访问的应用程序字典来获取PID NSRunningApplication。但是,在一般情况下,我并不总是知道进程名称是什么,在某些情况下,进程名称是一个空字符串。

此外,我可能已经在运行同一应用程序的其他实例,并且我想始终获取刚刚启动的应用程序特定实例的PID。

谁能建议一种确定的,百分百可靠的方法来获取当前启动的应用程序的PID?

或者,是否可以使用指定的应用程序启动给定文件,以使该应用程序始终以最前面的应用程序打开?

ken*_*gen 1

您是否尝试过使用 openFile 的其他版本,它允许您停用应用程序,从而让新应用程序获得焦点?

[[NSWorkspace sharedWorkspace] openFile:fileName withApplication:appName andDeactivate:YES];
Run Code Online (Sandbox Code Playgroud)