了解应用程序在可可mac OSX中是否处于非活动状态的最佳方法?

tob*_*s91 6 macos cocoa objective-c

所以,我正在建立一个将在公共场所展出的节目,我有一个任务是为它做一个不活跃的状态.只需在屏幕上的文件夹中显示一些随机视频,如屏幕保护程序,但在应用程序中.

那么检查用户是否处于非活动状态的最佳和正确方法是什么?

我正在考虑的是某种全局计时器,它会在每个用户输入上重置,如果达到,则让它说1分钟进入非活动模式.有没有更好的方法?

Par*_*fna 5

您可以使用 CGEventSourceSecondsSinceLastEventType

返回自 Quartz 事件源的最后一个事件以来经过的时间。

/*
 To get the elapsed time since the previous input event—keyboard, mouse, or tablet—specify kCGAnyInputEventType.
 */
- (CFTimeInterval)systemIdleTime
{       
    CFTimeInterval timeSinceLastEvent = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateHIDSystemState, kCGAnyInputEventType);
    return timeSinceLastEvent;
}
Run Code Online (Sandbox Code Playgroud)


Wil*_*and 1

这听起来可能是一个愚蠢的问题;但为什么不直接设置一个屏幕保护程序呢?

如果您需要在用户走开时进行任何重置或清理,您可以侦听名为 @"com.apple.screensaver.didstart" 的 NSNotification。

编辑:您还可以设置屏幕保护程序;等待它启动,然后在它启动时做你自己的事情,当你显示自己的视频时停止屏幕保护程序;但以正确的方式设置屏幕保护程序可能是个好主意。