Evita que la pantalla duerma con C #

He creado una pequeña aplicación de consola C # para mover el puntero por la pantalla, con la esperanza de que esto impida que la pantalla entre en reposo y se bloquee después de unos minutos. Desafortunadamente, la pantalla sigue durmiendo después de unos minutos.

¿Alguien sabe si realmente es posible escribir algo en C # que actuará como una entrada del usuario (ya sea con el mouse o el teclado) y evitará que la pantalla se duerma o se bloquee automáticamente?

Aquí está lo que tengo, que pensé que podría hacer el truco.

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); } } 

Puedes hacer uso de SetThreadExecutionState

Permite que una aplicación informe al sistema que está en uso, lo que evita que el sistema entre en modo de suspensión o que apague la pantalla mientras se ejecuta la aplicación.

Observaciones

Llamar a SetThreadExecutionState sin ES_CONTINUOUS simplemente restablece el temporizador de inactividad; Para mantener la pantalla o el sistema en el estado de trabajo, el subproceso debe llamar a SetThreadExecutionState periódicamente.

Para ejecutarse correctamente en una computadora con administración de energía, las aplicaciones como los servidores de fax, los contestadores automáticos, los agentes de respaldo y las aplicaciones de administración de la red deben usar ES_SYSTEM_REQUIRED y ES_CONTINUOUS cuando procesan eventos. Las aplicaciones multimedia, como reproductores de video y aplicaciones de presentación, deben usar ES_DISPLAY_REQUIRED cuando muestran videos durante largos períodos de tiempo sin la ES_DISPLAY_REQUIRED del usuario. Las aplicaciones como procesadores de texto, hojas de cálculo, navegadores y juegos no necesitan llamar a SetThreadExecutionState .

DllImport

 [DllImport("kernel32.dll", CharSet = CharSet.Auto,SetLastError = true)] static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); 

Enums

 [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 } 

Uso

 void PreventSleep () { // Prevent Idle-to-Sleep (monitor not affected) (see note above) SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUIRED); } 

.