如何全局观察didEnterFullScreenNotification?

时间:2019-04-18 03:35:42

标签: objective-c swift macos cocoa

我想让观察者NSWindow.didEnterFullScreenNotification由所有应用全局触发。怎么做?

背景信息

我正在标记水印安全性应用程序,但是当任何应用程序进入全屏模式时它不起作用,而当其他应用程序退出全屏模式时它可以工作,所以我的解决方案如下:

  1. 全局观察者NSWindow.didEnterFullScreenNotification,如果收到任何通知,则将数据发送到服务器。
// NotificationCenter.default.addObserver Can only observe within my watermark app
 NotificationCenter.default.addObserver(forName: NSWindow.didEnterFullScreenNotification, object: nil, queue: .main) { (noti) in
  print("didEnterFullScreenNotification")

 }
  1. 让此水印应用程序始终位于其他窗口的前面。但是有什么办法可以做到这一点? 3。NSEvent.addGlobalMonitorForEvents似乎那里有window属性,但仍然不知道该怎么做
  2. 我已附上一张屏幕截图供您参考,这是我的水印应用程序。

1 个答案:

答案 0 :(得分:1)

只有可以“全局”观察的通知是发布到NSDistributedNotificationCenter的通知。您在Cocoa API中看到的所有常规通知仅发布到应用程序的内部/“本地”通知中心。

您可以通过添加观察者并传递nil作为名称和对象来查看发布了哪些全局通知。然后,您可以记录收到的通知的名称。窗口全屏显示时唯一触发的通知是NSWorkspaceActiveSpaceDidChangeNotification,但这仅表示空间已更改;没有办法知道是因为窗口变成了全屏。