如何使用Mac上的系统首选项以编程方式安排系统唤醒?

时间:2011-02-10 15:47:52

标签: objective-c cocoa macos wakeup

我想以编程方式唤醒Mac。我开始使用IOPMSchedulePowerEvent,但是,该方法需要管理员访问权限和特权帮助程序。我已经实现并且它有效但是太复杂了。

我一直在寻找更好的方法,并发现您可以通过转到系统偏好设置 - >来安排系统唤醒。节能器 - >时间表。有没有办法以编程方式使用此方法安排唤醒时间?

感谢。

编辑:我了解系统需要管理员访问才能安排系统唤醒和睡眠时间。那没问题。我希望能够以编程方式执行此操作。让用户授权该功能是可以的,前提是它们只被询问一次。设置系统唤醒时间的后续请求不需要用户授权。

4 个答案:

答案 0 :(得分:2)

使用IOPMSchedulePowerEvent是正确的做法。但是,如果您创建特权帮助工具,则只需提示用户一次输入他/她的密码。 Apple的BetterAuthorizationSample代码提供了如何执行此操作的示例;还有一个第三方修改AuthorizedTasksInCocoa,它可能更容易使用(我还没有尝试过)。

答案 1 :(得分:1)

我没有给你一个完整的答案,但这应该有很大的帮助: http://www.opensource.apple.com/source/PowerManagement/PowerManagement-211/pmset/pmset.c

您要做的是安排kIOPMAutoWake。在代码中找到常量(不是其变体)并开始阅读。这不长。

你甚至可以直接使用pmset,但这样会非常不优雅。

至于提升,Apple在Secure Coding Guide中讨论了它。

答案 2 :(得分:0)

我很确定这是为了要求管理员访问权限。例如,“系统偏好设置”中的选项 - >节能器 - >除非您以管理员身份登录或已作为管理员身份验证到系统偏好设置,否则计划不可用。如果你找到了一种没有任何特殊权限的方法,我希望Apple将其视为一个安全漏洞并修复它(从而破坏你的程序)。

答案 3 :(得分:0)

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

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

==>正常睡眠与翻盖闭合睡眠不同。要影响后者,你必须编写像Insomnia这样的内核扩展。