の戻り値は、SetThreadExecutionState
成功または失敗を示すために使用されます。これについては、ドキュメントで説明されています。
戻り値
関数が成功した場合、戻り値は前のスレッド実行状態です。
関数が失敗した場合、戻り値はNULL
です。
の値NULL
は単純な0
ので、戻り値をと比較して成功を確認できます0
。したがって、失敗しても例外はありません。戻り値は単純に0
。WindowsAPI関数が失敗を通知するために例外を発生させることを期待しないでください。彼らは単にそれをしません。
pinvoke.netから取得した必要なp/invoke署名は次のとおりです。
[FlagsAttribute]
public enum EXECUTION_STATE : uint
{
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000,
ES_DISPLAY_REQUIRED = 0x00000002,
ES_SYSTEM_REQUIRED = 0x00000001
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
それならあなたはそれをこのように呼ぶことができます
bool succeeded = (SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS |
EXECUTION_STATE.ES_AWAYMODE_REQUIRED) != 0);
そして、呼び出しが失敗した場合は、次のような例外を発生させます。
if (!succeeded)
throw new Win32Exception();
ほとんどの場合、問題はを使用していることですES_AWAYMODE_REQUIRED
。を使用する必要があると思いますES_SYSTEM_REQUIRED
。