在Cocoa应用程序中,有没有办法判断另一个应用程序当前是否处于全屏模式?
我的应用程序配置为显示所有空格并侦听mouseEntered
个事件,以便将自己排序到前面。
问题是当另一个应用程序处于全屏模式并且用户碰巧将鼠标移动到我的应用程序窗口所在的黑色区域时,它会被带到前面(多个监视器会发生)。
我在[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];
启用时才看到上述行为。
这是我的应用程序的其他相关代码。
- (void) mouseEntered:(NSEvent *)theEvent
{
// Don't do this when another app is in full screen mode:
[[self window] orderFront:self];
}
答案 0 :(得分:1)
tell application "System Events"
tell process "Pages"
repeat with myWin in windows
get value of attribute "AXFullScreen" of myWin
end repeat
end tell
end tell
实际行动似乎在碳中...... MacWindows.h和CarbonEvents.h中都引用了“FullScreen”。
你需要研究这个。
答案 1 :(得分:1)
使用通知。例如:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(willEnterFull:)
name:NSWindowWillEnterFullScreenNotification
object:nil];
实际上,您可能希望使用NSDistributedNotificationCenter,因为它会跨进程。
您正在将对象添加为观察者,以便当其他内容发布通知将全屏进入时,您的对象将收到该通知。
选择器是您希望通知过程调用的消息/方法。
name参数是通知的实际名称。这些是标准的,除非您要为将要使用的内容创建自定义通知。
object参数用于指定要从中接收通知的对象。由于您想知道任何应用程序何时全屏显示,因此您需要保留此零值。
请记住在取消分配对象之前将其移除为观察者!
答案 2 :(得分:1)
上述注册方法
“NSWindowWillEnterFullScreenNotification”
不起作用,可用于通知您自己的应用,使用它们我们无法检测是否有其他应用程序处于全屏模式。
然而,在尝试了这么多选项后,在github发现了FullScreen探测器应用这个有用的链接.. :)):()
答案 3 :(得分:0)
经过很大的挫败之后,这对我来说非常有用,因为它获得了一个漂浮在除了全屏空间之外的所有空间上的窗口。我看到了fullScreenNone
常量名称,由于它描述了我想要的内容,因此我尝试了一下,发现它可以正常工作。
window.level = .floating
window.collectionBehavior = [.canJoinAllSpaces, .fullScreenNone]
window.canHide = false