我找到了部分解决方案:OSX: check if the screen is locked
在Mac OS X上,我知道在Cocoa中,我可以设置一个观察器来检测将来的屏幕保护程序事件或工作区锁定事件,如下所示:
- (id)init {
if ((self = [super init])) {
NSDistributedNotificationCenter* distCenter =
[NSDistributedNotificationCenter defaultCenter];
[distCenter addObserver:self
selector:@selector(onScreenSaverStarted:)
name:@"com.apple.screensaver.didstart"
object:nil];
[distCenter addObserver:self
selector:@selector(onScreenSaverStopped:)
name:@"com.apple.screensaver.didstop"
object:nil];
[distCenter addObserver:self
selector:@selector(onScreenLocked:)
name:@"com.apple.screenIsLocked"
object:nil];
[distCenter addObserver:self
selector:@selector(onScreenUnlocked:)
name:@"com.apple.screenIsUnlocked"
object:nil];
}
return self;
}
但是在添加这些观察者之前,是否有任何方法可以测试屏幕保护程序是否正在运行,或者工作空间是否已锁定?
您可以通过使用-来检查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())
我找到了部分解决方案:OSX: check if the screen is locked
不过,使用此方法的问题是,即使您将“ require password delay”设置为大于立即设置的值,它仍会在屏幕保护程序启动时锁定它。任何人都知道一种区分“仅屏幕保护程序处于打开状态”和“屏幕保护程序处于打开状态并已锁定(如现在的鼠标移动将显示密码屏幕)”的方法吗?]
我找到了部分解决方案:OSX: check if the screen is locked