2009-12-30 42 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,否则您不需要触摸其窗口或您自己的堆空间之外的其他任何东西。

相关问题