Windows是建立在事件驱动机制上的,也就是所有消息的传递都是基于事件的,钩子就是截取这些消息进行处理。
钩子的种类:线程钩子和系统钩子。 线程钩子只处理本线程的事件。 系统钩子可以处理系统级的事件。
钩子的用法: 系统钩子暂时用不到,下面是线程钩子的使用 定义钩子函数,不同钩子的回调函数是不同的,具体按SetWindowHookEx的F1即可
LRESULT CALLBACK MouseProc(int nCode, WPARAM wparam, LPARAM lParam)
{
if(wparam == WM_MOUSEMOVE || wparam == WM_NCMOUSEMOVE || MyHook::instance().Hooks[nCode]._bActive)
{
POINT point = ((MOUSEHOOKSTRUCT *)lParam)->pt;
point.x = point.x;
point.y = point.y;
}
return CallNextHookEx(hook, nCode, wparam, lParam);
}
安装钩子
HHOOK hook = SetWindowsHookEx(idHook, lpfn, NULL, GetCurrentThreadId());
卸载钩子
UnhookWindowsHookEx(hook);