C#实现模拟鼠标点击事件(点击桌面的其他程序 )

2,016 阅读2分钟
注释感觉已经很清楚了,有不懂的欢迎评论

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Runtime.InteropServices;
 8 using System.Text;
 9 using System.Threading;
10 using System.Threading.Tasks;
11 using System.Windows.Forms;
12 
13 namespace WindowsFormsApp1
14 {
15     public partial class Form1 : Form
16     {
17         public Form1()
18         {
19             InitializeComponent();
20             this.Hide();
21         }
22         /// <summary>
23         /// 引用user32.dll动态链接库(windows api),
24         /// 使用库中定义 API:SetCursorPos 
25         /// </summary>
26         [DllImport("user32.dll")]
27         private static extern int SetCursorPos(int x, int y);
28         /// <summary>
29         /// 移动鼠标到指定的坐标点
30         /// </summary>
31         public void MoveMouseToPoint(Point p)
32         {
33             SetCursorPos(p.X, p.Y);
34         }
35         /// <summary>
36         /// 设置鼠标的移动范围
37         /// </summary>
38         public void SetMouseRectangle(Rectangle rectangle)
39         {
40             System.Windows.Forms.Cursor.Clip = rectangle;
41         }
42         /// <summary>
43         /// 设置鼠标位于屏幕中心
44         /// </summary>
45         public void SetMouseAtCenterScreen()
46         {
47             //当前屏幕的宽高
48             int winHeight = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
49             int winWidth = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
50             //设置鼠标的x,y位置
51             loginx = winWidth / 3 * 2;
52             loginy = winHeight / 4 + 5;
53             Point centerP = new Point(loginx, loginy);
54             //移动鼠标
55             MoveMouseToPoint(centerP);
56         }
57         //点击事件
58         [DllImport("User32")]
59         //下面这一行对应着下面的点击事件
60         //    public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
61         public extern static void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
62         public const int MOUSEEVENTF_LEFTDOWN = 0x2;
63         public const int MOUSEEVENTF_LEFTUP = 0x4;
64         public enum MouseEventFlags
65         {
66             Move = 0x0001, //移动鼠标
67             LeftDown = 0x0002,//模拟鼠标左键按下
68             LeftUp = 0x0004,//模拟鼠标左键抬起
69             RightDown = 0x0008,//鼠标右键按下
70             RightUp = 0x0010,//鼠标右键抬起
71             MiddleDown = 0x0020,//鼠标中键按下 
72             MiddleUp = 0x0040,//中键抬起
73             Wheel = 0x0800,
74             Absolute = 0x8000//标示是否采用绝对坐标
75         }
76         //鼠标将要到的x,y位置
77         public static int loginx, loginy;
78         private void Form1_Load(object sender, EventArgs e)
79         {
80 
81 
82             //移动鼠标
83             SetMouseAtCenterScreen();
84 
85 
86             //mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), loginx, loginy, 0, IntPtr.Zero);
87 
88             //mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), loginx, loginy, 0, IntPtr.Zero);
89             //点击两次
90             mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, loginx, loginy, 0, 0);
91 
92             mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, loginx, loginy, 0, 0);
93 
94         }
95     }
96 }