IConsolePower
COM公式ドキュメント
IConsolePower インターフェイスは、電源管理をサポートするオペレーティングシステムにおいて、実行状態とアイドルタイマーを制御します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
SetExecutionState メソッドは、現在のスレッドの実行状態を設定します。
| dwAdd | DWORD | in | スナップインの実行状態に追加するフラグです。以下のフラグを 0 個以上組み合わせて指定できます。 ES_DISPLAY_REQUIREDディスプレイ(モニター)の電源管理要件です。dwAdd に指定すると、スナップインはオペレーティングシステムがディスプレイの電源管理ルーチンを呼び出すことを禁止します。 ES_SYSTEM_REQUIREDシステムの電源管理要件です。dwAdd に指定すると、スナップインはオペレーティングシステムがシステムの電源管理ルーチンを呼び出すことを禁止します。 |
| dwRemove | DWORD | in | スナップインの実行状態から削除するフラグです。前述のフラグを 0 個以上組み合わせて指定できます。1 つ以上のフラグを指定すると、スナップインは以前の SetExecutionState の呼び出しで設定した電源管理要件を無効にできます。 Note 電源管理要件は、有効にする前に必ず無効にしておく必要があります。先に無効にせずに電源管理要件を有効にしようとすると、エラー E_INVALIDARG が返されます。
|
戻り値
解説(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;
}
ResetIdleTimer メソッドは、指定された電源管理のアイドルタイマーをリセットします。
| dwFlags | DWORD | in | アイドルタイマーをリセットするために使用するフラグです。以下のフラグを 1 つ以上使用できます。詳細については、 SetThreadExecutionState を参照してください。 ES_DISPLAY_REQUIREDディスプレイ(モニター)のアイドルタイマーをリセットします。 ES_SYSTEM_REQUIREDシステムのアイドルタイマーをリセットします。 |
戻り値
解説(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 公式リファレンス: 英語 (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が無いため "{}"(他メソッド/アクティベーションで取得)。