用户在OS X上空闲后的通知?

时间:2012-11-17 00:34:29

标签: objective-c macos osx-lion osx-mountain-lion python-idle

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

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

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

1 个答案:

答案 0 :(得分:2)

据我所知,轮询是你唯一的选择。正如user1118321指出的那样,每隔O(分钟)轮询不太可能导致任何问题,性能或其他原因。

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

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

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