WinAPI——钩子函数大全

阅读: 评论:0

WinAPI——钩⼦函数⼤全
SetWindowsHookEx
函数功能:该函数将⼀个应⽤程序定义的挂钩处理过程安装到挂钩链中去,您可以通过安装挂钩处理过程来对系统的某些类型事件进⾏监控,这些事件与某个特定的线程或系统中的所有事件相关.
函数原形:HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId );
参数:
idHook:指⽰欲被安装的挂钩处理过程之类型,此参数可以是以下值之⼀:
WH_CALLWNDPROC(4): 安装⼀个挂钩处理过程,在系统将消息发送⾄⽬标窗⼝处理过程之前,对该消息进⾏监视,详情参见CallWndProc 挂钩处理过程.
WH_CALLWNDPROCRET(12) :安装⼀个挂钩处理过程,它对已被⽬标窗⼝处理过程处理过了的消息进⾏监视,详情参见 CallWndRetProc 挂钩处理过程.
WH_CBT(5) :安装⼀个挂钩处理过程,接受对CBT应⽤程序有⽤的消息 ,详情参见 CBTProc 挂钩处理过程.
WH_DEBUG(9):安装⼀个挂钩处理过程以便对其他挂钩处理过程进⾏调试, 详情参见DebugProc挂钩处理过程.
WH_FOREGROUNDIDLE(11):安装⼀个挂钩处理过程,该挂钩处理过程当应⽤程序的前台线程即将进⼊空闲状态时被调⽤,它有助于在空闲时间内执⾏低优先级的任务.
WH_GETMESSAGE(3):安装⼀个挂钩处理过程对寄送⾄消息队列的消息进⾏监视,详情参见 GetMsgProc 挂钩处理过程.
WH_JOURNALPLAYBACK(1):安装⼀个挂钩处理过程,对此前由WH_JOURNALRECORD 挂钩处理过程纪录的消息进⾏寄送.详情参见JournalPlaybackProc挂钩处理过程.
WH_JOURNALRECORD(0):安装⼀个挂钩处理过程,对寄送⾄系统消息队列的输⼊消息进⾏纪录.详情参见JournalRecordProc挂钩处理过程.
WH_KEYBOARD(2):安装⼀个挂钩处理过程对击键消息进⾏监视. 详情参见KeyboardProc挂钩处理过程.
WH_KEYBOARD_LL(13):此挂钩只能在Windows NT中被安装,⽤来对底层的键盘输⼊事件进⾏监视.详情参见LowLevelKeyboardProc 挂钩处理过程.
WH_MOUSE(7):安装⼀个挂钩处理过程,对⿏标消息进⾏监视.  详情参见 MouseProc挂钩处理过程.
WH_MOUSE_LL(14):此挂钩只能在Windows NT中被安装,⽤来对底层的⿏标输⼊事件进⾏监视.详情参见LowLevelMouseProc挂钩处理过程.
WH_MSGFILTER(-1):安装⼀个挂钩处理过程, 以监视由对话框、消息框、菜单条、或滚动条中的输⼊事件引发的消息.详情参见MessageProc挂钩处理过程.
WH_SHELL(10):安装⼀个挂钩处理过程以接受对外壳应⽤程序有⽤的通知, 详情参见 ShellProc挂钩处理过程.
WH_SYSMSGFILTER(6):安装⼀个挂钩处理过程,以监视由对话框、消息框、菜单条、或滚动条中的输⼊事件引发的消息.这个挂钩处理过程对系统中所有应⽤程序的这类消息都进⾏监视.详情参见 SysMsgProc挂钩处理过程.
lpfn:指向相应的挂钩处理过程.若参数dwThreadId为0或者指⽰了⼀个其他进程创建的线程之标识符,
则参数lpfn必须指向⼀个动态链接中的挂钩处理过程.否则,参数lpfn可以指向⼀个与当前进程相关的代码中定义的挂钩处理过程.
hMod:指⽰了⼀个动态链接的句柄,该动态连接库包含了参数lpfn  所指向的挂钩处理过程.若参数dwThreadId指⽰的线程由当前进程创建,并且相应的挂钩处理过程定义于当前进程相关的代码中,则参数hMod必须被设置为NULL(0).
dwThreadId:指⽰了⼀个线程标识符,挂钩处理过程与线程相关.若此参数值为0,则该挂钩处理过程与所有现存的线程相关.
返回值:若此函数执⾏成功,则返回值就是该挂钩处理过程的句柄;若此函数执⾏失败,则返回值为NULL(0).若想获得更多错误信息,请调⽤GetLasError函数.
备注:若参数hMod为NULL,⽽参数dwThreadld为0或者指⽰了⼀个其他进程创建的线程标识符,则会产⽣错误.
对函数CallNextHookEx进⾏调⽤以下链接下⼀个挂钩处理过程是可选的,但也是被推荐的否则,其他安装了此挂钩的应⽤程序将⽆法获得此挂钩通知,从⽽可能导致错误的⾏为.除⾮您确实希望防⽌其他应⽤程序看到此挂钩通知,您应当调⽤函数CallNextHookEx.
在终⽌⼀个应⽤程序之前,必须调⽤函数UnhookWindowsHookEx以释放与此挂钩相关的系统资源.
挂钩的作⽤域依赖与挂钩的类型.⼀些挂钩只能被设置成系统作⽤域,其他挂钩(如下所⽰)还可以被设置为某⼀特定线程的作⽤域:
WH_CALLWNDPROC          线程或系统
WH_CALLWNDPROCRET        线程或系统
WH_CBT                  线程或系统
WH_DEBUG                线程或系统
WH_FOREGROUNDIDLE        线程或系统
WH_GETMESSAGE            线程或系统
WH_JOURNALPLAYBACK      系统
WH_JOURNALRECORD        系统
WH_KEYBOARD              线程或系统
WH_KEYBOARD_LL          线程或系统
lzr种子
WH_MOUSE                线程或系统
WH_MOUSE_LL              线程或系统
WH_MSGFILTER            线程或系统
WH_SHELL                线程或系统
WH_SYSMSGFILTER          系统
对于⼀个特定的挂钩类型,现成的挂钩先被调⽤,然后才是系统挂钩被调⽤.
系统挂钩作为共享资源,安装⼀次就对所⽤应⽤程序产⽣影响.所有的系统挂钩函数必须在库中.系统挂钩应当被限制⽤于⼀些特殊⽤途的应⽤程序或者⽤来作为应⽤程序调试的辅助⼯具.不再需要挂钩的库应当将相应的挂钩处理过程删除掉.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不⽀持,头⽂件winuser.h,库⽂件:⽤户⾃定义,Unicode,在Windows NT上实现了Unicode和ANSI的版本.
股骨头仪ShellProc
函数功能:挂钩处理过程是应⽤程序或库中定义的回调函数,它与函数 SetWindowsHookEx搭配使⽤.此函数从系统接受外壳(shell)通知.类型HOOKPROC定义了指向此类回调函数的指针.ShellProc时应⽤程序或库中定义的相应回调的位置标志符.
显示器自动开关机函数原形:LRESULT CALLBACK ShellProc( int nCode, WPARAM wParam,LPARAM lParam );
参数:
nCode:指⽰挂钩类型,该参数可以是以下值之⼀:
HSHELL_ACCESSIBILITYSTATE: 对Windows NT5.0或以上版本有效,指⽰"可访问性"已被改变.
HSHELL_ACTIVATESHELLWINDOW: shell应当激活其主窗⼝.
HSHELL_GETMINRECT: Windows 95 only: ⼀个窗⼝正在被最⼩化或者最⼤化,系统需要该窗⼝被最⼩化时的矩形坐标.
HSHELL_LANGUAGE  : Windows 95 only: 键盘语⾔被改变或者⼀个新的键盘布局被加载.
HSHELL_REDRAW:    Windows 95 only: ⼀个窗⼝在任务条上的标题已被重画.
HSHELL_TASKMAN:  Windows 95 only: ⽤户已选择其任务列表.⼀个提供了任务的列表的shell应⽤程序当返回TRUE,以阻⽌Windows 开始(执⾏)其任务列表.
HSHELL_WINDOWACTIVATED: Windows 95 only: 激活状态已被转移给⼀个不同的顶层⽆属性主窗⼝.
HSHELL_WINDOWCREATED: ⼀个顶层⽆属性主窗⼝已被创建.当系统调⽤⼀个SheProc函数时,该窗⼝存在.
同温同压下HSHELL_WINDOWDESTROYED:⼀个顶层⽆属性主窗⼝即将销毁.当系统调⽤SheProc 函数时.该窗⼝仍然存在.
若nCode的值⼩于0,则此挂钩处理过程必须将该消息不加处理地传送给函数CallNextHookEx 并返回其返回值.
wParam: 此参数的值依赖于参数nCode,其依赖关系如下所⽰:
HSHELL_ACCESSIBILITYSTATE: 指⽰哪⼀个可以访问特征已被改变了状态,可以是以下值之⼀:
ACCESS_FILTERKYS,ACCESS_MOUSEKEYS,ACCESS_STICKKEYS.
HSHELL_GETMINRECT:被最⼩化或者最⼤化的窗⼝句柄.HSHELL_LANGUAGE: 窗⼝的句柄.
HSHELL_REDRAW:被重画的窗⼝的句柄.HSHELL_WINDOWACTIVATED:被激活的窗⼝的句柄.
HSHELL_WINDOWCREATED:被创建的窗⼝的句柄.HSHELL_WINDOWDESTROYED:被销毁的窗⼝的句柄.
lParam:此参数的值依赖于参数nCode,其依赖关系如下所⽰:
一次性杯架HSHELL_GETMINRECT:指向该RECT结构的指针.HSHELL_LANGUAGE: 键盘布局的句柄.
HSHELL_REDRAW: 若该窗⼝正在闪现,则其值为TRUE,否则为FALSE.
HSHELL_WINDOWACTIVATED: 若该窗⼝是全屏模式,则其值为TRUE,否则为FALSE.返回值:返回值应为0.
备注:此挂钩处理过程通过调⽤函数SetWindowsHookEx ,指定WH_SHLL挂钩类型及其相应挂钩处理过程⾸地址来安装.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不⽀持,头⽂件winuser.h,库⽂件,⽤户⾃定义.
SysMsgProc
函数功能:挂钩处理过程是应⽤程序或库中定义的回调函数,它与函数 SetWindowsHookEx搭配使⽤.当⼀个对话框、消息框、菜单条、或滚动条中的输⼊事件发⽣,且由此引发的消息尚未被处理之前,系统对此挂钩处理过程进⾏调⽤.此函数可以对系统中所有的对话框、消息框、菜单条、或滚动条消息进⾏监视.
类型HOOKPROC定义了指向此类回调函数的指针.SysMsgProc 是库中相应回调函数名的位置标志符.
函数原形:LRESULT CALLBACK SysMsgProc(int nCode,WPARAM wParam,LPARAM lParam);
参数:
nCode:指⽰产⽣此消息的输⼊事件类型.此参数可以是以下值之⼀:
MSGF_DIALOGBOX:    输⼊事件由⼀个消息框或者对话框产⽣.
MSGF_MENU:        输⼊事件由⼀个菜单条产⽣.
MSGF_SCROLLBAR:      输⼊事件由⼀个滚动条产⽣.
MSGF_NEXTWINDOW:    输⼊事件由于⽤户摁下组合键<Alt+Tab>以激活另⼀个窗⼝⽽产⽣.
若nCode的值⼩于0,则此挂钩处理过程必须将该消息不加处理地传送给函数 CallNextHookEx 并返回其返回值.
wParam: 为NULL(0).
lParam: 指向MSG结构的[指针].
返回值:若nCode的值⼩于0,则此挂钩处理过程必须返回CallNextHookEx 的返回值.若nCode的值⼤于或等于0,并且此挂钩处理过程未对该消息进⾏处理,则调⽤函数CallNextHookEx 并返回其返回值是被推荐的.否则,其他安装了WH_SYSMSGFILTER挂钩的应⽤程序将⽆法收到此挂钩通知,并可能由此导致错误的⾏为.若此挂钩处理过程处理了此消息,它应返回⼀个⾮零值以避免系统再将此消息传送给⽬标窗⼝处理过程.
备注:⼀个应⽤程序通过调⽤函数SetWindowsHookEx 指定 WH_SYSMSGFILTER挂钩类型及相应挂钩处理过程⾸地址来安装此挂钩.
速查:Windows NT:3.1以及以上版本,Windows :95以及以上版本,Windows CE 不⽀持,头⽂件winuser.h,库⽂件,⽤户⾃定义.
UnhookWindowsHookEx
函数功能: 该函数将⼀个由SetWindowsHookEx 安装的挂钩处理过程从挂钩链中删除.
函数原形: BOOL UnhookWindowsHookEx(HHOOK hhk);
参数:
hhk: 被删除的挂钩的句柄.此参数是⼀个挂钩句柄,该句柄是此前函数SetWindowsHookEx的返回值.
返回值:该函数执⾏成功返回⾮0值,失败返回0.
备注:即使UnhookWindowsHookEx 函数返回之后,该钩⼦处理过程也可能正处于被其它线程调⽤的状态.若当前未调⽤该钩⼦处理过程,则在 UnhookWindowsHookEx 函数返回之前该钩⼦处理过程被⽴即删除.
DelHookProc:该函数已过时,它仅仅是⽤来与Windows的16位版本兼容.在32位Windows系统中应当
使⽤函数CallNextHookEx. SetWindowsHook:该函数已过时,它仅仅是⽤来与Windows的16位版本兼容.在32位Windows系统中应当使⽤函数SetWindowsHookEx.
UnhookWindowsHook:该函数已过时,它仅仅是⽤来与Windows的16位版本兼容.在32位Windows系统中应当使⽤函数UnhookWindowsHookEx.
CallMsgFilter
函数功能:该函数将特定消息和挂钩代码发送给与挂钩 WH_SYSMSGFILTER和WH_MSGFILTER 相联系的挂钩处理过程,⼀个
WH_SYSMSGFILTER 或者 WH_MSGFILTER挂钩处理过程是指应⽤程序定义的回调函数,这些回调函数负责检查,并可有选择地修改关于对话框、消息框、菜单条、滚动条的消息。
分量信号函数原形:BOOL CallMsgFilter(LPMSG lpMsg, int nCode);

本文发布于:2023-06-11 05:53:16,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/135559.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:挂钩   函数   消息   系统   线程   回调   参见   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图