2011-11-25 20 views
32

Lo que quiero hacer es manipular el mouse. Será un macro simple para mis propios fines. Entonces moveré mi mouse a cierta posición en la pantalla y haré clic como si estuviera haciendo clic con cierto intervalo.¿Cómo puedo simular un clic del mouse en una posición determinada en la pantalla?

+1

Would [this] (http://stackoverflow.com/questions/8242409/simulate-mouse-clicks-at-a-certain-position-on-inactive-window-in-c-sharp/8242484#8242484) ser lo que necesitas? Además, como alguien sugirió en los comentarios, es posible que desee utilizar UIAutomation. – Nasreddine

+1

gracias de trabajo :) – MonsterMMORPG

+1

bien no funcionaba muy bien. ¿Cómo puedo configurar la duración del clic? al igual que 100 ms sigue presionando el mouse – MonsterMMORPG

Respuesta

43

Aquí hay un código que utiliza funciones no administradas para simular clics del ratón:

//This is a replacement for Cursor.Position in WinForms 
[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern bool SetCursorPos(int x, int y); 

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

public const int MOUSEEVENTF_LEFTDOWN = 0x02; 
public const int MOUSEEVENTF_LEFTUP = 0x04; 

//This simulates a left mouse click 
public static void LeftMouseClick(int xpos, int ypos) 
{ 
    SetCursorPos(xpos, ypos); 
    mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
    mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 
} 

Para mantener el mouse presionado durante un tiempo específico, puede Sleep() el hilo que se está ejecutando esta función, por ejemplo:

mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
System.Threading.Thread.Sleep(1000); 
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 

El código anterior mantener el ratón pulsado durante 1 segundo a menos que el usuario presiona las suelta el botón del ratón. Además, asegúrese de no ejecutar este código en el hilo de la IU principal, ya que hará que cuelgue.

+1

Esto es mucho más simple que otras soluciones que he visto aquí. Gracias – Yablargo

+0

Este código funciona bien para llevar el puntero a las coordenadas deseadas en la pantalla, pero por alguna razón el clic no funciona para mí. ¿Alguna idea de por qué? – john

+0

Aquí puede tener los códigos para otros botones del mouse: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx – Li3ro

7

Puede moverse en la posición XY. Ejemplo a continuación:

windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30) 

para hacer clic, se puede usar el siguiente código:

using System.Runtime.InteropServices; 

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002; 
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004; 
[DllImport("user32.dll")] 
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,    uint dwExtraInf); 
private void btnSet_Click(object sender, EventArgs e) 
    { 
     int x = Convert.ToInt16(txtX.Text);//set x position 
     int y = Convert.ToInt16(txtY.Text);//set y position 
     Cursor.Position = new Point(x, y); 
     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//make left button down 
     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//make left button up 
    } 

crédito a JOHNYKUTTY

+1

La pregunta es sobre WPF, no sobre Formas. – Vlad

+1

no funciona: windows.Forms.Cursor.Position = New System.Drawing.Point (Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30). También probé esto en formularios que no se mencionan para que no funcionen en wpf – MonsterMMORPG

Cuestiones relacionadas