Swift:如何在 macOS 中观察屏幕是否被锁定

ixa*_*any 4 macos cocoa swift quartz

我想检测用户是否使用Swift.

基于此答案,我创建了以下代码:

import Cocoa
import Quartz

if let dict = Quartz.CGSessionCopyCurrentDictionary() as? [String : Any] {
    let locked = dict["CGSSessionScreenIsLocked"]
    print(locked as? String ?? "")
}
Run Code Online (Sandbox Code Playgroud)

...如果我明确运行代码,这似乎工作正常。

但是如何观察值以便在值更改时得到通知?

poi*_*tum 7

您可以观察分布式通知。它们没有记录。

let dnc = DistributedNotificationCenter.default()

lockObserver = dnc.addObserver(forName: .init("com.apple.screenIsLocked"),
                               object: nil, queue: .main) { _ in
    NSLog("Screen Locked")
}

unlockObserver = dnc.addObserver(forName: .init("com.apple.screenIsUnlocked"),
                                 object: nil, queue: .main) { _ in
    NSLog("Screen Unlocked")
}
Run Code Online (Sandbox Code Playgroud)