c# -摆动鼠标

Translate

好。这是个虚荣的应用程序,但是今天我在工作中遇到一种情况,当时我正在参加培训班,并且机器设置为每10分钟锁定一次。好吧,如果培训师们对谈话感到兴奋-而不是更换幻灯片-机器将锁定。

我想编写一个小程序,除了任务栏图标外什么都没有,只不过每4分钟将鼠标移动1像素。

我可以使用Delphi(我的强语言)通过3种方式来做到这一点,但是我正在使用C#进行工作,我想知道那里阻力最小的途径。

This question and all comments follow the "Attribution Required."

所有的回答

Translate

对于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();
    }
}
来源
Translate

执行此操作的“正确”方法是响应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或更高版本上通过策略启用了屏保密码,则此功能将无效。大概以编程方式移动鼠标也被忽略了,尽管我没有对此进行测试。

来源
Translate

当我在家工作时,我可以通过将鼠标线绑在台式风扇上来实现此功能,该风扇从左到右摆动。它可以保持鼠标移动,并使工作站保持睡眠状态。

来源
Translate

这样的事情应该可以工作(尽管要更改间隔)。

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