Какое событие запускается, когда Mac возвращается из сна? - PullRequest
9 голосов
/ 12 февраля 2012

Я занимаюсь разработкой приложения для Xcode на Mac и хотел бы знать событие, которое запускается, когда Mac возвращается из спящего режима.AwakeFromNib, похоже, не работает.

Спасибо!

Ответы [ 3 ]

10 голосов
/ 12 февраля 2012

Только что нашел:

- (void) receiveWakeNote: (NSNotification*) note
{
    NSLog(@"receiveSleepNote: %@", [note name]);
}

- (void) fileNotifications
{
    //These notifications are filed on NSWorkspace's notification center, not the default 
    // notification center. You will not receive sleep/wake notifications if you file 
    //with the default notification center.
     [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self 
                                                           selector: @selector(receiveWakeNote:) 
                                                               name: NSWorkspaceDidWakeNotification object: NULL];
}
8 голосов
/ 28 сентября 2017

Для быстрых 3:

func onWakeNote(note: NSNotification) {
    print("Received wake note: \(note.name)")
}

func onSleepNote(note: NSNotification) {
    print("Received sleep note: \(note.name)")
}

func fileNotifications() {
    NSWorkspace.shared().notificationCenter.addObserver(
        self, selector: #selector(onWakeNote(note:)),
        name: Notification.Name.NSWorkspaceDidWake, object: nil)

    NSWorkspace.shared().notificationCenter.addObserver(
        self, selector: #selector(onSleepNote(note:)),
        name: Notification.Name.NSWorkspaceWillSleep, object: nil)
}

Для Swift 4:

@objc func onWakeNote(note: NSNotification) {
    ...
}

@objc func onSleepNote(note: NSNotification) {
    ...
}

func fileNotifications() {
    NSWorkspace.shared.notificationCenter.addObserver(
        self, selector: #selector(onWakeNote(note:)),
        name: NSWorkspace.didWakeNotification, object: nil)

    NSWorkspace.shared.notificationCenter.addObserver(
        self, selector: #selector(onSleepNote(note:)),
        name: NSWorkspace.willSleepNotification, object: nil)
}
2 голосов
/ 12 февраля 2012

Вы можете использовать IORegisterForSystemPower () .

Соединяет вызывающего абонента с IOService корневого домена питания для этой цели получения уведомлений о сне и бодрствовании для системы. Не обеспечить отключение системы и перезапустить уведомления.

io_connect_t IORegisterForSystemPower (
    void *refcon, 
    IONotificationPortRef *thePortRef, 
    IOServiceInterestCallback callback, 
    io_object_t *notifier ) ;  

Посмотрите на В: Как мое приложение может получать уведомления, когда компьютер собирается спать или просыпается? Как мне предотвратить сон?

...