Как получить PID из ProcessSerialNum в OSX 10.9?

GetProcessPID был отмечен как устаревший в OSX 10.9 вместе с примечанием:

Используйте свойство processIdentifier соответствующего объекта NSRunningApplication.

Проблема заключается в создании методов класса для NSRunningApplication нет способа получить NSRunningApplication по ProcessSerialNum, только по PID или имени пакета.

Имя пакета слишком двусмысленное (может быть несколько экземпляров), и у меня нет PID (это то, что я хочу).

В OSX 10.9 есть ли способ получить PID при наличии PSN?

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];

источник

Если вы используете метод runningApplicationsWithBundleIdentifier класса NSRunningApplication, вы получите NSArray NSRunningApplication. Затем вы можете прочитать свойства этих объектов (URL-адрес пакета, локализованное имя…), чтобы идентифицировать интересующий вас объект, и, наконец, получить его PID.

Другие вопросы по тегам