【发布时间】:2010-05-02 03:31:55
【问题描述】:
有没有办法在 Mac OS X 屏幕保护程序激活或进入睡眠状态时触发操作(最好使用可可)?
【问题讨论】:
标签: cocoa macos detect screensaver
有没有办法在 Mac OS X 屏幕保护程序激活或进入睡眠状态时触发操作(最好使用可可)?
【问题讨论】:
标签: cocoa macos detect screensaver
您可以注册各种分布式通知 — 在 10.6 上,我看到了 com.apple.screenIsLocked/screenIsUnlocked 和 com.apple.screensaver.didstart/willstop/didstop。 (旧版本的 Mac OS X 可能没有所有这些通知。)您可以使用Notification Watcher 观察通知。
另见this answer。
【讨论】:
使用 swift 快速 sn-p:
NSDistributedNotificationCenter.defaultCenter().addObserver(
self,
selector: "screenIsLocked:",
name: "com.apple.screenIsLocked",
object: nil)
self 是你要注册的观察者,selector 是函数处理程序,name 是通知名称,object 是可选的通知发送者,如果指定,只有来自这个发送者的通知才会传递给观察者。
另请注意,您可以将 nil 作为名称传递并接收发送的所有通知,而不仅仅是指定的通知。
PS:您可以订阅许多通知,因此请确保您知道它们是哪个对象的成员才能使用它们。例如查看NSDistributedNotificationCenter、NSNotificationCenter 和NSWorkspace 通知。
【讨论】:
迅速 4:
DistributedNotificationCenter.default().addObserver(self, selector: #selector(screenIsLocked(_:)), name: Notification.Name("com.apple.screenIsLocked"), object: nil)
处理程序:
@objc func screenIsLocked(_ notification: Notification) {
// do stuff here
}
【讨论】: