2011-11-08 35 views
58

Quiero simular el movimiento del mouse cada x segundos. Para eso, usaré un temporizador (x segundos) y cuando el temporizador marque voy a hacer el movimiento del mouse.¿Cómo mover el cursor del mouse usando C#?

Pero, ¿cómo puedo hacer que el cursor del mouse se mueva usando C#?

+2

Esto suena como la mitad de una solución a un problema que no nos está diciendo acerca , que probablemente tiene soluciones más elegantes. –

+0

¡Es muy posible! No entendemos por qué, pero el protector de pantalla se activa transcurridos 10 minutos. Pero ponemos 999 minutos: P –

+2

Entonces debería buscar soluciones que eviten que el protector de pantalla se active cuando se está ejecutando su aplicación, en lugar de manipular el mouse o la configuración del salvapantallas. P.ej. P/Invoke [SetThreadExecutionState] (http://stackoverflow.com/questions/3665332/how-do-i-prevent-screen-savers-and-sleeps-during-my-program-execution/3665545#3665545). Sospeché que esto estaba relacionado con el protector de pantalla: los movimientos del mouse programados no restablecen el temporizador del protector de pantalla. –

Respuesta

52

Eche un vistazo a Cursor.Position Property. Debería comenzar.

private void MoveCursor() 
{ 
    // Set the Current cursor, move the cursor's Position, 
    // and set its clipping rectangle to the form. 

    this.Cursor = new Cursor(Cursor.Current.Handle); 
    Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50); 
    Cursor.Clip = new Rectangle(this.Location, this.Size); 
} 
+1

Gracias @JamesHill, no recordaba cómo hacer esto y su ejemplo es excelente. En mi caso, he agregado algunos cálculos a xey para hacer que el tiempo de movimiento del mouse esté relacionado (píxel por segundo) – Pimenta

+2

¿Es este el enfoque de WinForms? – greenoldman

+7

Siento que debería mencionar esto para que alguien no se meta en el gracioso problema que acabo de tener. 'Cursor.Clip' restringirá el movimiento de tu mouse al tamaño especificado por' Location' y 'Size'. Por lo tanto, el fragmento anterior solo permitirá que su mouse se mueva dentro del cuadro delimitador de la aplicación. – Brandon

19

Primera Agregar clase (Win32.cs)

public class Win32 
{ 
    [DllImport("User32.Dll")] 
    public static extern long SetCursorPos(int x, int y); 

    [DllImport("User32.Dll")] 
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point); 

    [StructLayout(LayoutKind.Sequential)] 
    public struct POINT 
    { 
     public int x; 
     public int y; 
    } 
} 

Entonces llamaremos a partir de evento:

Win32.POINT p = new Win32.POINT(); 
p.x = Convert.ToInt16(txtMouseX.Text); 
p.y = Convert.ToInt16(txtMouseY.Text); 

Win32.ClientToScreen(this.Handle, ref p); 
Win32.SetCursorPos(p.x, p.y); 
+0

También en WinForm puede usar Cursor.Position = new Point (x, y); – user3290286

+0

¿de dónde es el tipo de punto? – RollRoll

+0

@ThePoet Es una estructura utilizada por código nativo. –

Cuestiones relacionadas