【问题标题】:How to wake from sleep programmatically if lid closed?如果盖子关闭,如何以编程方式从睡眠中唤醒?
【发布时间】:2011-03-19 22:40:01
【问题描述】:

我想以编程方式将系统从睡眠中唤醒,有什么办法吗?

我已阅读以下链接: http://developer.apple.com/mac/library/qa/qa2004/qa1340.html

这里只讨论获取通知,但不确定有没有办法将系统从睡眠中唤醒?

我很欣赏这些信息的一些线索......

更新:

根据我尝试使用 IOPMSchedulePowerEvent 的建议

我使用过的代码:

NSCalendarDate  *timeIntervalSinceNow = [NSCalendarDate dateWithTimeIntervalSinceNow:40];
IOReturn result = IOPMSchedulePowerEvent ((CFDateRef)timeIntervalSinceNow, NULL, CFSTR(kIOPMAutoWake)); 

结果:

如果合上盖子,MacBook 会失败

我做错了什么还是有什么解决办法?

【问题讨论】:

  • 另见github.com/iccir/Fermata,但和其他人一样,它只是在翻盖时“阻止”睡眠,不知道是否有任何方法可以“唤醒”睡眠中的 Mac……

标签: objective-c cocoa macos


【解决方案1】:

您可以通过电源管理器使用 IOPMSchedulePowerEvent 安排唤醒事件。您可以安排立即唤醒。 pmset 是电源管理器的命令行包装器。在某些情况下,您还可以使用 IOCancelPowerChange 防止睡眠。

您可以通过生成鼠标或按键事件来阻止睡眠或唤醒。生成事件的一种方法是使用 CGPostKeyboardEvent。

编辑:

正常睡眠不同于翻盖式封闭睡眠。要影响后者,您必须编写像 Insomnia 这样的内核扩展。

【讨论】:

  • 如何通过生成事件唤醒?如果计算机处于睡眠状态,则您的代码没有运行。
  • 谢谢,让我试一试。你的意思是这甚至适用于基于盖子关闭的睡眠,对吗?
  • 我尝试使用 IOPMSchedulePowerEvent 从睡眠中唤醒,如果盖子关闭,它会在 MacBook 中失败。
  • 您没有在问题中提到盖子正在关闭。您必须编写一个内核扩展来防止盖子关闭时休眠。 InsomniaX 这样做。一旦你编写了这样一个内核扩展,你就会更好地了解当翻盖关闭时从睡眠中唤醒,但我怀疑你只需要阻止睡眠。
  • 实际上,InsomniaX 是Insomnia 内核扩展的包装器,它有可用的源代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2016-12-27
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2022-11-13
相关资源
最近更新 更多