2011-11-07 138 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

相關問題