【发布时间】:2012-03-15 22:55:45
【问题描述】:
我想阻止我的应用在用户观看电影、运行幻灯片或执行任何其他活动时执行某些操作,其中机器正在使用但鼠标和键盘处于空闲状态。
我知道每 30 秒调用一次UpdateSystemActivity() 会阻止屏幕保护程序启动,但我想知道是否有任何方法可以检测到屏幕保护程序是否被阻止运行。
它必须是 App Store 安全的
【问题讨论】:
我想阻止我的应用在用户观看电影、运行幻灯片或执行任何其他活动时执行某些操作,其中机器正在使用但鼠标和键盘处于空闲状态。
我知道每 30 秒调用一次UpdateSystemActivity() 会阻止屏幕保护程序启动,但我想知道是否有任何方法可以检测到屏幕保护程序是否被阻止运行。
它必须是 App Store 安全的
【问题讨论】:
我的笔记说有一种方法可以使用未记录的类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——一些阻止屏幕保护程序启动的方法可能只是不断地重置它。
【讨论】: