电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

如何在C中使用全局鼠标、键盘Hook

如何在C中使用全局鼠标、键盘Hook_第1页
1/15
如何在C中使用全局鼠标、键盘Hook_第2页
2/15
如何在C中使用全局鼠标、键盘Hook_第3页
3/15
今天,有个同事问我,怎样在C#中使用全局钩子?以前写的全局钩子都是用unmanaged C 或C++写个DLL 来实现,可大家都知道,C#是基于.Net Framework 的,是managed,怎么实现全局钩子呢?于是开始到网上搜索,好不容易找到一篇,318804 - HOW TO: Set a Windows Hook in Visual C# .NET,里面详细的说明了如何使用鼠标钩子捕获鼠标的移动等,可是,它只能在Application 里起作用,出了Application 就没用了,就是说它还是没有实现全局钩子,而且文章结尾处说:“Global Hooks are not supported in the .NET Framew ork...”,这可怎么办呢? 别担心,办法总是有的,经过一番摸索以后,发现WH_KEYBORAD_LL 和WH_MOUSE_LL 这两个low-level 的hook 可以被安装成全局的,这就好办了,我们不妨用这两个low-level 的hook 替换掉WH_KEYBORAD 和WH_MOUSE,于是开始测试。结果成功了,在C#里实现了全局钩子。 我们来看一下主要代码段。 首先倒入所需要的windows 函数,主要有三个,SetWindowsHookEX 用来安装钩子,UnhookWindowsHookEX 用来卸载钩子以及 CallNextHookEX 用来将 hook 信息传递到链表中下一个hook 处理过程。 [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] private static extern int SetWindowsHookEx( int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] private static extern int UnhookWindowsHookEx(int idHook); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] private static extern int CallNextHookEx( int idHook, int nCode, int wParam, IntPtr lParam); 下面是有关这两个 low-level hook 在 Winuser.h 中的定义: /// /// Windows NT/2000/XP: Installs a hook procedure that monitors low-level mouse input events. /// private const int WH_MOUSE_LL = 14; /// /// Windows NT/2000/XP: Installs a hook procedure that monitors low-level keyboard input even...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

如何在C中使用全局鼠标、键盘Hook

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部