我正在寻找一种方法让Mac上的所有正在运行的进程满足这些要求:
1。)所有流程(系统和用户)
2.。)给定供应商流程的唯一流程名称。例如,来自两个供应商的应用程序可能具有相同的进程名称(如活动监视器中所示)。使用下面的代码,bundleIdentifier将给出一个唯一的名称。活动监视器可能会显示具有相同进程名称的多个进程,但该进程名称对于该进程是唯一的。
3.)如果进程有窗口
下面的代码将执行2和3,但不是1(它只能获取用户的进程)。
for (NSRunningApplication app in [[NSWorkspace sharedWorkspace] runningApplications]) {
NSString *uniqueName = app.bundleIdentifier;
BOOL hasWindow = (app.activationPolicy == NSApplicationActivationPolicyRegular)?YES:NO;
}
有没有人知道满足所有3个要求的另一种方法?
答案 0 :(得分:0)
从Darwin Sources档案中获取ps
的来源(它将被隐藏在其中一个系统工具档案中,而不是单独存放)并从那里开始。
那会得到你(1)。 (2)不可能;两个进程可以具有相同的名称(但每个进程必须具有唯一的PID - 使用它)。
(3)你必须以某种方式去掠夺窗口服务器。我认为GitHub上可能有一些片段可以证明如何做到这一点。