扭动鼠标

Bru*_*oon 38 c# mouse winapi

好.这是一个虚荣的应用程序,但我今天在工作中有一个情况,我在训练课,机器设置锁定每10分钟.好吧,如果培训师对谈话感到兴奋 - 而不是更换幻灯片 - 机器会锁定.

我想写一个小应用程序,它只有一个任务栏图标,除了每4分钟将鼠标移动1个像素外什么都不做.

我可以用Delphi(我强大的语言)以3种方式做到这一点,但我正在转向C#工作,我想知道那里阻力最小的路径.

lub*_*sko 25

对于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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Zoo*_*oba 12

执行此操作的"正确"方法是响应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);
}
Run Code Online (Sandbox Code Playgroud)

根据MSDN,如果屏幕保护程序密码是通过Vista或更高版本的策略启用的,则无法使用.大概以编程方式移动鼠标也会被忽略,尽管我还没有测试过.


小智 10

当我在家工作时,我通过将鼠标线连接到从左到右振荡的桌面风扇来完成此操作.它可以保持鼠标移动并使工作站无法进入睡眠状态.