ポインタを画面上で移動する小さなC#コンソールアプリを作成しました。これにより、数分後に画面がスリープ/ロックされなくなることを期待しています。残念ながら、画面は数分後もスリープ状態になります。
ユーザー入力(マウスまたはキーボード)のように機能し、画面が自動的にスリープ/ロックされないようにする何かをC#で実際に書き込むことができるかどうかを誰かが知っていますか?
これが私が持っているものです、それは私がトリックをするかもしれないと思いました。
class Program
{
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
static Random rnd = new Random();
static void Main(string[] args)
{
Rectangle screenRes = Screen.PrimaryScreen.Bounds;
int widtMax = screenRes.Width;
int heighMax = screenRes.Height;
int w;
int h;
do
{
while (!Console.KeyAvailable)
{
w = rnd.Next(1, widtMax);
h = rnd.Next(1, heighMax);
SetCursorPos(w, h);
System.Threading.Thread.Sleep(1000);
}
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
}
}
SetThreadExecutionState
を利用できます
アプリケーションが使用中であることをシステムに通知できるようにすることで、アプリケーションの実行中にシステムがスリープ状態になったり、ディスプレイがオフになったりするのを防ぎます。
備考
ES_CONTINUOUS
なしでSetThreadExecutionState
を呼び出すと、アイドルタイマーがリセットされます。ディスプレイまたはシステムを動作状態に保つために、スレッドは定期的にSetThreadExecutionState
を呼び出す必要があります。電力管理されたコンピューターで正しく実行するには、FAXサーバー、留守番電話、バックアップエージェント、ネットワーク管理アプリケーションなどのアプリケーションは、イベントを処理するときに
ES_SYSTEM_REQUIRED
とES_CONTINUOUS
の両方を使用する必要があります。ビデオプレーヤーやプレゼンテーションアプリケーションなどのマルチメディアアプリケーションは、ユーザー入力なしで長時間ビデオを表示する場合、ES_DISPLAY_REQUIRED
を使用する必要があります。ワードプロセッサ、スプレッドシート、ブラウザ、ゲームなどのアプリケーションは、SetThreadExecutionState
を呼び出す必要はありません。
DllImport
[DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true)]
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
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004
}
使用法
void PreventSleep ()
{
// Prevent Idle-to-Sleep (monitor not affected) (see note above)
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUIRED);
}
。