2008-08-05 3 views
34

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

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

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

+1

Вы пробовали ответ Lubso? Пока он будет покачивать мышь, я не уверен, что это остановит экранную заставку! – 2008-09-20 17:54:18

+0

Это работало на Windows XP с помощью защищенной паролем экранной заставки. – 2009-07-08 22:09:16

ответ

22

для 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); 
} 
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); 
} 

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

9

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