HHOOK SetWindowsHookEx( //装载一个钩子
int idHook, //描述被装载的钩子的类型,参数见下面
HOOKPROC lpfn, //钩子回调函数的地址,如果 dwThreadId 为 0 那么这个回调函数会在不同的进程中创建,它必须写在在DLL中
HINSTANCE hMod, //DLL的句柄
DWORD dwThreadId //描述要钩住的线程ID,如果这个参数为0,则会钩住桌面上的所有线程
); //如果函数调用成功,返回值是成功开启的钩子句柄,如果失败,返回值为 0
/*
idHook 相关的参数:
WH_CALLWNDPROC :安装一个钩子,监视系统发送给窗口的消息,更多信息如下:
LRESULT CALLBACK CallWndProc(
int nCode, //描述钩子程序是否一定要处理这个消息 如果 nCode == HC_ACTION,那么钩子程序一定要处理这个消息,如果 nCode 的值小于零,则一定要跳过这个消息
WPARAM wParam, //描述这个消息是否来自于当前的线程,如果这个消息是来自于当前的线程那么该值为非零,否则该值为零
LPARAM lParam //一个指向 CWPSTRUCT 结构体的指针,更多相关信息如下:
);
typedef struct {
LPARAM lParam; //消息的扩展信息
WPARAM wParam; //消息的扩展信息
UINT message; //消息
HWND hwnd; //接受消息的窗口
} CWPSTRUCT, *PCWPSTRUCT;
WH_CALLWNDPROCRET :安装一个钩子,监视系统发送已经处理后给窗口的消息,更多信息如下:
LRESULT CALLBACK CallWndRetProc(
int nCode, //描述钩子程序是否一定要处理这个消息 如果 nCode == HC_ACTION,那么钩子程序一定要处理这个消息,如果 nCode 的值小于零,则一定要跳过这个消息
WPARAM wParam, //描述这个消息是否来自于当前的线程,如果这个消息是来自于当前的线程那么该值为非零,否则该值为零
LPARAM lParam //一个指向 CWPSTRUCT 结构体的指针,更多相关信息如上:
);
WH_CBT :安装一个钩子,临视系统发送给窗口的基本信息(基于计算机培训的"钩子"),更多信息如下:
LRESULT CALLBACK CBTProc(
int nCode, //描述钩子程序装如何处理消息,如果 nCode 的值小于零 那么钩子程序将跳过这个消息.返回调用 CallNextHookEx 得到的返回值,相关值的意义如下
WPARAM wParam, //相关信息参见返回值
LPARAM lParam //相关信息参见返回值
); //返回值为参数一相关的值
// nCode 的相关值
HCBT_ACTIVATE :系统正要激活一个窗口
HCBT_CLICKSKIPPED :系统已经从消息队列中删除了鼠标滚回消息,必须在安装了 WH_JOURNALPLAYBACK 钩子之后才会触发该消息
HCBT_CREATEWND :一个窗口已经被创建,系统会在发送 WM_CREATE 或 WM_NCCREATE 消息之前调用钩子程序.如果钩子程序
的返回值为非零,那么系统装会销毁这个窗口, CreateWindow 函数的返回值会为 NULL,但是 WM_DESTROY
消息不会发送给窗口,如果钩子程序的返回值为零,那么窗口会被正常创建,在 HCBT_CREATEWND 被通知
的时候,这个窗口就已经被创建了,但是它的大小和位置被有被指定,以及它的父窗口也没有被指定.
HCBT_DESTROYWND :一个窗口已经被销毁
HCBT_KEYSKIPPED :系统已经从消息队列中删除了键盘滚回消息,必须在安装了 WH_JOURNALPLAYBACK 钩子之后才会触发该消息
HCBT_MINMAX :一个窗口已经最小化或最大化了
HCBT_MOVESIZE :一个窗口已经移动了或改变了大小
HCBT_QS :一个窗口已经从系统消息队列中接受了 WM_QUEUESYNC 消息.
HCBT_SETFOCUS :一个窗口已经被激活
HCBT_SYSCOMMAND :一个窗口已经接受了系统命令
WH_DEBUG :安装一个钩子,钩住安装钩子的程序(差错"钩子"),更多信息如下:
LRESULT CALLBACK DebugProc(
int nCode, //描述钩子程序是否一定要处理这个消息 如果 nCode == HC_ACTION,那么钩子程序一定要处理这个消息,如果 nCode 的值小于零,则一定要跳过这个消息
WPARAM wParam, //描述什么样的钩子被装载了,参数值与 SetWindowsHookEx 函数的 idHook 参数值相同
LPARAM lParam //一个指向 DEBUGHOOKINFO 结构体的指什,具体信息如下:
);
typedef struct {
DWORD idThread; //filter 线程的ID
DWORD idThreadInstaller; //debugging filter 线程的ID
LPARAM lParam; //描述跳过此钩子程序要传递给Debug程序的 lParam
WPARAM wParam; //描述跳过此钩子程序要传递给Debug程序的 wParam
int code; //描述跳过此钩子程序要传遵给Debug程序的 nCode
} DEBUGHOOKINFO, *PDEBUGHOOKINFO;
WH_FOREGROUNDIDLE :安装一个钩子,当一个程序的前端线程改变为低优先级时调用钩子程序,这个钩子在一个任务被降低优先级前工作(前台空闲窗口"钩子"),更多信息如下:
DWORD CALLBACK ForegroundIdleProc(
int code, //描述钩子程序是否一定要处理这个消息 如果 nCode == HC_ACTION,那么钩子程序一定要处理这个消息,如果 nCode 的值小于零,则一定要跳过这个消息
DWORD wParam, //这个参数没有用
LONG lParam //这个参数没有用
);
钩子函数详细描述
本文详细介绍了Windows操作系统中的各种钩子函数,包括WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT、WH_DEBUG、WH_FOREGROUNDIDLE、WH_GETMESSAGE、WH_JOURNALPLAYBACK、WH_JOURNALRECORD、WH_KEYBOARD、WH_KEYBOARD_LL、WH_MOUSE、WH_MOUSE_LL、WH_MSGFILTER、WH_SYSMSGFILTER和WH_SHELL等,讲解了它们的作用、参数和应用场景,帮助开发者理解和使用这些钩子进行系统消息监控和处理。
摘要由CSDN通过智能技术生成