¿Cómo se simula el clic del mouse en C #?

¿Cómo se simula el clic del mouse en C #?

Un ejemplo que encontré en algún lugar aquí en el pasado. Podría ser de alguna ayuda:

using System; using System.Windows.Forms; using System.Runtime.InteropServices; public class Form1 : Form { [DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); //Mouse actions private const int MOUSEEVENTF_LEFTDOWN = 0x02; private const int MOUSEEVENTF_LEFTUP = 0x04; private const int MOUSEEVENTF_RIGHTDOWN = 0x08; private const int MOUSEEVENTF_RIGHTUP = 0x10; public Form1() { } public void DoMouseClick() { //Call the imported function with the cursor's current position uint X = (uint)Cursor.Position.X; uint Y = (uint)Cursor.Position.Y; mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); } //...other code needed for the application } 

He combinado varias fonts para producir el código a continuación, que estoy usando actualmente. También eliminé las referencias de Windows.Forms para poder usarlo desde la consola y las aplicaciones de WPF sin referencias adicionales.

 using System; using System.Runtime.InteropServices; public class MouseOperations { [Flags] public enum MouseEventFlags { LeftDown = 0x00000002, LeftUp = 0x00000004, MiddleDown = 0x00000020, MiddleUp = 0x00000040, Move = 0x00000001, Absolute = 0x00008000, RightDown = 0x00000008, RightUp = 0x00000010 } [DllImport("user32.dll", EntryPoint = "SetCursorPos")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetCursorPos(int x, int y); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool GetCursorPos(out MousePoint lpMousePoint); [DllImport("user32.dll")] private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); public static void SetCursorPosition(int x, int y) { SetCursorPos(x, y); } public static void SetCursorPosition(MousePoint point) { SetCursorPos(point.X, point.Y); } public static MousePoint GetCursorPosition() { MousePoint currentMousePoint; var gotPoint = GetCursorPos(out currentMousePoint); if (!gotPoint) { currentMousePoint = new MousePoint(0, 0); } return currentMousePoint; } public static void MouseEvent(MouseEventFlags value) { MousePoint position = GetCursorPosition(); mouse_event ((int)value, position.X, position.Y, 0, 0) ; } [StructLayout(LayoutKind.Sequential)] public struct MousePoint { public int X; public int Y; public MousePoint(int x, int y) { X = x; Y = y; } } } 

Algunos controles, como Button en System.Windows.Forms, tienen un método “PerformClick” para hacer eso.

 Mouse.Click(); 

Microsoft.VisualStudio.TestTools.UITesting

He probado el código que Marcos publicó y no funcionó para mí. Lo que sea que se me haya dado a la coordenada Y, el cursor no se movió en el eje Y. El siguiente código funcionará si desea que la posición del cursor esté en relación con la esquina superior izquierda de su escritorio, no relativa a su aplicación.

  [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo); private const int MOUSEEVENTF_LEFTDOWN = 0x02; private const int MOUSEEVENTF_LEFTUP = 0x04; private const int MOUSEEVENTF_MOVE = 0x0001; public void DoMouseClick() { X = Cursor.Position.X; Y = Cursor.Position.Y; //move to coordinates pt = (Point)pc.ConvertFromString(X + "," + Y); Cursor.Position = pt; //perform click mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } 

Solo uso la función mouse_event para realizar el clic. Puedes dar a X e Y las coordenadas que quieras, utilicé los valores de la caja de texto:

  X = Convert.ToInt32(tbX.Text); Y = Convert.ToInt32(tbY.Text); 

son algunas necesidades que no puedo ver para hacer algo como lo hicieron Keith o Marcos Placona en lugar de simplemente hacer

 using System; using System.Windows.Forms; namespace WFsimulateMouseClick { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { button1_Click(button1, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 1, 1, 1, 1)); //by the way //button1.PerformClick(); // and //button1_Click(button1, new EventArgs()); // are the same } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("clicked"); } } }