测试屏幕保护程序是否正在运行或工作空间是否已锁定

问题描述 投票:2回答:2

在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;
}

但是在添加这些观察者之前,是否有任何方法可以测试屏幕保护程序是否正在运行,或者工作空间是否已锁定?

objective-c macos cocoa core-graphics core-foundation
2个回答
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())

我找到了部分解决方案:OSX: check if the screen is locked

不过,使用此方法的问题是,即使您将“ require password delay”设置为大于立即设置的值,它仍会在屏幕保护程序启动时锁定它。任何人都知道一种区分“仅屏幕保护程序处于打开状态”和“屏幕保护程序处于打开状态并已锁定(如现在的鼠标移动将显示密码屏幕)”的方法吗?]


0
投票

我找到了部分解决方案:OSX: check if the screen is locked

© www.soinside.com 2019 - 2024. All rights reserved.