以编程方式在OS X中运行应用程序包

时间:2015-01-15 00:02:58

标签: c macos go

我试图获取所有正在运行的应用程序包的列表。用户已启动的GUI应用程序(如Dock正在显示)或活动监视器(它在某些进程旁边显示一个图标)。我发现我可以使用sysctl()KERN_PROC_ALL来获取所有正在运行的进程的列表,但这不会告诉我它们来自哪个应用程序包。像Minecraft这样的应用程序只显示为java,并且它不是很有用。

我确实发现活动监视器中的进程组名称大致显示了我想知道的内容: Activity Monitor Showing Minecraft Launcher Running http://gdries.nl/activmon.png

实施语言并不重要。目前正在C中工作,但是如果其他一些环境被证明是不成问题的话。我想要做的就是检测用户运行的应用程序,以便记录每个应用程序的使用时间。 (家长控制执行类似的操作,但将其记录在我无法解析的plist文件中)

1 个答案:

答案 0 :(得分:9)

我找到了一种使用Swift和Cocoa API的方法。据推测,这也应该可以使用普通的C,但这对我的应用来说已经足够了。

import Foundation
import AppKit

// Get all running applications
let workspace = NSWorkspace.shared
let applications = workspace.runningApplications

for app in applications {
    print(app)
}

app是一个NSApplication对象,它有一个包标识符,这是我想知道的。