5

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

我环顾四周寻找更好的方法,发现您可以通过转到系统偏好设置 -> 节能器 -> 计划来安排系统唤醒。有没有办法使用这种方法以编程方式安排唤醒时间?

谢谢。

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

4

4 回答 4

2

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

于 2011-02-19T18:18:16.103 回答
1

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

您要做的是安排一个kIOPMAutoWake. 在代码中找到该常数(不是其变体)并开始阅读。时间不长。

您甚至可以pmset直接使用,但这很不雅。

至于提升,Apple 在Secure Coding Guide中谈到了它。

于 2011-02-19T17:46:34.897 回答
0

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

于 2011-02-10T18:55:44.657 回答
0

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

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

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

于 2011-02-22T11:27:37.773 回答