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: 激活状态已被转移给一个不同的顶层无属性主窗口 激活窗口的句柄
创建窗口的句柄
销毁窗口的句柄
被取代窗口的句柄
发布评论