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 でスリープを防止することもできます。

マウスまたはキーイベントを生成することで、スリープまたはウェイクアップを防止できる場合があります。イベントを生成する 1 つの方法は、CGPostKeyboardEvent を使用することです。

==>通常の睡眠は、クラムシェルの閉じた睡眠とは異なります. 後者に影響を与えるには、Insomnia のようなカーネル拡張を作成する必要があります。

于 2011-02-22T11:27:37.773 に答える