How do you simulate Mouse Click in C#?

后端 未结 7 903
长情又很酷
长情又很酷 2020-11-22 05:34

How do you simulate Mouse clicks in C# winforms applications?

相关标签:
7条回答
  • 2020-11-22 06:16

    I have tried the code that Marcos posted and it didn't worked for me. Whatever i was given to the Y coordinate the cursor didn't moved on Y axis. The code below will work if you want the position of the cursor relative to the left-up corner of your desktop, not relative to your application.

        [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);
        }
    

    I only use mouse_event function to actually perform the click. You can give X and Y what coordinates you want, i used values from textbox:

                X = Convert.ToInt32(tbX.Text);
                Y = Convert.ToInt32(tbY.Text);
    
    0 讨论(0)
  • 2020-11-22 06:20

    they are some needs i can't see to dome thing like Keith or Marcos Placona did instead of just doing

    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");
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 06:22

    Some controls, like Button in System.Windows.Forms, have a "PerformClick" method to do just that.

    0 讨论(0)
  • 2020-11-22 06:23

    I use the InvokeOnClick() method. It takes two arguments: Control and EventArgs. If you need the EventArgs, then create an instance of it and pass it in, else use InvokeOnClick(controlToClick, null);. You can use a variety of Mouse event related arguments that derive from EventArgs such as MouseEventArgs.

    0 讨论(0)
  • 2020-11-22 06:24

    I have combined several sources to produce the code below, which I am currently using. I have also removed the Windows.Forms references so I can use it from console and WPF applications without additional references.

    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;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 06:25
    Mouse.Click();
    

    Microsoft.VisualStudio.TestTools.UITesting

    0 讨论(0)
提交回复
热议问题