2011-11-07 144 views
2

我很难获取应用程序中启动文件的pid。我认为我快到了,但我一直收到一个空:使用NSWorkspace获取已启动应用程序的进程ID

[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应用程序。

+1

更改'的NSLog(@ “%@”,PID)''到NSLog的(@ “%i” 的,PID) '为我工作。它给出当前正在运行的应用程序的进程ID,但不是用于打开文件的进程ID。 – Jef

+0

@Jef啊,我需要我刚刚启动的应用程序的进程ID。 – Abs

回答

2

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

[NSWorkspace openFile: withApplication:]电话即使工作?

看看这个CocoaBuilder thread。一个引人注目的是:

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

要获得您启动的TextEdit的进程ID(pid),我相信您将不得不尝试其他方法。

当然,你知道[NSWorkspace activeApplication]已被弃用10.7,是吗?

+0

我正在使用'#import '和'#import '。 'NSWorkspace'可能在命令行应用程序中使用吗?还有什么其他选项可以让我打开open并获取其窗口进程ID? – Abs

+0

Swipped到一个可可应用程序,它的工作原理。它很烦人有一个空白的窗口出现,但它的工作。我认为你是正确的窗口服务器连接这个工作。谢谢。 – Abs

0

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

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

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

+0

我将如何更改我的代码来执行此操作? – Abs

+0

我编辑了我的答案。 – Jef

+0

我也测试过这个,它在命令行应用程序中不起作用。尽管在可可工作。 – Abs

相关问题