6

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

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

顺便说一句 - 我正在使用 MacRuby,但答案不需要在 MacRuby 中。

谢谢

4

3 回答 3

5

传统上,Apple 一直对这类事情非常严格。NSRunningApplication 本身是在 10.6 中才引入的,正如你所说,它有点受限。根据您想要做什么,答案可能在Accessibility 框架中,也可能在CGWindow API中。您可以使用 NSRunningApplication 中的 processIdentifier 将其与这些 API 匹配。

于 2009-12-30T18:09:16.030 回答
3

其他应用的主窗口很难获取;他们甚至不能保证是可可!它们可以是 Carbon 或 Java,也可以是 Qt,或 Mono ...因此,除非您进行 hack,否则您无法获得另一个应用程序的 NSWindow。您可以尝试Accessibility API以独立于使用的框架来获取其他应用程序的窗口信息等,但它并不那么容易使用。

于 2009-12-30T17:58:31.417 回答
1

除非应用程序选择通过 AppleScript 支持或其他方式参与 IAC,否则您根本不要触摸它的窗口或您自己的堆空间之外的任何其他东西。

于 2009-12-30T19:00:35.990 回答