通过NSRunningApplication实例获取应用程序的主窗口

时间:2009-12-30 17:48:05

标签: objective-c macos macruby

我正在观察NSWorkspaceDidDeactivateApplicationNotification通知,以获取刚刚失去焦点的应用程序。我最终得到了一个N​​SRunningApplication实例,你可以从通知对象的userInfo字典键 - NSWorkspaceApplicationKey获得它。

我原以为我可以从通知中获取应用程序的主窗口,但我不知道从哪里开始,因为NSRunningApplication似乎非常有限。任何帮助将不胜感激。

BTW - 我正在使用MacRuby,但答案不需要在MacRuby中。

由于

3 个答案:

答案 0 :(得分:5)

传统上,苹果公司对这类事情一直保持沉默。 NSRunningApplication本身刚刚在10.6中引入,正如你所说,它有点受限。根据您的目的,答案可能在Accessibility framework,也可能在CGWindow API。您可以使用NSRunningApplication中的processIdentifier将其与这些API进行匹配。

答案 1 :(得分:2)

获取其他应用程序的主窗口非常困难;他们甚至不能保证是可可!它们可以是Carbon或Java,或Qt,或Mono ......所以除非你做一个黑客攻击,否则你无法获得另一个应用程序的NSWindow。您可以尝试Accessibility API独立于所使用的框架获取其他应用程序的窗口信息等,但它不是那么容易使用。

答案 2 :(得分:1)

除非应用程序选择通过AppleScript支持或其他方式参与IAC,否则您只需触摸其窗口或您自己的堆空间之外的任何其他内容。