C# 鼠标操作类
1
7
8namespace Windows.Forms.Base
9{
10 public class Mouse
11 {
12 MouseEventFlag enum
32
33 internal const byte SM_CMOUSEBUTTONS = 43;
34 internal const byte SM_MOUSEPRESENT = 19;
35 internal const byte SM_MOUSEWHEELPRESENT = 75;
36
37 public static int FullScreenPosition_X
38 {
39 get
40 {
41 POINTAPI _POINTAPI = new POINTAPI();
42 GetCursorPos(ref _POINTAPI);
43 return _POINTAPI.x;
44 }
45 }
46
47 public static int FullScreenPosition_Y
48 {
49 get
50 {
51 POINTAPI _POINTAPI = new POINTAPI();
52 GetCursorPos(ref _POINTAPI);
53 return _POINTAPI.y;
54 }
55 }
56
57 public static string Type
58 {
59 get
60 {
61 if (GetSystemMetrics(SM_MOUSEPRESENT) == 0)
62 {
63 return "本计算机尚未安装鼠标";
64 }
65 if (GetSystemMetrics(SM_MOUSEWHEELPRESENT) != 0)
66 {
67 return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键滚轮鼠标";
68 }
69 return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键鼠标";
70 }
71 }
72
73 /// <summary>
74 ///鼠标左右键功能互换
75 /// </summary>
76 /// <param name="bSwap"></param>
77 /// <returns></returns>
78 [DllImport("user32.dll", EntryPoint = "SwapMouseButton")]
79 public static extern int SwapMouseButton(int bSwap);
80
81 /// <summary>
82 /// 鼠标的移动区域限制
83 /// 0为释放限制
84 /// </summary>
85 /// <param name="lpRect"></param>
86 /// <returns></returns>
87 [DllImport("user32", EntryPoint = "ClipCursor")]
88 public static extern int ClipCursor(ref RECT lpRect);
89
90 /// <summary>
91 /// 获取鼠标坐标
92 /// </summary>
93 /// <param name="lpPoint"></param>
94 /// <returns></returns>
95 [DllImport("user32.dll", EntryPoint = "GetCursorPos")]
96 public static extern int GetCursorPos(ref POINTAPI lpPoint);
97
98 /// <summary>
99 /// 显示和隐藏鼠标指针.
100 /// 1为显示0为隐藏
101 /// </summary>
102 /// <param name="bShow"></param>
103 /// <returns></returns>
104 [DllImport("user32.dll", EntryPoint = "ShowCursor")]
105 public static extern bool ShowCursor(bool bShow);
106
107 /// <summary>
108 /// 将非模态窗口显示为模态窗口
109 /// </summary>
110 /// <param name="hwnd"></param>
111 /// <param name="fEnable"></param>
112 /// <returns></returns>
113 [DllImport("user32.dll", EntryPoint = "EnableWindow")]
114 public static extern int EnableWindow(int hwnd, int fEnable);
115
116 /// <summary>
117 /// 获得窗口的大小
118 /// </summary>
119 /// <param name="hwnd"></param>
120 /// <param name="lpRect"></param>
121 /// <returns></returns>
122 [DllImport("user32.dll", EntryPoint = "GetWindowRect")]
123 public static extern int GetWindowRect(int hwnd, ref RECT lpRect);
124
125 /// <summary>
126 /// 设置鼠标坐标
127 /// </summary>
128 /// <param name="x"></param>
129 /// <param name="y"></param>
130 /// <returns></returns>
131 [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
132 public static extern int SetCursorPos(int x, int y);
133
134 /// <summary>
135 /// 返回Win桌面中各种显示单元的宽度和高度、是否安装了鼠标、是否调换了鼠标左右键的定义等
136 /// </summary>
137 /// <param name="nIndex"></param>
138 /// <returns></returns>
139 [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
140 public static extern int GetSystemMetrics(int nIndex);
141
142 /// <summary>
143 /// 参数wCount,表示鼠标双击时间,为毫秒级,系统默认时间为500
144 /// </summary>
145 /// <param name="wCount"></param>
146 /// <returns></returns>
147 [DllImport("user32.dll", EntryPoint = "SetDoubleClickTime")]
148 public static extern int SetDoubleClickTime(int wCount);
149
150 /// <summary>
151 /// 该函数无参数;它的返回值为毫秒,为双击鼠标双击有效的时间间隔。
152 /// </summary>
153 /// <returns></returns>
154 [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
155 public static extern int GetDoubleClickTime();
156
157 /// <summary>
158 /// 只是休眠而已
159 /// </summary>
160 /// <param name="dwMilliseconds"></param>
161 [DllImport("kernel32.DLL", EntryPoint = "Sleep")]
162 public static extern void Sleep(int dwMilliseconds);
163
164 /// <summary>
165 /// 模拟鼠标操作
166 /// 调用方法
167 /// mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
168 /// mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
169 /// 其中X,Y分别是你要点击的点的横坐标和纵坐标
170 /// </summary>
171 /// <param name="dwFlags"></param>
172 /// <param name="dx"></param>
173 /// <param name="dy"></param>
174 /// <param name="dwData"></param>
175 /// <param name="dwExtraInfo"></param>
176 [DllImport("user32.dll")]
177 public static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
178
179 // 隐藏 显示 鼠标
180 public static void Hide()
181 {
182 ShowCursor(false);
183 }
184
185 public static void Show()
186 {
187 ShowCursor(true);
188 }
189
190 // 将鼠标锁定在你的Form里 不过你得将你的Form先锁了,Form Resize 就失效了
191 public static void Lock(System.Windows.Forms.Form ObjectForm)
192 {
193 RECT _FormRect = new RECT();
194 GetWindowRect(ObjectForm.Handle.ToInt32(), ref _FormRect);
195 ClipCursor(ref _FormRect);
196 }
197
198 public static void UnLock()
199 {
200 RECT _ScreenRect = new RECT();
201 _ScreenRect.top = 0;
202 _ScreenRect.left = 0;
203 _ScreenRect.bottom = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Bottom;
204 _ScreenRect.right = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right;
205 ClipCursor(ref _ScreenRect);
206 }
207
208 // 鼠标失效,不过失效的好像不只是鼠标,小心哦
209 public static void Disable(System.Windows.Forms.Form ObjectForm)
210 {
211 EnableWindow(ObjectForm.Handle.ToInt32(), 0);
212 }
213
214 public static void Enable(System.Windows.Forms.Form ObjectForm)
215 {
216 EnableWindow(ObjectForm.Handle.ToInt32(), 1);
217 }
218
219 // 鼠标自己移动
220 public static void Move(int From_Handle_ToInt32, int To_Handle_ToInt32)
221 {
222 RECT rectFrom = new RECT();
223 RECT rectTo = new RECT();
224 int i;
225 GetWindowRect(From_Handle_ToInt32, ref rectFrom);
226 GetWindowRect(To_Handle_ToInt32, ref rectTo);
227 if ((rectFrom.left + rectFrom.right)/2 - (rectTo.left + rectTo.right)/2 > 0)
228 {
229 for (i = (rectFrom.left + rectFrom.right)/2; i >= (rectTo.left + rectTo.right)/2; i--)
230 {
231 SetCursorPos(i, (rectFrom.top + rectFrom.bottom)/2);
232 Sleep(1);
233 }
234 }
235 else
236 {
237 for (i = (rectFrom.left + rectFrom.right)/2; i <= (rectTo.left + rectTo.right)/2; i++)
238 {
239 SetCursorPos(i, (rectFrom.top + rectFrom.bottom)/2);
240 Sleep(1);
241 }
242 }
243 if ((rectFrom.top + rectFrom.bottom)/2 - (rectTo.top + rectTo.bottom)/2 > 0)
244 {
245 for (i = (rectFrom.top + rectFrom.bottom)/2; i >= (rectTo.top + rectTo.bottom)/2; i--)
246 {
247 SetCursorPos((rectTo.left + rectTo.right)/2, i);
248 Sleep(1);
249 }
250 }
251 else
252 {
253 for (i = (rectFrom.top + rectFrom.bottom)/2; i <= (rectTo.top + rectTo.bottom)/2; i++)
254 {
255 SetCursorPos((rectTo.left + rectTo.right)/2, i);
256 Sleep(1);
257 }
258 }
259 }
260
261 // 得到你的鼠标类型
262
263 // 设置鼠标双击时间
264 public static void DoubleClickTime_Set(int MouseDoubleClickTime)
265 {
266 SetDoubleClickTime(MouseDoubleClickTime);
267 }
268
269 public static string DoubleClickTime_Get()
270 {
271 return GetDoubleClickTime().ToString();
272 }
273
274 // 设置鼠标默认主键
275 public static void DefaultRightButton()
276 {
277 SwapMouseButton(1);
278 }
279
280 public static void DefaultLeftButton()
281 {
282 SwapMouseButton(0);
283 }
284
285 Nested type: POINTAPI
294
295 Nested type: RECT
306 }
307}
7
8namespace Windows.Forms.Base
9{
10 public class Mouse
11 {
12 MouseEventFlag enum
32
33 internal const byte SM_CMOUSEBUTTONS = 43;
34 internal const byte SM_MOUSEPRESENT = 19;
35 internal const byte SM_MOUSEWHEELPRESENT = 75;
36
37 public static int FullScreenPosition_X
38 {
39 get
40 {
41 POINTAPI _POINTAPI = new POINTAPI();
42 GetCursorPos(ref _POINTAPI);
43 return _POINTAPI.x;
44 }
45 }
46
47 public static int FullScreenPosition_Y
48 {
49 get
50 {
51 POINTAPI _POINTAPI = new POINTAPI();
52 GetCursorPos(ref _POINTAPI);
53 return _POINTAPI.y;
54 }
55 }
56
57 public static string Type
58 {
59 get
60 {
61 if (GetSystemMetrics(SM_MOUSEPRESENT) == 0)
62 {
63 return "本计算机尚未安装鼠标";
64 }
65 if (GetSystemMetrics(SM_MOUSEWHEELPRESENT) != 0)
66 {
67 return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键滚轮鼠标";
68 }
69 return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键鼠标";
70 }
71 }
72
73 /// <summary>
74 ///鼠标左右键功能互换
75 /// </summary>
76 /// <param name="bSwap"></param>
77 /// <returns></returns>
78 [DllImport("user32.dll", EntryPoint = "SwapMouseButton")]
79 public static extern int SwapMouseButton(int bSwap);
80
81 /// <summary>
82 /// 鼠标的移动区域限制
83 /// 0为释放限制
84 /// </summary>
85 /// <param name="lpRect"></param>
86 /// <returns></returns>
87 [DllImport("user32", EntryPoint = "ClipCursor")]
88 public static extern int ClipCursor(ref RECT lpRect);
89
90 /// <summary>
91 /// 获取鼠标坐标
92 /// </summary>
93 /// <param name="lpPoint"></param>
94 /// <returns></returns>
95 [DllImport("user32.dll", EntryPoint = "GetCursorPos")]
96 public static extern int GetCursorPos(ref POINTAPI lpPoint);
97
98 /// <summary>
99 /// 显示和隐藏鼠标指针.
100 /// 1为显示0为隐藏
101 /// </summary>
102 /// <param name="bShow"></param>
103 /// <returns></returns>
104 [DllImport("user32.dll", EntryPoint = "ShowCursor")]
105 public static extern bool ShowCursor(bool bShow);
106
107 /// <summary>
108 /// 将非模态窗口显示为模态窗口
109 /// </summary>
110 /// <param name="hwnd"></param>
111 /// <param name="fEnable"></param>
112 /// <returns></returns>
113 [DllImport("user32.dll", EntryPoint = "EnableWindow")]
114 public static extern int EnableWindow(int hwnd, int fEnable);
115
116 /// <summary>
117 /// 获得窗口的大小
118 /// </summary>
119 /// <param name="hwnd"></param>
120 /// <param name="lpRect"></param>
121 /// <returns></returns>
122 [DllImport("user32.dll", EntryPoint = "GetWindowRect")]
123 public static extern int GetWindowRect(int hwnd, ref RECT lpRect);
124
125 /// <summary>
126 /// 设置鼠标坐标
127 /// </summary>
128 /// <param name="x"></param>
129 /// <param name="y"></param>
130 /// <returns></returns>
131 [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
132 public static extern int SetCursorPos(int x, int y);
133
134 /// <summary>
135 /// 返回Win桌面中各种显示单元的宽度和高度、是否安装了鼠标、是否调换了鼠标左右键的定义等
136 /// </summary>
137 /// <param name="nIndex"></param>
138 /// <returns></returns>
139 [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
140 public static extern int GetSystemMetrics(int nIndex);
141
142 /// <summary>
143 /// 参数wCount,表示鼠标双击时间,为毫秒级,系统默认时间为500
144 /// </summary>
145 /// <param name="wCount"></param>
146 /// <returns></returns>
147 [DllImport("user32.dll", EntryPoint = "SetDoubleClickTime")]
148 public static extern int SetDoubleClickTime(int wCount);
149
150 /// <summary>
151 /// 该函数无参数;它的返回值为毫秒,为双击鼠标双击有效的时间间隔。
152 /// </summary>
153 /// <returns></returns>
154 [DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
155 public static extern int GetDoubleClickTime();
156
157 /// <summary>
158 /// 只是休眠而已
159 /// </summary>
160 /// <param name="dwMilliseconds"></param>
161 [DllImport("kernel32.DLL", EntryPoint = "Sleep")]
162 public static extern void Sleep(int dwMilliseconds);
163
164 /// <summary>
165 /// 模拟鼠标操作
166 /// 调用方法
167 /// mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
168 /// mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);
169 /// 其中X,Y分别是你要点击的点的横坐标和纵坐标
170 /// </summary>
171 /// <param name="dwFlags"></param>
172 /// <param name="dx"></param>
173 /// <param name="dy"></param>
174 /// <param name="dwData"></param>
175 /// <param name="dwExtraInfo"></param>
176 [DllImport("user32.dll")]
177 public static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
178
179 // 隐藏 显示 鼠标
180 public static void Hide()
181 {
182 ShowCursor(false);
183 }
184
185 public static void Show()
186 {
187 ShowCursor(true);
188 }
189
190 // 将鼠标锁定在你的Form里 不过你得将你的Form先锁了,Form Resize 就失效了
191 public static void Lock(System.Windows.Forms.Form ObjectForm)
192 {
193 RECT _FormRect = new RECT();
194 GetWindowRect(ObjectForm.Handle.ToInt32(), ref _FormRect);
195 ClipCursor(ref _FormRect);
196 }
197
198 public static void UnLock()
199 {
200 RECT _ScreenRect = new RECT();
201 _ScreenRect.top = 0;
202 _ScreenRect.left = 0;
203 _ScreenRect.bottom = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Bottom;
204 _ScreenRect.right = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right;
205 ClipCursor(ref _ScreenRect);
206 }
207
208 // 鼠标失效,不过失效的好像不只是鼠标,小心哦
209 public static void Disable(System.Windows.Forms.Form ObjectForm)
210 {
211 EnableWindow(ObjectForm.Handle.ToInt32(), 0);
212 }
213
214 public static void Enable(System.Windows.Forms.Form ObjectForm)
215 {
216 EnableWindow(ObjectForm.Handle.ToInt32(), 1);
217 }
218
219 // 鼠标自己移动
220 public static void Move(int From_Handle_ToInt32, int To_Handle_ToInt32)
221 {
222 RECT rectFrom = new RECT();
223 RECT rectTo = new RECT();
224 int i;
225 GetWindowRect(From_Handle_ToInt32, ref rectFrom);
226 GetWindowRect(To_Handle_ToInt32, ref rectTo);
227 if ((rectFrom.left + rectFrom.right)/2 - (rectTo.left + rectTo.right)/2 > 0)
228 {
229 for (i = (rectFrom.left + rectFrom.right)/2; i >= (rectTo.left + rectTo.right)/2; i--)
230 {
231 SetCursorPos(i, (rectFrom.top + rectFrom.bottom)/2);
232 Sleep(1);
233 }
234 }
235 else
236 {
237 for (i = (rectFrom.left + rectFrom.right)/2; i <= (rectTo.left + rectTo.right)/2; i++)
238 {
239 SetCursorPos(i, (rectFrom.top + rectFrom.bottom)/2);
240 Sleep(1);
241 }
242 }
243 if ((rectFrom.top + rectFrom.bottom)/2 - (rectTo.top + rectTo.bottom)/2 > 0)
244 {
245 for (i = (rectFrom.top + rectFrom.bottom)/2; i >= (rectTo.top + rectTo.bottom)/2; i--)
246 {
247 SetCursorPos((rectTo.left + rectTo.right)/2, i);
248 Sleep(1);
249 }
250 }
251 else
252 {
253 for (i = (rectFrom.top + rectFrom.bottom)/2; i <= (rectTo.top + rectTo.bottom)/2; i++)
254 {
255 SetCursorPos((rectTo.left + rectTo.right)/2, i);
256 Sleep(1);
257 }
258 }
259 }
260
261 // 得到你的鼠标类型
262
263 // 设置鼠标双击时间
264 public static void DoubleClickTime_Set(int MouseDoubleClickTime)
265 {
266 SetDoubleClickTime(MouseDoubleClickTime);
267 }
268
269 public static string DoubleClickTime_Get()
270 {
271 return GetDoubleClickTime().ToString();
272 }
273
274 // 设置鼠标默认主键
275 public static void DefaultRightButton()
276 {
277 SwapMouseButton(1);
278 }
279
280 public static void DefaultLeftButton()
281 {
282 SwapMouseButton(0);
283 }
284
285 Nested type: POINTAPI
294
295 Nested type: RECT
306 }
307}