我试图获取所有正在运行的应用程序包的列表。用户已启动的GUI应用程序(如Dock正在显示)或活动监视器(它在某些进程旁边显示一个图标)。我发现我可以使用sysctl()
和KERN_PROC_ALL
来获取所有正在运行的进程的列表,但这不会告诉我它们来自哪个应用程序包。像Minecraft这样的应用程序只显示为java
,并且它不是很有用。
我确实发现活动监视器中的进程组名称大致显示了我想知道的内容: Activity Monitor Showing Minecraft Launcher Running http://gdries.nl/activmon.png
实施语言并不重要。目前正在C中工作,但是如果其他一些环境被证明是不成问题的话。我想要做的就是检测用户运行的应用程序,以便记录每个应用程序的使用时间。 (家长控制执行类似的操作,但将其记录在我无法解析的plist文件中)
答案 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
对象,它有一个包标识符,这是我想知道的。