c# - Mit der Maus wackeln

original title: "c# - Wiggling the mouse"


Translate

OK. This is a bit of a vanity app, but I had a situation today at work where I was in a training class and the machine was set to lock every 10 minutes. Well, if the trainers got excited about talking - as opposed to changing slides - the machine would lock up.

I'd like to write a teeny app that has nothing but a taskbar icon that does nothing but move the mouse by 1 pixel every 4 minutes.

I can do that in 3 ways with Delphi (my strong language) but I'm moving to C# for work and I'd like to know the path of least resistance there.



OK. Dies ist eine Art Eitelkeits-App, aber ich hatte heute eine Situation bei der Arbeit, in der ich in einer Schulungsklasse war und die Maschine so eingestellt war, dass sie alle 10 Minuten gesperrt wurde. Nun, wenn die Trainer sich über ...

Dies ist die Zusammenfassung nach der Übersetzung. Wenn Sie die vollständige Übersetzung anzeigen möchten, klicken Sie auf das Symbol "Übersetzen"


Alle Antworten
  • Translate

    for C# 3.5

    without notifyicon therefore you will need to terminate this application in task manager manually

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

  • Translate

    The "correct" way to do this is to respond to the WM_SYSCOMMAND message. In C# this looks something like this:

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

    According to MSDN, if the screensaver password is enabled by policy on Vista or above, this won't work. Presumably programmatically moving the mouse is also ignored, though I have not tested this.


  • Translate

    When I work from home, I do this by tying the mouse cord to a desktop fan which oscillates left to right. It keeps the mouse moving and keeps the workstation from going to sleep.


  • Translate

    Something like this should work (though, you will want to change the interval).

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