2008-08-05 20 views
34

OK. Es una especie de aplicación de tocador, pero hoy tuve una situación en el trabajo en la que estaba en una clase de entrenamiento y la máquina se bloqueó cada 10 minutos. Bueno, si los entrenadores se emocionaban por hablar, en lugar de cambiar diapositivas, la máquina se bloqueaba.Mover el mouse

Me gustaría escribir una pequeña aplicación que no tiene más que un icono de la barra de tareas que no hace más que mover el mouse por 1 píxel cada 4 minutos.

Puedo hacerlo de 3 maneras con Delphi (mi lenguaje fuerte) pero me estoy moviendo a C# para el trabajo y me gustaría saber la ruta de menor resistencia allí.

+1

¿Has probado la respuesta de Lubso? ¡Mientras mueve el mouse, no estoy seguro de que impida que el protector de pantalla se active! –

+0

Esto funcionó en Windows XP usando un protector de pantalla protegido por contraseña. –

+0

Acabo de probarlo en XP en un entorno corporativo bloqueado (contraseña forzada) y no ayuda. –

Respuesta

22

para C# 3.5

sin NotifyIcon por lo tanto, tendrá que poner fin a esta aplicación en el administrador de tareas manualmente

using System; 
using System.Drawing; 
using System.Windows.Forms; 

static class Program 
{ 
    static void Main() 
    { 
     Timer timer = new Timer(); 
     // timer.Interval = 4 minutes 
     timer.Interval = (int)(TimeSpan.TicksPerMinute * 4/TimeSpan.TicksPerMillisecond); 
     timer.Tick += (sender, args) => { Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y + 1); }; 
     timer.Start(); 
     Application.Run(); 
    } 
} 
+0

¿Esto realmente funcionaría? Desde la memoria, el "tiempo de espera" para iniciar el protector de pantalla se realiza en algún lugar del O/S para hacer con la entrada. Mover la posición del mouse no toma la misma ruta lógica, ¡así que el usuario no ha reiniciado realmente la cuenta regresiva! –

+1

Lo pruebo en mi Win7 y no funciona. – newman

+0

Lubos - ¡Me gusta! Voy a modificarlo para alternar entre movimientos, de modo que después de un día, el cursor no quede oculto en la esquina de la pantalla, pero eso está siendo quisquilloso, tal vez incluso les gustaría de esa manera. :) Muchas gracias por la respuesta rápida y excelente. –

2

Algo como esto debería funcionar (aunque, que se desee cambiar el intervalo).

public Form1() 
{ 
    InitializeComponent(); 
    Timer Every4Minutes = new Timer(); 
    Every4Minutes.Interval = 10; 
    Every4Minutes.Tick += new EventHandler(MoveNow); 
    Every4Minutes.Start(); 
} 

void MoveNow(object sender, EventArgs e) 
{ 
    Cursor.Position = new Point(Cursor.Position.X - 1, Cursor.Position.Y - 1); 
} 
12

La forma "correcta" de hacerlo es responder al mensaje WM_SYSCOMMAND. En C# esto es como la siguiente:

protected override void WndProc(ref Message m) 
{ 
    // Abort screensaver and monitor power-down 
    const int WM_SYSCOMMAND = 0x0112; 
    const int SC_MONITOR_POWER = 0xF170; 
    const int SC_SCREENSAVE = 0xF140; 
    int WParam = (m.WParam.ToInt32() & 0xFFF0); 

    if (m.Msg == WM_SYSCOMMAND && 
     (WParam == SC_MONITOR_POWER || WParam == SC_SCREENSAVE)) return; 

    base.WndProc(ref m); 
} 

Según MSDN, si la contraseña de protector de pantalla se activa por la política de Vista o superior, esto no funcionará. Es de suponer que mover el mouse de forma programática también se ignora, aunque no lo he probado.

9

Cuando trabajo desde casa, hago esto atando el cable del mouse a un ventilador de escritorio que oscila de izquierda a derecha. Mantiene el mouse en movimiento y evita que la estación de trabajo entre en modo de suspensión.

Cuestiones relacionadas