Swift: как наблюдать, если экран заблокирован в macOS - PullRequest
0 голосов
/ 24 января 2019

Я хочу определить, заблокировал ли пользователь свой экран (в macOS), используя Swift.

На основании этого ответа Я создал следующий код:

import Cocoa
import Quartz

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

..., который, кажется, работает нормально, если я явно запускаю код.

Но как можно наблюдать значение, чтобы я получал уведомление при изменении значения?

1 Ответ

0 голосов
/ 25 января 2019

Вы можете наблюдать за распределенными уведомлениями. Они не документированы.

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