c# - que - programa para saber las coordenadas del mouse
Mover el mouse (4)
DE ACUERDO. Es una especie de aplicación de tocador, pero hoy tuve una situación en el trabajo en la que estaba en una clase de entrenamiento y la máquina se bloqueó cada 10 minutos. Bueno, si los entrenadores se emocionaban por hablar, en lugar de cambiar diapositivas, la máquina se bloqueaba.
Me gustaría escribir una pequeña aplicación que no tenga más que un icono de barra de tareas que no hace más que mover el mouse en 1 píxel cada 4 minutos.
Puedo hacer eso de 3 maneras con Delphi (mi lenguaje fuerte) pero me estoy moviendo a C # para el trabajo y me gustaría saber el camino de menor resistencia allí.
Algo como esto debería funcionar (aunque, querrás cambiar el intervalo).
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);
}
Cuando trabajo desde casa, hago esto atando el cable del mouse a un ventilador de escritorio que oscila de izquierda a derecha. Mantiene el mouse en movimiento y evita que la estación de trabajo entre en modo de suspensión.
La forma "correcta" de hacerlo es responder al mensaje WM_SYSCOMMAND. En C #, esto se ve así:
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);
}
De acuerdo con MSDN , si la contraseña del protector de pantalla está habilitada por la política en Vista o más arriba, esto no funcionará. Es de suponer que mover el mouse de forma programática también se ignora, aunque no lo he probado.
para C # 3.5
sin notifyicon, por lo tanto, deberá finalizar esta aplicación en el administrador de tareas manualmente.
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();
}
}