老谭笔记

获取OSX系统的状态切换消息

在OSX开发的程序中,我们经常需要知道系统的一些状态改变而对程序做出一定的处理,比如系统睡眠、唤醒、切换用户、屏幕关闭、显示屏保等等系统状态。

获取这些状态改变的需要两种方式,方式1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(sleepMethod:)
name:NSWorkspaceWillSleepNotification
object:nil];
//其中能捕获到的状态有:
NSWorkspaceWillSleepNotification睡眠
NSWorkspaceDidWakeNotification从睡眠中唤醒
NSWorkspaceWillPowerOffNotification当用户注销或关机
NSWorkspaceSessionDidResignActiveNotification被切换到另一用户
NSWorkspaceSessionDidBecomeActiveNotification被切换回到当前用户
NSWorkspaceScreensDidSleepNotification屏幕睡眠
NSWorkspaceScreensDidWakeNotification屏幕唤醒

对于某一些系统状态(如屏保出现)就需要以下的NSDistributedNotificationCenter(跨进程的通知)来实现了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
selector:@selector(screensaverStart:)
name:@"com.apple.screensaver.didstart"
object:nil];
//其中的通知名称可以是:
com.apple.screensaver.didstart屏保开始
com.apple.screensaver.willstop屏保将要结束
com.apple.screensaver.didstop屏保结束
com.apple.screenIsLocked屏幕锁住
com.apple.screenIsUnlocked屏幕解锁