一、钩子(Hook)
hook(钩子)是windows提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出, 在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递(return)。
二、钩子使用
1、使用DllImport属性引用非托管库user32.dll 中的方法
//获取当前线程编号
[DllImport("kernel32.dll")]
public static extern int GetCurrentThreadId();
//卸载钩子
[DllImport("User32.dll")]
public extern static bool UnhookWindowsHookEx(int handle);
//设置钩子
[DllImport("User32.dll")]
public extern static int SetWindowsHookEx(int idHook, [MarshalAs(UnmanagedType.FunctionPtr)] HookHandler Ipfn, IntPtr hanstance, int threadID);
//获取下一个钩子
[DllImport("User32.dll")]
public extern static int CallNextHookEx(int handle, int code, IntPtr wparam, IntPtr Iparam);
三、案例代码
获取鼠标当前坐标、获取键盘当前按键