Win32 API 日本語リファレンス
ホームSystem.Mmc › IConsolePower

IConsolePower

COM
IID1cfbdd0e-62ca-49ce-a3af-dbb2de61b068継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IConsolePower インターフェイスは、電源管理をサポートするオペレーティングシステムにおいて、実行状態とアイドルタイマーを制御します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT SetExecutionState(DWORD dwAdd, DWORD dwRemove)

SetExecutionState メソッドは、現在のスレッドの実行状態を設定します。

dwAddDWORDin

スナップインの実行状態に追加するフラグです。以下のフラグを 0 個以上組み合わせて指定できます。

ES_DISPLAY_REQUIRED

ディスプレイ(モニター)の電源管理要件です。dwAdd に指定すると、スナップインはオペレーティングシステムがディスプレイの電源管理ルーチンを呼び出すことを禁止します。

ES_SYSTEM_REQUIRED

システムの電源管理要件です。dwAdd に指定すると、スナップインはオペレーティングシステムがシステムの電源管理ルーチンを呼び出すことを禁止します。

dwRemoveDWORDin

スナップインの実行状態から削除するフラグです。前述のフラグを 0 個以上組み合わせて指定できます。1 つ以上のフラグを指定すると、スナップインは以前の SetExecutionState の呼び出しで設定した電源管理要件を無効にできます。

Note 電源管理要件は、有効にする前に必ず無効にしておく必要があります。先に無効にせずに電源管理要件を有効にしようとすると、エラー E_INVALIDARG が返されます。

戻り値

成功した場合、戻り値は S_OK です。電源管理をサポートしないシステムで呼び出された場合、このメソッドは S_FALSE を返します。その他の戻り値はエラーコードを示します。

解説(Remarks)

SetThreadExecutionState ではなく IConsolePower::SetExecutionState を呼び出してください。スナップインは SetThreadExecutionState 関数を直接呼び出してはなりません。直接呼び出すと、同一スレッド上で複数のスナップインが実行されている場合に競合が発生します。

スナップインは自身の電源要件を定義し、 SetExecutionState を呼び出して MMC に送信します。スナップインが SetExecutionState を呼び出すと、その実行状態はスナップインが再度 SetExecutionState を呼び出すまで有効なままになります。SetExecutionState を呼び出した後は、以降の SetExecutionState の呼び出しに同一インスタンスの IConsolePower インターフェイスを使用しなければならないことに注意してください。スナップインが同一インスタンスの IConsolePower を使用しない場合、MMC は SetThreadExecutionState を適切に呼び出せません。MMC は各スナップインの実行状態を追跡する配列を保持しており、スレッド上で実行されているすべてのスナップインに対して SetThreadExecutionState を呼び出します。

Examples

HRESULT hr;

// ディスプレイとシステムが必要であることを指定します。
// pConsolePower は事前に CoCreateInstance メソッドで
// 作成されています。
hr = pConsolePower->SetExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED,0);
switch (hr)
{
    case S_OK:
        OutputDebugString(_T("SetExecutionState: Succeeded\n"));
        break;

    case S_FALSE:
        // システムが電源管理をサポートしていません。
        OutputDebugString(_T("SetExecutionState: Unsupported\n"));
        break;

    default:
        // 予期しないエラーが発生しました。
        OutputDebugString(_T("SetExecutionState: Failure\n"));
        break;
}
vtbl 4 HRESULT ResetIdleTimer(DWORD dwFlags)

ResetIdleTimer メソッドは、指定された電源管理のアイドルタイマーをリセットします。

dwFlagsDWORDin

アイドルタイマーをリセットするために使用するフラグです。以下のフラグを 1 つ以上使用できます。詳細については、 SetThreadExecutionState を参照してください。

ES_DISPLAY_REQUIRED

ディスプレイ(モニター)のアイドルタイマーをリセットします。

ES_SYSTEM_REQUIRED

システムのアイドルタイマーをリセットします。

戻り値

成功した場合、戻り値は S_OK です。電源管理をサポートしないシステムで呼び出された場合、このメソッドは S_FALSE を返します。その他の戻り値はエラーコードを示します。

解説(Remarks)

SetThreadExecutionState を呼び出す代わりに IConsolePower::ResetIdleTimer を呼び出してください。スナップインは SetThreadExecutionState 関数を直接呼び出してはなりません。直接呼び出すと、同一スレッド上で複数のスナップインが実行されている場合に競合が発生します。代わりに、スナップインは SetExecutionState を呼び出す必要があります。アイドルタイマーをリセットすると、アイドル期間の計測が最初からやり直されます。スナップインが IConsolePower::SetExecutionState を呼び出して継続的な実行状態を指定していない場合、 ResetIdleTimer を定期的に呼び出すことで、システムまたはディスプレイの電源管理ルーチンが呼び出されるまでの時間を延ばすことができます。

Examples

HRESULT hr;

// ディスプレイとシステムの両方のアイドルタイマーをリセットします。
// pConsolePower は事前に CoCreateInstance メソッドで
// 作成されています。
hr = pConsolePower->ResetIdleTimer(
             ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);
switch (hr)
{
    case S_OK:
        OutputDebugString(_T("ResetIdleTimer: Succeeded\n"));
        break;

    case S_FALSE:
        // システムが電源管理をサポートしていません。
        OutputDebugString(_T("ResetIdleTimer: Unsupported\n"));
        break;

    default:
        // 予期しないエラーが発生しました。
        OutputDebugString(_T("ResetIdleTimer: Failure\n"));
        break;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IConsolePower "{1CFBDD0E-62CA-49CE-A3AF-DBB2DE61B068}"
#usecom global IConsolePower IID_IConsolePower "{}"
#comfunc global IConsolePower_SetExecutionState  3 int,int
#comfunc global IConsolePower_ResetIdleTimer     4 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。