[Hook]个人学习笔记——挂个简单的钩子(全局鼠标Hook)(.NET)
2011-07-06 14:38
525 查看
刚学的钩子,赶紧把东西记下来免得以后遗忘。
1.钩子的装卸
环境
Visual Studio 2010 + C# + Win7
/*---这里开始---*/
(1)声明(导入)一些将会用到的函数,注意导入SetWindowsHookEx(...)时需要一个定义一个委托(回调函数的原型)本例中的MouseHookProc
(2)声明一个全局句柄,用来保存将来的钩子——private IntPtr hhook;
(3)定义一个处理钩到目标的函数——本例中的HookProc(...)
(4)在需要钩子时,安装钩子——this.hhook = SetWindowsHookEx(WH_MOUSE_LL, HookProc, IntPtr.Zero, 0);
仅此而已,但是这里只是说明了如何挂上一个最简单的全局鼠标钩子,关于钩子更全面的了解,可以参看FellHo先生的文章 http://blog.csdn.net/MaybeHelios/archive/2007/06/21/1660709.aspx
3.其他杂七杂八的笔记
//--
Handle - IntPtr
lpcStr - string来代替
lpStr - StringBuilder
DWord... - Int32
//--
(1)ShowWindow(GetForegroundWindow(), SW_MINIMIZE);//最小化当前窗口
(2)PostMessage(handle, WM_CLOSE , IntPtr.Zero, IntPtr.Zero);//发送关闭应用程序消息 WM_CLOSE=16
(3)GetForegroundWindow();//获得活动窗口的句柄
(4) GetWindowText(...)//获取窗口标题(Caption)
[DllImport( "User32.dll ")]
static extern int GetWindowText(IntPtr handle,StringBuilder text,int MaxLen);
调用
StringBuilder text = new StringBuilder(c);
GetWindowText(handle,text,text.Capacity);
1.钩子的装卸
环境
Visual Studio 2010 + C# + Win7
/*---这里开始---*/
//首先需要定义几个全局变量 private IntPtr hhook;//全局钩子的句柄.尚未赋值。 private const int WH_MOUSE_LL = 14;//参数(这些具体的参数可在msdn中查找,亦可以在winuser.h中找到) //... ...一些将会用到的参数 //导入几个将会用到的函数 [DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, MouseHookProc callback, IntPtr hInstance, uint threadId);//挂钩子用的 [DllImport("user32.dll")] static extern bool UnhookWindowsHookEx(IntPtr hInstance);//卸载钩子 [DllImport("user32.dll")] static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam);//钩到目标之后(进行处理之后)将目标放走,让它继续它的生活 //定义一个委托(处理钩子用的,回调函数的原型) private delegate int MouseHookProc(int nCode, int wParam, IntPtr lParam); //开始 public hook()//构造函数 { //安装钩子,记得要在不用的时候将钩子卸载掉 this.hhook = SetWindowsHookEx(WH_MOUSE_LL, HookProc, IntPtr.Zero, 0);//给钩子句柄赋值。(private const int WH_MOUSE_LL = 14;) /*四个参数的说明 /// <param name="idHook">The id of the event you want to hook</param> /// <param name="callback">The callback.</param> /// <param name="hInstance">The handle you want to attach the event to, can be null</param> /// <param name="threadId">The thread you want to attach the event to, can be null</param> */ //第一个参数:定义钩的对象:我设定的对象是——鼠标底层消息 //第二个参数:钩中目标之后的回调函数,简而言之就是对沟到的消息进行具体处理的用户编写的函数 //第三个参数:??这个我有些疑问,我个人认为是目标窗体的句柄。但是实际好像要比这个更抽象一些 } ~hook() {//卸载钩子 UnhookWindowsHookEx(hhook); } private int HookProc(int nCode, int wParam, IntPtr lParam)//钩子的回调函数(实际处理钩子的函数) { if (nCode >= 0))// { switch (wParam) { case WM_RBUTTONDOWN://右键按下 ( public const int WM_RBUTTONDOWN = 0x204;) MessageBox.Show("R_B_Down"); break; case WM_RBUTTONUP://右键释放 (public const int WM_RBUTTONUP = 0x205;) ... ... break; ... ... //call next hook return CallNextHookEx(hhook, nCode, wParam, lParam);//将钩子放回大自然,继续过他正常的生活 }//switch }
2.总的来说
挂个普通的全局钩子总共只要走四步(1)声明(导入)一些将会用到的函数,注意导入SetWindowsHookEx(...)时需要一个定义一个委托(回调函数的原型)本例中的MouseHookProc
(2)声明一个全局句柄,用来保存将来的钩子——private IntPtr hhook;
(3)定义一个处理钩到目标的函数——本例中的HookProc(...)
(4)在需要钩子时,安装钩子——this.hhook = SetWindowsHookEx(WH_MOUSE_LL, HookProc, IntPtr.Zero, 0);
仅此而已,但是这里只是说明了如何挂上一个最简单的全局鼠标钩子,关于钩子更全面的了解,可以参看FellHo先生的文章 http://blog.csdn.net/MaybeHelios/archive/2007/06/21/1660709.aspx
3.其他杂七杂八的笔记
//--
Handle - IntPtr
lpcStr - string来代替
lpStr - StringBuilder
DWord... - Int32
//--
(1)ShowWindow(GetForegroundWindow(), SW_MINIMIZE);//最小化当前窗口
(2)PostMessage(handle, WM_CLOSE , IntPtr.Zero, IntPtr.Zero);//发送关闭应用程序消息 WM_CLOSE=16
(3)GetForegroundWindow();//获得活动窗口的句柄
(4) GetWindowText(...)//获取窗口标题(Caption)
[DllImport( "User32.dll ")]
static extern int GetWindowText(IntPtr handle,StringBuilder text,int MaxLen);
调用
StringBuilder text = new StringBuilder(c);
GetWindowText(handle,text,text.Capacity);
相关文章推荐
- VB.NET全局键盘鼠标钩子 [Vb.Net Hook](修正版)
- VB.NET全局键盘鼠标钩子 [Vb.Net Hook](修正版)
- 学习笔记,VB.NET使用DirectSound9 (1) 简单播放
- 我的学习笔记之三——inline使用DLL进行全局HOOK(ring3_inline_dll_hook_Messagebox)
- 简单实现[BCB5]:键盘全局钩子[Hook],监视多进程键盘操作。
- vc学习笔记之hook(消息钩子过程)
- asp.net 2.0 个人认为处理网站全局错误最简单的方法
- 转自sgear博客:C#.Net的全局键盘钩子(Hook)技术
- Ext.NET学习笔记之3(简单的WEB文件管理器DEMO)
- C#.Net的全局键盘钩子(Hook)技术
- Hook学习笔记(一)Hook局部钩子实现
- C#.Net的全局键盘钩子(Hook)技术
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
- Directshow学习笔记五-----一个简单的视频播放程序(个人学习总结,仅供参考)
- 学习笔记,VB.NET使用DirectSound9 (1) 简单播放
- 个人学习笔记02-DoTween插件简单运用
- 个人安卓学习笔记---初学Activityの简单布局切换
- HOOK钩子机制学习笔记(1)
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)