【问题标题】:How to detect that an app (such as Quicktime) is preventing the screensaver running如何检测应用程序(例如 Quicktime)阻止屏幕保护程序运行
【发布时间】:2012-03-15 22:55:45
【问题描述】:

我想阻止我的应用在用户观看电影、运行幻灯片或执行任何其他活动时执行某些操作,其中机器正在使用但鼠标和键盘处于空闲状态。

我知道每 30 秒调用一次UpdateSystemActivity() 会阻止屏幕保护程序启动,但我想知道是否有任何方法可以检测到屏幕保护程序是否被阻止运行。

它必须是 App Store 安全的

【问题讨论】:

    标签: macos cocoa


    【解决方案1】:

    我的笔记说有一种方法可以使用未记录的类ScreenSaverController。这是标题:

    @interface ScreenSaverController : NSObject
    {
        void *_reserved;
    }
    
    + (id)controller;
    + (id)enginePath;
    - (id)init;
    - (void)dealloc;
    - (BOOL)screenSaverIsRunning;
    - (BOOL)screenSaverCanRun;
    - (void)setScreenSaverCanRun:(BOOL)arg1;
    - (void)screenSaverStartNow;
    - (void)screenSaverStopNow;
    - (void)restartForUser:(id)arg1;
    - (double)screenSaverTimeRemaining;
    - (BOOL)screenSaverIsRunningInBackground;
    - (void)screenSaverDidFadeInBackground:(BOOL)arg1
            psnHi:(unsigned int)arg2
            psnLow:(unsigned int)arg3;
    
    @end
    

    下面是如何使用它:

    ScreenSaverController *ssc = [ScreenSaverController controller];
    if ([ssc screenSaverCanRun]) { ... }
    [ssc release];
    

    请注意,您需要链接到 ScreenSaver 框架才能使用它。由于这是一个未记录的类,这样做会使您的应用程序不符合 Mac App Store 的条件。

    还可以看看screenSaverTimeRemaining——一些阻止屏幕保护程序启动的方法可能只是不断地重置它。

    【讨论】:

    • 感谢您的回答,但我一直在寻找应用商店安全的解决方案。我更新了问题。如果没有其他问题,我会接受你的回答。
    猜你喜欢
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2020-07-04
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多