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}
posted @ 2009-08-02 18:53  ★火星人★  阅读(3042)  评论(0编辑  收藏  举报