Покачивание мыши

ОК. Это немного тщеславие приложение, но у меня была ситуация сегодня на работе, где я был в учебном классе, и машина была настроена на блокировку каждые 10 минут. Ну, если бы тренеры были взволнованы разговором — в отличие от смены слайдов-машина бы заперлась.

Я хотел бы написать маленькое приложение, которое не имеет ничего, кроме значка на панели задач, который ничего не делает, но перемещает мышь на 1 пиксель каждые 4 минуты.

Я могу сделать это тремя способами с Delphi (мой сильный язык), но я перехожу на C# для работы, и я хотел бы знать путь наименьшего сопротивления там.

4 ответа

  1. для C# 3.5

    без notifyicon, поэтому вам нужно будет завершить это приложение в диспетчере задач вручную

    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();
        }
    }
    
  2. Что-то вроде этого должно работать (хотя, вы захотите изменить интервал).

    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);
    }
    
  3. «Правильный» способ сделать это-ответить на сообщение WM_SYSCOMMAND. В C# это выглядит примерно так:

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

    Согласно MSDN, если пароль заставки включен политикой на Vista или выше, это не будет работать. Предположительно программно перемещение мыши также игнорируется, хотя я не проверял это.

  4. Когда я работаю дома, я делаю это, привязывая шнур мыши к настольному вентилятору, который колеблется слева направо. Он держит мышь двигать и держит рабочее место От идти спать.