你如何模拟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