【问题标题】:Getting the main window of an app via an NSRunningApplication instance通过 NSRunningApplication 实例获取应用程序的主窗口
【发布时间】:2011-02-25 16:27:08
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: objective-c macos macruby


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我会看看这两个 API。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我会研究无障碍 API。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2012-06-30
      • 2013-05-09
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多