打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 监听鼠标操作

     前面两篇都在写关于键盘的监听操作以及衍生的一些自定义处理,这篇写一下关于鼠标的监听操作。

虽然我们一般情况下鼠标用的比较多,但是比起来,反而键盘监听的功能比较实用,而鼠标感觉没什么监听的必要,但是如果你接触过自动化操作脚本之类的话,会发现其实鼠标监听的作用更大;通过这几篇内容,我想我们可以整合一下,做一个简单的操作录制功能,用来解决一下日常的繁琐切循环的操作,这个功能之前有发过一个简单的版本,但不是通过HOOK去实现的,而是让用户自己手动录制,再去执行。

使用HOOK的话,直接监听一遍用户的操作,记录相应的动作即可,同时可操作性也有很大提高(emmmm,我觉得回头有时间我自己先封装下,可能用途还不小,同时想起之前写的关键字查询的工具,以为只是偶尔之需,万万没想到它在我生活、工作中也帮了我很多。。。)

这里代码只是做了简单的事件记录,其他操作可根据需求自行处理。

HOOK的工具类可参考前面的文章,这里不赘述,贴下需要更改的代码。

实现功能:

    • 使用C#监听鼠标的按下、弹起等事件

开发环境:

开发工具:Visual Studio 2013

.NET Framework版本:4.5

实现代码:

/// <summary>        /// 鼠标结构        /// </summary>        [StructLayout(LayoutKind.Sequential)]        public class MouseHookStruct        {            public POINT pt; // 鼠标位置            public int hWnd;            public int wHitTestCode;            public int dwExtraInfo;        }
/// <summary> /// 鼠标位置结构 /// </summary> [StructLayout(LayoutKind.Sequential)] public class POINT { public int x; public int y; }

//定义为鼠标钩子 public int WH_MOUSE_LL = 14;
//相关鼠标事件 public event MouseEventHandler MouseDown; public event MouseEventHandler MouseUp;
//相关动作 public const int WM_MOUSEMOVE = 0x200; // 鼠标移动 public const int WM_LBUTTONDOWN = 0x201;// 鼠标左键按下 public const int WM_RBUTTONDOWN = 0x204;// 鼠标右键按下 public const int WM_MBUTTONDOWN = 0x207;// 鼠标中键按下 public const int WM_LBUTTONUP = 0x202;// 鼠标左键抬起 public const int WM_RBUTTONUP = 0x205;// 鼠标右键抬起 public const int WM_MBUTTONUP = 0x208;// 鼠标中键抬起
//hookid private int hookID = 0;

private int MouseHookProc(int nCode, int wParam, IntPtr lParam) { if ((nCode >= 0)) { MouseHookStruct hookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
MouseEventArgs e = null; switch (wParam) { case WM_LBUTTONDOWN: e = new MouseEventArgs(MouseButtons.Left, 1, hookStruct.pt.x, hookStruct.pt.y, 0); MouseDown(this, e); break; case WM_RBUTTONDOWN: e = new MouseEventArgs(MouseButtons.Right, 1, hookStruct.pt.x, hookStruct.pt.y, 0); MouseDown(this, e); break; case WM_LBUTTONUP: e = new MouseEventArgs(MouseButtons.Left, 1, hookStruct.pt.x, hookStruct.pt.y, 0); MouseUp(this, e); break; case WM_RBUTTONUP: e = new MouseEventArgs(MouseButtons.Right, 1, hookStruct.pt.x, hookStruct.pt.y, 0); MouseUp(this, e); break; default: break; } }
return CallNextHookEx(hookID, nCode, wParam, lParam); }
  private void MouseDown(object sender, MouseEventArgs e)        {            listBox1.Items.Add(string.Format("在{0},{1}位置按下了鼠标{2}键", e.X, e.Y, e.Button.ToString()));        }
private void MouseUp(object sender, MouseEventArgs e) { listBox1.Items.Add(string.Format("在{0},{1}位置松开了鼠标{2}键", e.X, e.Y, e.Button.ToString())); }
HookUtil keyHook = new HookUtil(); private void btnBegin_Click(object sender, EventArgs e) { keyHook.MouseDown += new MouseEventHandler(MouseDown); keyHook.MouseUp += new MouseEventHandler(MouseUp); keyHook.StartHook(); btnBegin.Enabled = false; btnEnd.Enabled = true; }

实现效果:

由简入繁,拿来即用

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C#无边框窗体拖动
C#中MouseDown和MouseUp事件
C# 键盘钩子和鼠标钩子的使用详解
c#中使用sendmessage
C#程序员开发WinForm必须知道的 Window 消息大全
用C#做一个悬浮窗口[含三种移动无标题窗体的办法]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服