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

标签 objective-c macos cocoa launch pid

我想启动一个带有指定应用程序的文件,我希望启动的程序立即成为最前面的窗口。

我知道我可以这样做:

[[NSWorkspace sharedWorkspace] openFile:fileName withApplication:appName];

然后,如果我可以获得那个已启动应用程序的 PID,我就可以执行此操作以使该应用程序位于最前面:

NSRunningApplication* app = [NSRunningApplication
                             runningApplicationWithProcessIdentifier: PID];
[app activateWithOptions: NSApplicationActivateAllWindows];

我的问题是:什么是最简单、最快捷、最可靠的方法来在启动后立即获取此应用程序的 PID,以便我可以确保此应用程序位于最前面?

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

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

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

或者,是否有一种方法可以使用指定的应用程序启动给定的文件,以便该应用程序始终作为最前面的应用程序打开?

最佳答案

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

[[NSWorkspace sharedWorkspace] openFile:fileName withApplication:appName andDeactivate:YES];

关于objective-c - 获取最近启动的应用程序的 PID 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9656127/

相关文章:

ios - 来自 <netinet/in.h> 的 INADDR_LOOPBACK 宏未在 swift 中导入

r - 为什么在 Mac 和 Linux 上通过 `R -e ..` 的字符串命令需要额外的转义?

swift - 菜单栏应用程序中的 OS X 键事件 (Swift)

ios - 如何在 iOS 中将 pdf 页面转换为图像

iOS:仅当 APP 处于事件状态时重复任务(无后台)

ios - UITableViewController 无声地崩溃而没有错误

java - 在 Mac OS 上将 PEM 文件转换为 JKS 文件

cocoa - NSPopUpButton 事件图像

objective-c - 重新加载先前卸载的 bundle 时 KVO/KVC 崩溃

ios - 为什么 iPhone 5S 和 iPad Air 之前的设备在转换 null 变量时不会崩溃?