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
sinES_CONTINUOUS
simplemente restablece el temporizador de inactividad; Para mantener la pantalla o el sistema en el estado de trabajo, el subproceso debe llamar aSetThreadExecutionState
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
yES_CONTINUOUS
cuando procesan eventos. Las aplicaciones multimedia, como reproductores de video y aplicaciones de presentación, deben usarES_DISPLAY_REQUIRED
cuando muestran videos durante largos períodos de tiempo sin laES_DISPLAY_REQUIRED
del usuario. Las aplicaciones como procesadores de texto, hojas de cálculo, navegadores y juegos no necesitan llamar aSetThreadExecutionState
.
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); }
.