2024年2月21日发(作者:)

钩子函数大全

DelHookProc :该函数已过时,它仅仅是用来与Windows的16位版本兼容.在32位Windows系统中应当使用函数CallNextHookEx.

:该函数已过时,它仅仅是用来与Windows的16位版本兼容.在32位Windows系统中应当使用函数SetWindowsHookEx.

函数参数

名称

返回值

idHook

SetWindowsHookEx 安装钩子 lpfn

hMod

返回值

hhk

返回值

hhk

CallNextHookEx 传递钩子信息到下一个钩子 nCode

wParam

lParam

将特定消息和钩子处理类型发送CallMsgFilter

KBDLLHOOKSTRUCT结构

DWORD vkCode; //键盘消息的虚拟键信息,值的范围从1至254

DWORD scanCode; //键盘的扫描码信息

DWORD flags; //键盘的扩展信息

DWORD time; //消息的产生时间,可以用 GetMessageTime 函数取得

ULONG_PTR dwExtraInfo; //消息的扩展信息

EVENTMSG结构

UINT message;//描述消息

UINT paramL;//消息的扩展信息

UINT paramH;//消息的扩展信息

DWORD time; //寄送消息的时间

HWND hwnd;//接受消息的窗口句柄

CREATESTRUCT结构

LPVOID lpCreateParams

将被用于创建窗口的数据的指针。

窗口拥有模块的实例句柄。

窗口的菜单。如果是子窗口,则包含整数ID。

窗口的父窗口。如果不是子窗口,为NULL。

窗口的高。

HINSTANCE hInstance

HMENU hMenu

int cy

CWPSTRUCT 结构

LPARAM lParam; //消息的扩展信息

WPARAM wParam; //消息的扩展信息

UINT message; //消息

HWND hwnd; //接受消息的窗口

DEBUGHOOKINFO结构

DWORD idThread; //filter 线程的ID

DWORD idThreadInstaller; //debugging filter 线程的ID

LPARAM lParam; //描述跳过此钩子程序要传递给Debug程序的 lParam

WPARAM wParam; //描述跳过此钩子程序要传递给Debug程序的 wParam

int code; //描述跳过此钩子程序要传遵给Debug程序的 nCode

MSLLHOOKSTRUCT结构

POINT pt; //发送鼠标消息时候的鼠标坐标

DWORD mouseData; //如果这个消息是 WM_MOUSEWHEEL 则高位为滚轮的滚动数目,低位保留.如果这个消息是 WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK,

WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, 或 WM_NCXBUTTONDBLCLK.则高位描述的是X按钮是按下还是释放,低位保留

DWORD flags; //描述消息的注入事件

DWORD time; //描述寄送消息的时候

ULONG_PTR dwExtraInfo;//描述消息的扩展信息

MOUSEHOOKSTRUCT结构

POINT pt; //发送鼠标消息时候的鼠标坐标

HWND hwnd; //接收鼠标消息的窗口句柄

UINT wHitTestCode; //测试码

ULONG_PTR dwExtraInfo; //鼠标消息的扩展信息

给与钩子WH_SYSMSGFILTER和返回值

lpMsg

类型

HHOOK

int

HOOKPROC

HINSTANCE

BOOL

HHOOK

LRESULT

HHOOK

int

WPARAM

LPARAM

BOOL

LPMSG

int

钩子句柄,失败为NULL

钩子类型

回调函数指针

Lpfn所在动态链接的句柄,若dwThreadId指示的线程由当前进程创建,且pfn定义于当前进程相关的代码中,则参数hMod必须被设置为NULL(0)

线程标识符.若此参数值为0,则该挂钩处理过程与所有现存的线程相关

是否执行成功

钩子句柄

处理结果

钩子句柄

钩子处理类型

含义依赖于nCode

应用程序是否不能对该消息作进一步处理

一个MSG结构

钩子处理类型,该类型切忌采用与系统预定义的与WH_SYSMSGFILTER和WH_MSGFILTER钩子相关的钩子处理类型(MSGF_ 和 HC_开头)相同的值

含义

SetWindowsHook

UnhookWindowsHook :该函数已过时,它仅仅是用来与Windows的16位版本兼容.在32位Windows系统中应当使用函数UnhookWindowsHookEx.

函数名称 函数作用

dwThreadId DWORD

UnhookWindowsHookEx 卸载钩子

WH_MSGFILTER 相联系的回调函数

nCode

HWND hwndParent

int cx

int y

int x

窗口的宽。

窗口的左上角的y轴坐标。如果是子窗口,则坐标相对于父窗口;否则坐标相对于屏幕原点。

窗口的左上角的x轴坐标。如果是子窗口,则坐标相对于父窗口;否则坐标相对于屏幕原点。

窗口的风格。

窗口的名字。

窗口的Windows类名(一个WNDCLASS结构;更多的信息参见Win32 SDK文档)。

窗口的扩展风格。

LONG style

LPCSTR lpszName

LPCSTR lpszClass

DWORD dwExStyle

回调函数

对应回调函数

宏名 宏含义

监视系统发送给窗口的消息(消息处理前)

监视系统发送给窗口的消息(消息处理后)

名称

CallWndProc

HC_ACTION

CallWndRetProc

参数

nCode nCode含义 wParam

消息是来自于当前的线程那么该值为非零,否则该值为零

CBTACTIVATESTRUCT结构的长指针,HCBT_ACTIVATE 系统正要激活一个窗口 将要被激活的窗口句柄 结构包含指向激活窗口的句柄,并指示被激活者是否由于点击而发生改变

MOUSEHOOKSTRUCT结构的指针,结构临视系统发送给窗口的基本信息

此挂钩处理过程的返回值决定了系统允许或禁止以下操作之一,对于与以下挂钩代码相应的操作,返回值为0则允许这样WH_CBT(5) 的操作,返回值为1则禁HCBT_CREATEWNDHCBT_MINMAXHCBT_MOVESIZEHCBT_SETFOCUS止、HCBT_DESTROYWND

、、、HCBT_KEYSKIPPED

系统已从消息队列删除键盘滚回消息,必须在安装了

WH_JOURNALPLAYBACK 钩子之后才会触发该消息

指示虚拟键的代码

(HCBT_ACTIVATE、HCBT_DESTROYWND、CBTProc

HCBT_CREATEWND

一个窗口将被创建,系统在发送WM_CREATE 或WM_NCCREATE消息之前调用该挂钩处理过程.若该挂钩处理过程返回非0值,则系统销毁该窗口,函数CreateWindow返回NULL,但消息WM_DESTROY不会被发送,若挂钩处理过程返回为零,窗口将正常创建.当HCBT_CREATEWND通知发出时,相应窗口已被创建,但其最终尺寸及位置可能尚未确定,其父窗口也可能未被创建,有一种可能,消息发送给被创建窗口,虽然窗口尚未接到WM_NCCREATE 或 WM_CREATE 消息.也可通过对CBT_CREATEWND结构hwndInsertAfter的修改,来改变新被创建窗口在Z序列中的位置

一个窗口已经被销毁 将被销毁的窗口句柄 0

重复次数、扫描码、键转义码、前驱键状态和上下文代码.更多信息,参见

WM_KEYUP或WM_KEYDOWN仅当WH_KEYBOARD挂钩安时有效.

HCBT_MINMAX

HCBT_MOVESIZE

一个窗口已经最小化或最大化了

一个窗口已经移动了或改变了大小

指定被最小化或最大化的窗口句柄

指定将被移动或改变尺寸的窗口句柄

低字节指定值(SW_),详见ShowWindow,高字节未定义

RECT结构的长指针,改变结构的值能设置窗口最终位置

指定新窗口的句柄

指定一个指向 CBT_CREATEWND结构的长指针,该结构包含窗口的初始化参数,这些参数包括窗口的坐标和尺寸,通过改变这些参数.一个CBTProc挂钩处理过程能够设置窗口的初始尺寸和位置

HCBT_CLICKSKIPPED

系统已从消息队列中删除鼠标滚回消息,须安装了 标识鼠标消息从系统消WH_JOURNALPLAYBACK钩子之后才会触发该消息 息队列中被删除

包含点击测试代码及鼠标消息发往的窗口句柄.HCBT_CLICKSKIPPED值当一个WH_MOUSE挂钩被安装时有效,点击测试代码列表,参见 WM_NCHITTEST

一个指向 CWPSTRUCT 结构体的指针

lParam

WH_CALLWNDPROC(4)

WH_CALLWNDPROCRET(12)

HCBT_SYSCOMMAND)

HCBT_QS

HCBT_SETFOCUS

HCBT_SYSCOMMAND

一个窗口已经从系统消息队列中接受了 WM_QUEUESYNC 消息

一个窗口已经被激活

一个窗口已接受了系统命令,使应用程序可避免因热键响应而进行任务切换

0

获得焦点的窗口句柄

以(SC_)标识的系统命令值,更多系统命令值的信息,参见WM_SYSCOMMAND

被装载钩子的类型,与

SetWindowsHookEx 函数的 idHook 参数相同

0

失去焦点的窗口句柄

WM_SYSCOMMAND的lParam值

若鼠标选中系统菜单,低、高字节分别为X、Y的屏幕坐标

一个指向DEBUGHOOKINFO 结构体的指什

WH_DEBUG(9)

钩住安装钩子的程序(差错"钩子")

监视一个程序的前端线程改变为低优先DebugPro HC_ACTION

WH_FOREGROUNDIDLE(11) 级,钩子在程序被降低优先级前工作(前台空闲窗口"钩子")

ForegroundIdleProc HC_ACTION

消息是否已从消息队列中被删除:PM_NOREMOVE:监视一个消息被寄送WH_GETMESSAGE(3)

到了消息等待队列中(接收消息投递的"钩子")

GetMsgProc HC_ACTION

未删除(应用程序调用PeekMessage函数,设置PM_NOREMOVE标志) 一个指向 MSG 结构体的指针

PM_REMOVE:已删除(应用程序调用GetMessage或PeekMessage函数,设置

PM_REMOVE标志)

HC_GETNEXT

滚回一个鼠标键盘的消息队列,这个消息WH_JOURNALPLAYBACK(1) 队列是由 JournalPlaybackProc

WH_JOURNALRECORD钩子创建的

HC_NOREMOVE

HC_SKIP

HC_SYSMODALOFF

HC_SYSMODALON

钩子程序拷贝了当前的鼠标或键盘消息

应用程序调用了 PeekMessage 函数,且调用 PeekMessage 函数之后,消息没有从系统消息队列中被移除

钩子程序准备复制被 lParam 指向的 EVENTMSG 结构下的鼠标或键盘信息,一旦收到 HC_GETNEXT 钩子程序复制

一个消息框被销毁,钩子程序将继续开始滚回消息

EVENTMSG 结构体的指针

EVENTMSG 结构体的指针

记录一个鼠标键盘消息队列

HC_ACTION

JournalRecordProc

HC_SYSMODALOFF

HC_SYSMODALON

HC_ACTION

一个消息框被销毁,钩子程序将继续开始滚回消息

参数wParam and lParam包含一个击键消息的信息

参数wParam and lParam包含一个击键消息的信息,且此击键消息未从HC_NOREMOVE 消息队列中删除(应用程序调用函数PeekMessage 设置了PM_NOREMOVE 标志)

指示产生此击键消息的虚拟键代码

结构包含从系统消息队列中删除了的消息,此挂钩处理过程必须纪录下此结构内容

0-15位:重复次数,用户继续摁键引发的击键重复次数

WH_KEYBOARD(2) 监视键盘的消息 KeyboardProc

16-23位:扫描码,依赖键盘生产厂家

24位:此键是否为扩展键,比如功能键或数字小键盘上的键,当该键为扩展时,其值为1,否则为0

一个消息框被显示,钩子程序将暂停滚回消息,直到这个消息框被销毁

一个消息框被显示,钩子程序将暂停滚回消息,直到这个消息框被销毁

WH_JOURNALRECORD(0)

25-28位:保留未用.

29位:Alt键摁下为1,否为0

30位:此前的键状态,此消息发送前是摁下为1,否为0

31位:变化状态,此键正被摁下为0,否为1

参见 Keystroke Message Flags

监视键盘的低级消息WH_KEYBOARD_LL(13) (Windows

NT/2000/XP)

HC_ACTION

WH_MOUSE(7) 监视鼠标的消息 MouseProc

HC_NOREMOVE

参数wParam and lParam包含一个鼠标消息的信息

参数wParam and lParam包含一个鼠标消息的信息,且此鼠标消息未从消息队列中删除(应用程序调用函数PeekMessage 设置了PM_NOREMOVE 标志)

监视鼠标的低级消息WH_MOUSE_LL(14) (Windows

NT/2000/XP)

MSGF_DIALOGBOX

MSGF_MESSAGEBOX

MSGF_MENU

监视一些如同输入框,消息框,菜单,滚WH_MSGFILTER(-1) 动条的事件(对话框、消息框、菜单或滚动条输入消息"钩子")

MessageProc

MSGF_SCROLLBAR

MSGF_NEXTWINDOW

MSGF_MAX

MSGF_USER

消息框或者对话框产生

?

菜单条产生

滚动条产生

由于用户摁下组合键以激活另一个窗口而产生

?

?

动态数据交换管理库( Dynamic Data Exchange Management Library

MSGF_DDEMGR (DDEML)正等一个同步处理结束时产生,详情参见Dynamic Data

Exchange Management Library

ACCESS_FILTERKEYSHSHELL_ACCESSIBILITYSTATE

HSHELL_ACTIVATESHELLWINDOW

WH_SHELL(10)

监视对程序的 Shell

操作(外壳"钩子")

ShellProc

HSHELL_APPCOMMAND

HSHELL_GETMINRECT

HSHELL_LANGUAGE

HSHELL_REDRAW

对Windows NT5.0或以上版本有效,指示"可访问性"已被改变

shell应当激活其主窗口

用户完成了输入一个指令(例如按下了一个关键的按钮或键)而且应用程序没有处理被产生的WM_APPCOMMAND 消息

Windows 95 only: 一个窗口正在被最小化或者最大化,系统需要该窗口被最小化时的矩形坐标

Windows 95 only: 键盘语言被改变或者一个新的键盘布局被加载

Windows 95 only: 一个窗口在任务条上的标题已被重画

ACCESS_MOUSEKEYSACCESS_STICKYKEYS

见WM_APPCOMMAND参数

最小化或最大化窗口的句柄

窗口的句柄

重画窗口的句柄

见WM_APPCOMMAND参数

指向该RECT结构的指针

键盘布局的句柄

窗口正在闪现为TRUE,否为FALSE

,,

LowLevelMouseProc HC_ACTION

LowLevelKeyboardProc HC_ACTION

WM_KEYDOWN,WM_SYSKEYDOWN,

WM_KEYUP,WM_SYSKEYUP

WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE,WM_MOUSEWHEEL,WM_RBUTTONDOWN,WM_RBUTTONUP

WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE,WM_MOUSEWHEEL,WM_RBUTTONDOWN,WM_RBUTTONUP

指向MSG结构的指针

一个指向 MSLLHOOKSTRUCT 的指针

MOUSEHOOKSTRUCT 结构的指针

KBDLLHOOKSTRUCT 结构体的指针

HSHELL_TASKMAN

HSHELL_WINDOWACTIVATED

HSHELL_WINDOWCREATED

HSHELL_WINDOWDESTROYED

HSHELL_WINDOWREPLACED

监视一些如同输入WH_SYSMSGFILTER(6)

框,消息框,菜单,滚动条的系统事件(系统消息"钩子")

SysMsgProc 同WH_MSGFILTER

Windows 95 only: 用户已选择其任务列表.一个提供了任务的列表的shell应用程序当返回TRUE,以阻止Windows开始(执行)其任务列表

一个顶层的窗口已被创建.在调用钩子函数的时候,窗口存在

一个顶层的窗口即将销毁.在调用钩子函数的时候.窗口仍然存在

一个顶层的窗口位置改变,在调用钩子函数的时候,窗口位置已改变

窗口是全屏模式为TRUE,否为FALSE.

取代窗口的句柄

Windows 95 only: 激活状态已被转移给一个不同的顶层无属性主窗口 激活窗口的句柄

创建窗口的句柄

销毁窗口的句柄

被取代窗口的句柄