5

GetProcessPID在 OSX 10.9 中被标记为弃用,并附注:

使用适当的 NSRunningApplication 对象的 processIdentifier 属性。

问题是构造类方法NSRunningApplication无法NSRunningApplication通过 a获取 a ProcessSerialNum,只能通过 PID 或捆绑名称获取。

捆绑包名称太模糊(可能有多个实例)并且我没有 PID(这是我想要的)。

在 OSX 10.9 中,有没有办法在您拥有 PSN 时获取 PID?

4

2 回答 2

2

观察NSWorkspaceDidLaunchApplicationNotification通知。

在回调中,获取进程序号如下:

NSDictionary* dictionary = [notification userInfo];
NSNumber* psnLow = [dictionary valueForKey: @"NSApplicationProcessSerialNumberLow"];
NSNumber* psnHigh = [dictionary valueForKey: @"NSApplicationProcessSerialNumberHigh"];
ProcessSerialNumber psn;
psn.highLongOfPSN = [psnHigh intValue];
psn.lowLongOfPSN = [psnLow intValue];
NSRunningApplication *newApplication = [dictionary valueForKey:NSWorkspaceApplicationKey];

资源

于 2014-07-03T05:19:04.283 回答
2

如果你使用runningApplicationsWithBundleIdentifier类的方法NSRunningApplication,你会得到一个 NSRunningApplication 的 NSArray。然后,您可以读取这些对象的属性(捆绑 URL、本地化名称……)以识别您感兴趣的对象,最后获得其 PID。

于 2014-07-05T05:12:26.693 回答