如何在C#中模拟鼠标点击?

如何在C#中模拟鼠标点击?

我在过去的某个地方找到了一个例子。 可能会有一些帮助:

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 } 

我已经结合了几个来源来生成下面的代码,我正在使用。 我也删除了Windows.Forms引用,所以我可以使用它从控制台和WPF应用程序没有额外的引用。

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

一些控件,如System.Windows.Forms中的Button,有一个“PerformClick”方法来做到这一点。

 Mouse.Click(); 

Microsoft.VisualStudio.TestTools.UITesting

我已经尝试了Marcos发布的代码,它并没有为我工作。 无论我给Y坐标,光标都没有移动到Y轴上。 如果您希望光标的位置相对于您的桌面的左上角,而不是相对于您的应用程序,下面的代码将工作。

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

我只使用mouse_event函数来实际执行点击。 你可以给X和Y你想要的坐标,我使用的文本框中的值:

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

他们有一些需求,我不能看到圆顶像基思或马科斯·普拉克纳而不是做的事情

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