在Mac上检测全屏应用程序

7

我正在使用Cocoa开发一个简单的应用程序,想要检测是否有任何应用程序在全屏模式下运行。这是否可能?

通过运行Applications API,我可以获取各种信息,但没有与全屏模式相关的特定属性。有人知道如何检测它吗?是否有任何碳事件或API可用于此?


1
类似于https://dev59.com/Rmw05IYBdhLWcg3wnjAk?rq=1 - Jay
@Jay 感谢您指出这些链接,我还有一个问题:如果任何应用程序正在全屏模式下运行,并且如果任何其他应用程序放置了警报消息,会发生什么?以及类似于苹果的更新可用功能显示的OSD(toast)消息会发生什么情况...您能否帮助我找到这些答案。 - sandy Surname or Initialc
嗯,您可能需要激活您的应用程序才能像https://dev59.com/OW435IYBdhLWcg3wtCSQ?rq=1中那样显示警报? - Jay
好的,但我的基本问题是如何检测用户应用程序是否已退出全屏模式?这是我想做的...我想向用户显示一个像吐司一样的消息,但有一个条件,如果用户有任何全屏应用程序,比如游戏或任何应用程序,那么我就不必显示它,然后当应用程序从全屏模式退出时,我想显示这个消息,所以有没有办法检测它? - sandy Surname or Initialc
3个回答

3
我在春季遇到了这个问题,花费了很长时间来解决它。最终我将我的代码打包成了一个小的GitHub项目,但是我完全忘记在这里分享它了。
希望这对某人有用。 https://github.com/shinypb/FullScreenDetector

2

无论如何,经过尝试多种选项并深入研究NSWorkspace,我找到了一种方法来实现这一点,即使用通知。

"NSWorkspaceActiveSpaceDidChangeNotification"

苹果文档中说:“当发生Spaces更改时发布。”因此我们可以通过使用它来进行注册。除此之外,我们还需要使用NSWindow的属性“isOnActiveSpace”,这样我们就可以检测应用程序何时进入全屏模式并退出全屏模式。


我尝试将观察者添加到NSWorkspaceActiveSpaceDidChangeNotification通知中。但它只在调试模式下工作。在发布模式下是否有任何系统限制? - Gon
这是从10.6版本开始提供的,可以交叉检查一下,没有任何限制,直接就应该可用。 - sandy Surname or Initialc
奇怪。我会深入研究它。 - Gon
2
空间更改不仅在应用程序进入或退出全屏模式时发生。用户可以拥有任意数量的非全屏幕。你计划测试哪个窗口的“-isOnActiveSpace”? - Ken Thomases

1

你想对-[NSApplication currentSystemPresentationOptions]进行键值观察。当活动应用程序处于全屏模式时,该属性将包括NSApplicationPresentationFullScreen


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接