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           线程或系统

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

 

参数:

lpMsg:本着一个MSG结构,该社团包含发送给挂钩处理过程的音讯.

 

nCode:指定挂钩处理过程需要利用的应用程序定义的代码,以确定哪些对音信进行拍卖,该代码切忌采取与系统预定义的与WH_SYSMSGFILTER和WH_MSGFILTER挂钩相关的互换代码(MSGF_
和 HC_开始)相同的值.

 

返回值:若该应用程序可对信息作进一步处理,则重临值为0,若该应用程序无法对该信息作进一步处理,则重返值为非0值.

 

备注:系统对CallMsgFilter举办调用,以使得应用程序可以检查和决定在对对话框、信息框、菜单条、滚动条的里边处理过程中生出的,或是由用户按下<Alt+Tab>组合键以激活不同窗口时暴发的信息流.

可透过调用函数SetWindowsHookEx来设置此挂钩处理过程.

速查:Windows NT:3.1以及上述版本,Windows :95以及上述版本,Windows CE
不补助,头文件:winuser.h,库文件:user32.lib,Unicode:在Windows
NT上实现了Unicode和ANSI的版本.

相关文章