objective-c – 用户在OS X上空闲后的通知?

检测用户何时空闲X时间,然后检测用户何时立即处于活动状态的最佳方法是什么?

我知道有NSWorkspace提供将要/做睡眠/唤醒通知,但我不能依赖它,因为睡眠设置通常约为15分钟.我需要能够检测用户是否闲置了大约1-2分钟.

这个answer提供了一种获取空闲时间的方法.如果可能的话,我想避免投票.

最佳答案 据我所知,轮询是你唯一的选择.当用户1118321指出时,每O(分钟)轮询不太可能导致任何问题,性能或其他问题.

如果您的应用程序有GUI并且无论如何都会收到UI事件,您可以通过[NSEvent addLocalMonitorForEventsMatchingMask:handler:]安装一个处理程序,它会在每个事件上重置您的计时器.如果用户始终处于活动状态,至少在您自己的应用中,这将有助于减少甚至消除民意调查.

一旦确定用户空闲时间足够长,您就可以安装全局事件点击以观察下一个事件.请参阅 – [NSEvent addGlobalMonitorForEventsMatchingMask:handler:].

注意:如果可能的话,应该使用CGEventSourceSecondsSinceLastEventType而不是戳到IO注册表.它是一个正式的,受支持的API,可能更有效.更不用说它更简单了.虽然它依赖于Carbon,但也有UKIdleTimer,因此可能不适用.

点赞