代码之家  ›  专栏  ›  技术社区  ›  ixany

如何观察屏幕是否锁定在MacOS中

  •  0
  • ixany  · 技术社区  · 5 年前

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

    基于 on this answer 我创建了以下代码:

    import Cocoa
    import Quartz
    
    if let dict = Quartz.CGSessionCopyCurrentDictionary() as? [String : Any] {
        let locked = dict["CGSSessionScreenIsLocked"]
        print(locked as? String ?? "")
    }
    

    …如果我显式地运行代码的话,这似乎可以很好地工作。

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

    1 回复  |  直到 5 年前
        1
  •  1
  •   pointum    5 年前

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

    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")
    }