ACCESSWinAPI——钩子函数大全

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的版本.

相关文章