如何以编程方式阻止 Mac 进入睡眠状态?
有没有办法使用 Objective-C 以编程方式阻止 Mac 进入睡眠状态? Apple 开发网站上的 I/O 套件基础知识部分告诉我,驱动程序会收到空闲/系统睡眠的通知,但我找不到阻止系统睡眠的方法。有可能吗?
我遇到过一些使用 Caffeine、jiggler、sleepless 甚至 AppleScript 的其他解决方案,但我想在 Objective-C 中做到这一点。谢谢。
Is there way to prevent a Mac from going to sleep programmatically using Objective-C? The I/O kit fundamentals section on Apple's dev site tells me that a driver gets notified of an idle / system sleep, but I can't find a way of preventing the system from sleeping. Is it even possible?
I've come across some other solutions using Caffeine, jiggler, sleepless and even AppleScript, but I want to do this in Objective-C. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只需创建一个 NSTimer 来触发一个函数,
我很确定这正是 Caffeine 所做的。
Just create an NSTimer that fires a function with this
I'm pretty sure that that's exactly what Caffeine does.
Apple 的 Q&A1340 取代了 Q&A1160。最新的问答回答了“问:当计算机进入睡眠状态或从睡眠状态唤醒时,我的应用程序如何收到通知?如何阻止睡眠?”
Q&A1340 的清单 2:
请注意,您只能停止空闲时间睡眠,不是用户触发的睡眠。
对于支持 Mac OS X 10.6 及更高版本的应用程序,请使用新的 IOPMAssertion 函数系列。这些函数允许其他应用程序和实用程序看到您的应用程序不希望休眠的愿望;这对于与第三方电源管理软件无缝协作至关重要。
Apple's Q&A1340 replaces Q&A1160. The latest Q&A answers the question "Q: How can my application get notified when the computer is going to sleep or waking from sleep? How do I prevent sleep?"
Listing 2 of Q&A1340:
Note that you can only stop idle time sleep, not sleep triggered by the user.
For applications supporting Mac OS X 10.6 and later, use the new IOPMAssertion family of functions. These functions allow other applications and utilities to see your application's desire not to sleep; this is critical to working seamlessly with third party power management software.
这是苹果官方文档(包括代码片段):
技术问答 QA1340 - 如何防止睡眠?
引用:在 Mac OS X 10.6 Snow Leopard 中使用 I/O Kit 防止睡眠:
对于较旧的 OSX 版本,请检查以下内容:
技术问答 QA1160 - 如何在我的应用程序运行时防止系统睡眠正在运行?
引用: UpdateSystemActivity 的示例用法(<10.6 的规范方式)
Here is the official Apple documentation (including code snippet):
Technical Q&A QA1340 - How to I prevent sleep?
Quote: Preventing sleep using I/O Kit in Mac OS X 10.6 Snow Leopard:
For older OSX version, check the following:
Technical Q&A QA1160 - How can I prevent system sleep while my application is running?
Quote: Example usage of UpdateSystemActivity (the canonical way for < 10.6)