如何确定特定NSScreen上是否正在运行全屏应用程序

tho*_*chs 5 macos cocoa objective-c fullscreen appkit

在Cocoa / AppKit中,从给出一个屏幕[NSScreen screens],我如何确定在该特定屏幕上是否正在运行全屏应用程序?我对使用Cocoa API进行全屏显示的应用程序最感兴趣,但是如果有一种解决方案还包含其他类型的全屏显示应用程序,则更好。该解决方案需要能够通过Mac App Store批准。

我的特定用例涉及一个菜单栏应用程序(NSStatusItem),并弄清楚是否完全显示了菜单栏[NSScreen mainScreen],以便允许全局键盘快捷方式在状态项(如果可见)上显示弹出框的位置,或在其上浮动窗口,如果没有可见的状态项。

NSScreens本身似乎没有公开有关Windows /应用程序的任何信息,NSRunningApplication也没有公开此信息。

也许有Carbon API可以找到答案吗?例如,如果我有一个窗口列表,则可以遍历它们,查看是否有任何窗口框架与屏幕框架完全匹配。另一方面,可能有一些具有类似框架但在其他应用程序下运行的应用程序(例如Backdrop应用程序,https: //itunes.apple.com/us/app/backdrop/id411461952?mt =12),因此这样的方法需要查看窗口级别。

Ken*_*ses 6

您可以尝试使用 CGWindowList API,例如CGWindowListCopyWindowInfo().

如果你只是想知道,如果菜单栏显示时,你应该能够检查-[NSApplication currentSystemPresentationOptions]NSApplicationPresentationAutoHideMenuBarNSApplicationPresentationHideMenuBar。该方法还可以告诉您活动应用程序是否处于 Cocoa 全屏模式 ( NSApplicationPresentationFullScreen)。

  • 注意:使用 `currentSystemPresentationOptions` 不起作用——即使有一个全屏应用程序在唯一的屏幕上运行,我仍然会返回 `0` 在我的菜单栏应用程序中调用它。 (2认同)