在mac os x上,我知道在cocoa中我可以设置一个观察者来检测未来的屏幕保护程序事件或者修改用户锁定事件,如下所示:
27
28 - (id)init {
29 if ((self = [super init])) {
30 NSDistributedNotificationCenter* distCenter =
31 [NSDistributedNotificationCenter defaultCenter];
32 [distCenter addObserver:self
33 selector:@selector(onScreenSaverStarted:)
34 name:@"com.apple.screensaver.didstart"
35 object:nil];
36 [distCenter addObserver:self
37 selector:@selector(onScreenSaverStopped:)
38 name:@"com.apple.screensaver.didstop"
39 object:nil];
40 [distCenter addObserver:self
41 selector:@selector(onScreenLocked:)
42 name:@"com.apple.screenIsLocked"
43 object:nil];
44 [distCenter addObserver:self
45 selector:@selector(onScreenUnlocked:)
46 name:@"com.apple.screenIsUnlocked"
47 object:nil];
48 }
49 return self;
50 }
51
但是在我添加这个观察者之前说,有没有办法测试屏幕保护程序是运行还是用户锁定?
由于
答案 0 :(得分:1)
您可以使用-
通过检查ScreenSaverEngine
进程是否正在运行来检查屏幕保护程序是否正在运行
pgrep ScreenSaverEngine
您可以使用-
进行尝试while true
do
pgrep ScreenSaverEngine
sleep 1
done
然后打开屏幕保护程序。
用于检查锁屏-
安装quartz
-
pip install pyobjc-framework-Quartz
很多简单的代码-
import Quartz
d = Quartz.CGSessionCopyCurrentDictionary()
print('CGSSessionScreenIsLocked' in d.keys())
答案 1 :(得分:0)
我找到了部分解决方案:OSX: check if the screen is locked
使用此方法的问题是它认为在屏幕保护程序出现的那一刻它被锁定,即使你有"需要密码延迟"设置为大于立即的东西。任何人都知道如何区分"只是屏幕保护程序在"和"屏幕保护开启和锁定(如现在鼠标移动将显示密码屏幕)" ?