2

ある種のメディアを再生しているアプリケーションがあり、アプリケーションの実行時にコンピューターをスリープ状態にしたくありません。調べてみると、これはP/Invokeで実行できることがわかりました。

ディスプレイをオフにしたり、コンピューターをスリープ状態にしたりしないでください。だから、私はこれをテストするために次のことをしました:

b.Click += (x, y) =>
                {
                    SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUIRED);
                    Debug.WriteLine("Power line executed");
                };

 [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);

        [FlagsAttribute]
        public enum EXECUTION_STATE : uint
        {
            ES_AWAYMODE_REQUIRED = 0x00000040,
            ES_CONTINUOUS = 0x80000000,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_SYSTEM_REQUIRED = 0x00000001
        }

ただし、しばらくするとコンピュータはまだスリープ状態になりました。ここに何が欠けていますか?

4

2 に答える 2

4

アウェイモードはXPではサポートされていません。継続的に使用| ディスプレイ| 代わりにシステム。

于 2012-04-07T06:55:05.667 に答える
3

SetThreadExecutionState

アウェイモードを有効にするために、アプリケーションはES_AWAYMODE_REQUIREDとES_CONTINUOUSの両方を使用します。アウェイモードを無効にするには、アプリケーションがES_CONTINUOUSを指定してSetThreadExecutionStateを呼び出し、ES_AWAYMODE_REQUIREDをクリアします。アウェイモードが有効になっている場合、コンピューターをスリープ状態にする操作は、代わりにアウェイモードになります。システムがユーザー入力を必要としないタスクを実行し続けている間、コンピューターはスリープ状態になっているように見えます。アウェイモードは、スリープアイドルタイマーには影響しません。タイマーの期限が切れたときにシステムがスリープ状態にならないようにするには、アプリケーションでES_SYSTEM_REQUIRED値も設定する必要があります

于 2012-04-07T07:02:14.267 に答える