使用NSWorkspace获取已启动应用程序的进程ID

时间:2011-11-07 13:12:26

标签: objective-c xcode macos command-line

我很难在应用程序中获取已启动文件的pid。我想我差不多了,但我一直都是空的:

[sharedWorkspace openFile:@"/Users/abs/Documents/my.txt" withApplication:@"TextEdit"]; 

 NSDictionary * currentAppInfo = [sharedWorkspace activeApplication];

 int pid = [[currentAppInfo objectForKey: @"NSApplicationProcessIdentifier"] intValue];

 NSLog(@"%@", pid); // (null), using @i, @u, @d I get 0

我在这里做错了什么?

这适用于在xcode 4.2中构建的commnand line应用程序。

2 个答案:

答案 0 :(得分:2)

如果您将应用程序作为命令行应用程序运行,则可能甚至不使用AppKit。 AppKit.framework是否在您的项目中链接?

[NSWorkspace openFile: withApplication:]调用是否有效?

查看此CocoaBuilder thread。一个引人注目的引用是:

  

AppKit通常需要窗口服务器连接。

要获取您启动的TextEdit的进程ID(pid),我相信您将不得不尝试别的。

当然你知道自{10}以来[NSWorkspace activeApplication]被弃用了,是吗?

答案 1 :(得分:0)

假设您已经包含了Cocoa / AppKit框架; 您可以通过为TextEdit过滤NSWorkspace's runningApplications来获取应用的进程ID,然后获取其processIdentifier属性。

NSLog(@"%i", [[NSRunningApplication runningApplicationsWithBundleIdentifier: @"com.apple.TextEdit"] processIdentifier]);

(我现在不在我的Mac后面所以这是未经测试的)