GetProcessPID
在OSX 10.9中被标记为已弃用以及注释:
使用相应的processIdentifier属性 NSRunningApplication对象。
问题是NSRunningApplication
的构造类方法无法通过NSRunningApplication
获取ProcessSerialNum
,只能通过PID或包名称。
捆绑名称太模糊(可能有多个实例),我没有PID(这就是我想要的)。
在OSX 10.9中,有没有办法在你有PSN时获得PID?
答案 0 :(得分: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];
答案 1 :(得分:1)
如果您使用类runningApplicationsWithBundleIdentifier
的方法NSRunningApplication
,您将获得NSRrrayApplication的NSArray。
然后,您可以读取这些对象的属性(包URL,本地化名称...)以标识您感兴趣的对象,最后获取其PID。