我用HOOK钩住系统消息后,怎么取消系统对该消息的处理?

auto 2000-01-31 11:26:00
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dedema 2001-09-03
  • 打赏
  • 举报
回复
在全局hook中,在使用setwindowshookex函数时,能不能不在dll中声明啊?即把setwindowshookex的函数写到自己的程序中去
Hooman 2000-02-01
  • 打赏
  • 举报
回复
喔,Firing_Sky 的解释真详细。
我只是知道不调用CallNextHookEx 的话,这个消息处理到这就算
完了,就像jiangtao 所说。
Firing_Sky 2000-02-01
  • 打赏
  • 举报
回复
WINDOW下可进行挂接的过滤函数包括11种:
WH_CALLWNDPROC 窗口函数的过滤函数
WH_CBT 计算机培训过滤函数
WH_DEBUG 调试过滤函数
WH_GETMESSAGE 获取消息过滤函数
WH_HARDWARE 硬件消息过滤函数
WH_JOURNALPLAYBACK 消息重放过滤函数
WH_JOURNALRECORD 消息记录过滤函数
WH_MOUSE 鼠标过滤函数
WH_MSGFILTER 消息过滤函数
WH_SYSMSGFILTER 系统消息过滤函数
WH_KEYBOARD 键盘过滤函数
其中键盘过滤函数是最常用最有用的过滤函数类型,不管是哪一种类型的过滤函
数,其挂接的基本方法都是相同的。
WINDOW调用挂接的反调函数时总是先调用挂接链首的那个函数,因此必须将键盘挂
钩函数利用函数SetWindowsHookEx()将其挂接在函数链首。至于消息是否传递给函
数链的下一个函数是由每个具体函数功能确定的,如果消息需要传统给下一个函
数,可调用API函数的CallNextHookEx()来实现,如果不传递直接返回即可。
挂接函数可以是用来监控所有线程消息的全局性函数,也可以是单独监控某一线程
的局部性函数。如果挂接函数是局部函数,可以将它放到一个.DLL动态链接库中,
也可以放在一个局部模块中;如果挂接函数是全局的,那么必须将其放在一个.DLL
动态链接库中。挂接函数必须严格按照下述格式进行声明,以键盘挂钩函数为例:
int FAR PASCAL KeyboardProc(
int nCode,WORD wParam,DWORD lParam)
其中KeyboardProc为定义挂接函数名,该函数必须在模块定义文件中利用EXPORTS命
令进行说明;nCode决定挂接函数是否对当前消息进行处理;wParam和lParam为具体
的消息内容。
radish 2000-02-01
  • 打赏
  • 举报
回复
jiangtao说的不对吧,CALLNEXTHOOKEX是调用下一个HOOK,不调用应该只是不调用HOOK吧(猜的). 按WIN32API中的说法,有些HOOK只有监视功能,估计是不能取消消息的.
upstream 2000-02-01
  • 打赏
  • 举报
回复
同意jiangtao。
jiangtao 2000-01-31
  • 打赏
  • 举报
回复
处理完消息后,不要Call这个函数:CallNextHookEx
这个消息就不会再被处理


Result := CallNextHookEx (hNextMouseProc, nCode, wParam, lParam);
kxy 2000-01-31
  • 打赏
  • 举报
回复
自己定义一个WM_USER
把系统消息改成WM_USER

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧