当前位置: 首页 > 编程语言 > C#

如何检测鼠标点击?分享

时间:2023-04-11 12:14:40 C#

如何检测鼠标点击?如何检测Windows上的鼠标点击?(XP/Vista/7)。例如,当我的应用程序运行时,它会检测用户是否单击了某些内容(不是在该应用程序用户界面上,而是在Windows用户界面上)。如果是,执行另一个过程。不知道可不可以,希望高手指点一下。谢谢!如果你想拦截任何鼠标点击、移动、鼠标滚轮点击等,你需要写一个鼠标钩子。如果您想在自己的应用程序之外跟踪鼠标活动,这是AFAIK的唯一方法。如果要安装挂钩,需要从User32.dll文件中导入SetWindowsHookEx(…)函数。它涉及互操作(PInvoke),您必须导入(DllImport)一些功能。下面是Microsoft关于如何在C#中执行此操作的官方文档:如何在VisualC#.NET中设置Windows挂钩我将在此处进行总结,如果有一天链接失效,它就完成了答案。从SetWindowsHookEx函数开始:[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternintSetWindowsHookEx(intidHook,HookProclpfn,IntPtrhInstance,intthreadId);现在你可以设置你的挂钩了。例如:publicclassForm1{staticinthHook=0;公共委托intHookProc(intnCode,IntPtrwParam,IntPtrlParam);HookProc鼠标钩子程序;privatevoidActivateMouseHook_Click(objectsender,System.EventArgse){if(hHook==0){MouseHookProcedure=newHookProc(Form1.MouseHookProc);hHook=SetWindowsHookEx(WH_MOUSE,MouseHookProcedure,(IntPtr)0,AppDomain.GetCurrentThreadId());}}}之后不要忘记取消它。你需要另一个DllImport:[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternboolUnhookWindowsHookEx(intidHook);privatevoidDeactivateMouseHook_Click(objectsender,System.EventArgse){boolret=UnhookWindowsHookEx(hHook);您可以使用HookProc委托(MouseHookProcedure)来捕获鼠标活动。这涉及一些编组来捕获数据。[StructLayout(LayoutKind.Sequential)]publicclassPOINT{publicintx;公共整数y;}[StructLayout(LayoutKind.Sequential)]publicclassMouseHookStruct{publicPOINTpt;公共inthwnd;公共intwHitTestCode;publicstaticintMouseHookProc(intnCode,IntPtrwParam,IntPtrlParam){MouseHookStructMyMouseHookStruct=(MouseHookStruct)Marshal.PtrToStructure(lParam,typeof(MouseHookStruct));//您可以使用MyMouseHookStruct获取坐标。//...返回CallNextHookEx(hHook,nCode,wParam,lParam);}之后不要忘记调用挂钩链中的下一项(CallNextHookEx)![DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]publicstaticexternintCallNextHookEx(intidHook,intnCode,IntPtrwParam,IntPtrlParam);PS:你可以对键盘问题做同样的事情。Windows挂钩机制是您需要使用的。查看这篇文章:在C#中处理全局鼠标和键盘挂钩虽然ChristopheGeers解决方案可以帮助您捕获鼠标事件,但它并不能为您的问题提供完整的解决方案。爱德华想知道如何获取点击事件。要获取点击事件,请使用ChristopheGeers提供的解决方案。并/编辑编辑:emummousemessages{wm_lbuttondown=0x0201,wm_lbuttonup=0x0202,wm_mousememove=0x0200,wm_mousewheel=0x020a,wm_rbuttondownown=0x020a,wm_rbuttondparry=0x020202020204,/编组来自回调的数据。MouseHookStructMyMouseHookStruct=(MouseHookStruct)Marshal.PtrToStructure(lParam,typeof(MouseHookStruct));if(nCode>=0&&MouseMessages.WM_LBUTTONDOWN==(MouseMessages)wParam){//在这里做点什么}returnCallNextHookEx(hookHandle,nCode,wParam,lParam);你只需要一个鼠标钩子。它可以检测您的鼠标移动或单击。您可以在这里下载演示:C#mouse_hook_Demo当您按下并释放鼠标时,您将在richtextbox上看到该事件。以上就是C#学习教程:Howtodetectmouseclicks?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——Left){richTextBox1.AppendText("按下左键");}if(e.Button==MouseButtons.Right){richTextBox1.AppendText("RightButtonPressn");}}privatevoidmh_MouseUpEvent(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Left){richTextBox1.AppendText("左键释放");}if(e.Button==MouseButtons.Right){richTextBox1.AppendText("RightButtonRelease");}}privatevoidmh_MouseClickEvent(objectsender,MouseEventArgse){//MessageBox.Show(eX+"-"+eY);if(e.Button==MouseButtons.Left){stringsText="("+eXToString()+","+eYToString()+")";label1.Text=sText;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: