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

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

检测用户何时空闲了 X 时间,然后检测用户何时立即活跃的最佳方法是什么?

我知道有 NSWorkspace 提供 will/did sleep /唤醒通知,但我不能依赖它,因为 sleep 设置通常约为 15 分钟到从不。我需要能够检测用户是否闲置了约 1-2 分钟。

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

最佳答案

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

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

一旦您确定用户已经闲置了足够长的时间,您就可以安装一个全局事件点击来监视下一个事件。参见示例 -[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]

注意:你应该使用CGEventSourceSecondsSinceLastEventType如果可能的话,而不是戳入 IO 注册表。它是一个正式的、受支持的 API,并且可能更高效。更不用说它更简单了。还有 UKIdleTimer尽管它依赖于 Carbon,因此可能不适用。

关于objective-c - 用户在 OS X 上闲置后的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426428/

相关文章:

objective-c - presentModalViewController 未被释放

ios - cell.textlabel.text 无法正常工作

ios - 如何使用 XCode 5 和 iOS7 在 Mountain Lion 上安装 Boost 库

gcc - "...can' t 在使用 gcc 编译 Python C 扩展时找出...的架构类型问题

macos - OS X 终端文本堆叠在自身之上

objective-c - NSString 实例变量的奇怪行为

ios - 具有 IOS 客户端兼容性的 Websocket 服务器

xcode - 如何为 NSTableView 单元格添加填充到单元格?

macos - 如何从 Delphi 调用 NSBeep

xcode - 无法在 lion 10.7.4 中安装 Xcode 4.3.3