Moviendo el ratón


OK. Esta es una aplicación de vanidad, pero hoy tuve una situación en el trabajo en la que estaba en una clase de entrenamiento y la máquina estaba configurada para bloquearse cada 10 minutos. Bueno, si los entrenadores se emocionaban por hablar, en lugar de cambiar las diapositivas, la máquina se bloquearía.

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

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

Author: Fionnuala, 2008-08-05

4 answers

Para C# 3.5

Sin notifyicon por lo tanto, tendrá que terminar 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();
    }
}
 23
Author: lubos hasko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-05 04:12:12

La forma "correcta" de hacer esto es responder al mensaje WM_SYSCOMMAND. En C# esto se ve algo como esto:

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

De acuerdo con MSDN, si la contraseña del salvapantallas está habilitada por la política de Vista o superior, esto no funcionará. Presumiblemente moviendo el ratón programáticamente también se ignora, aunque no he probado esto.

 12
Author: Zooba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 20:29:35

Cuando trabajo desde casa, lo hago atando el cable del ratón a un ventilador de escritorio que oscila de izquierda a derecha. Mantiene el ratón en movimiento y evita que la estación de trabajo se vaya a dormir.

 10
Author: Heywoody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 17:01:56

Algo como esto debería funcionar (sin embargo, querrá 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);
}
 2
Author: DylanJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-05 07:38:06