特定のアプリケーションについて、実行中はスクリーン セーバーを無効にする必要があります。オペレーターは手動でオフにして、後で再びオンにすることもできますが、最も簡単なのは、アプリケーションの実行中にスクリーン セーバーを寄せ付けないことです。
どうすればいいですか?SPI_SETSCREENSAVEACTIVE で実際にスクリーン セーバーをオフにするコードを見つけましたが、それは私が望んでいるものではないと思います。
特定のアプリケーションについて、実行中はスクリーン セーバーを無効にする必要があります。オペレーターは手動でオフにして、後で再びオンにすることもできますが、最も簡単なのは、アプリケーションの実行中にスクリーン セーバーを寄せ付けないことです。
どうすればいいですか?SPI_SETSCREENSAVEACTIVE で実際にスクリーン セーバーをオフにするコードを見つけましたが、それは私が望んでいるものではないと思います。
編集 - ここで最新の Power Availability Request API (supersedes SetThreadExecutionState
) を使用して更新された回答があります: https://stackoverflow.com/a/63632916/67824
[FlagsAttribute]
public enum EXECUTION_STATE : uint
{
ES_SYSTEM_REQUIRED = 0x00000001,
ES_DISPLAY_REQUIRED = 0x00000002,
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004,
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000,
}
public static class SleepUtil
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
}
public void PreventSleep()
{
if (SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED
| EXECUTION_STATE.ES_AWAYMODE_REQUIRED) == 0) //Away mode for Windows >= Vista
SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED); //Windows < Vista, forget away mode
}
古い新しいものにはあなたの答えがあります: を使用してくださいSetThreadExecutionState(ES_DISPLAY_REQUIRED)
。
これは、ビデオ プレーヤーと PowerPoint で使用されます。
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED);
実際、この関数は異なる Windows バージョン間で操作できません (ただし、Windows Vista 以降ではかなりうまく機能します)... Windows XP / 2003 では、この関数は ES_USER_PRESENT | で呼び出されます。ES_CONTINUOUS (両方を呼び出す必要があります)...これにより、システムとディスプレイの両方のアイドル タイマーが定期的にリセットされます...他の Windows バージョンでは、ES_SYSTEM_REQUIRED | を使用することをお勧めします。ES_DISPLAY_REQUIRED | ES_CONTINUOUS | ES_AWAYMODE_REQUIRED...
SPI_SETSCREENSAVEACTIVE を指定した SystemParametersInfo は、これを行う通常の方法です。ただし、画面ロックは無効になりません。
フォームの最上位の値をtrueにしてみてください。それは私にとってはうまくいきます。アイドル時間の後でも、スクリーンセーバーは実現しませんでした...