2009-12-30 41 views
6

我在觀察NSWorkspaceDidDeactivateApplicationNotification通知以獲取剛剛失去焦點的應用程序。我結束了從通知對象的userInfo字典鍵 - NSWorkspaceApplicationKey獲取的NSRunningApplication實例。通過NSRunningApplication實例獲取應用程序的主窗口

我在想,我可以從通知的應用程序獲取主窗口,但我不知道從哪裏去,因爲NSRunningApplication似乎非常有限。任何幫助,將不勝感激。

順便說一句 - 我使用的是MacRuby,但答案並不需要在MacRuby中。

謝謝

回答

4

傳統上,蘋果一直都很關心這類事情。 NSRunningApplication本身只是在10.6中引入的,正如你所說,它有點有限。根據你想要做什麼,答案可能在Accessibility framework或者可能是CGWindow API。您可以使用NSRunningApplication中的processIdentifier將其與這些API進行匹配。

+0

謝謝,我會看看這兩個API。 – alistairholt 2009-12-30 19:50:32

2

很難獲得其他應用程序的主窗口;他們甚至不保證是可可!它們可以是Carbon或Java,或Qt,或Mono ...因此,除非您進行破解,否則您無法獲得其他應用程序的NSWindow。您可以嘗試使用Accessibility API以獨立於所使用的框架獲取其他應用程序的窗口信息等,但使用起來並不那麼容易。

+0

謝謝,我會研究可訪問性API。 – alistairholt 2009-12-30 19:32:31

1

除非應用程序通過AppleScript支持或其他方式選擇參與IAC,否則您不需要觸摸其窗口或您自己的堆空間之外的其他任何東西。

相關問題