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);