Вопрос
ХОРОШО.Это немного тщеславное приложение, но сегодня на работе у меня была ситуация: я был на тренировочном занятии, и машина была настроена на блокировку каждые 10 минут.Что ж, если тренеры увлеклись разговором, а не сменой слайдов, машина заблокировалась.
Я хотел бы написать маленькое приложение, в котором нет ничего, кроме значка на панели задач, который ничего не делает, а просто перемещает мышь на 1 пиксель каждые 4 минуты.
Я могу сделать это тремя способами с помощью Delphi (мой сильный язык), но по работе я перехожу на C # и хотел бы знать путь наименьшего сопротивления.
Решение
для С# 3.5
без значка уведомления, поэтому вам придется вручную закрыть это приложение в диспетчере задач.
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();
}
}
Другие советы
«Правильный» способ сделать это — ответить на сообщение 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 или более поздних версиях, это не сработает.Предположительно, программное перемещение мыши также игнорируется, хотя я это не проверял.
Когда я работаю дома, я делаю это, привязывая шнур мыши к настольному вентилятору, который колеблется слева направо.Он заставляет мышь двигаться и не дает рабочей станции перейти в спящий режим.
Что-то вроде этого должно сработать (хотя вы воля хочу изменить интервал).
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);
}