全局钩子HOOK不到SendNotifyMessage广播消息?

sivenyu 2012-08-22 12:04:39
写了个全局钩子DLL,能够hook到BroadcastSystemMessage广播的消息, 但是换成SendNotifyMessage就不行:

gluMyMsgID = RegisterWindowMessage(WM_MY_MSG_STR);
::SendNotifyMessage(HWND_BROADCAST, gluMyMsgID, 0, 0);

MSDN讲:
If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
SendNotifyMessage返回时成功的,如果在exe是能收到消息,不清楚为什么不能被hook到?请指教!
...全文
239 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2012-08-25
  • 打赏
  • 举报
回复
全局hook在hook链的最上层。
schlafenhamster 2012-08-25
  • 打赏
  • 举报
回复
全局hook在hook链的最上层。
schlafenhamster 2012-08-25
  • 打赏
  • 举报
回复
是不是因为全局hook在hook链的最上层。
sivenyu 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
因为最后一个参数为0,你hook了所有线程
因hook而被注入的每个进程都会对hook的消息进行处理,所以一个……
[/Quote]
大概也知道全局hook是怎么回事,但不清楚这里为什么是3次,又比如,如果用WH_GETMESSAGE类型的hook抓BroadcastSystemMessage广播的消息,就会抓到6次,谁能帮忙解释为什么会出现3次和6次的情况?
schlafenhamster 2012-08-24
  • 打赏
  • 举报
回复
那就比较HWND是哪个
franzhong 2012-08-24
  • 打赏
  • 举报
回复
为0就是个全局钩子
Gloveing 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

SendNotifyMessage发出来的消息,如果在exe的WindowProc收是只有一次的,但DLL里, WH_GETMESSAGE类型钩子收不到,WH_CALLWNDPROC类型全局钩子就会收到三次,每次的HWND都不同的。不知道为什么!
[/Quote]
因为最后一个参数为0,你hook了所有线程
因hook而被注入的每个进程都会对hook的消息进行处理,所以一个被hook的消息可能会被处理很多次
sivenyu 2012-08-23
  • 打赏
  • 举报
回复
SendNotifyMessage发出来的消息,如果在exe的WindowProc收是只有一次的,但DLL里, WH_GETMESSAGE类型钩子收不到,WH_CALLWNDPROC类型全局钩子就会收到三次,每次的HWND都不同的。不知道为什么!
sivenyu 2012-08-23
  • 打赏
  • 举报
回复
做不到啊,无法指定目标ID。因为我要hook的是别人驱动广播出来的消息,无法知道他的线程ID。
信息计算 2012-08-22
  • 打赏
  • 举报
回复
修改hook 目标id
oyljerry 2012-08-22
  • 打赏
  • 举报
回复
那就Hook安装的时候,设定你特定的线程ID
Gloveing 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
不对,刚才搞错了,使用WH_CALLWNDPROC可以hook到的,但是不知道为什么hook多了,每发送一次将hook到三次!
[/Quote]
hook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)msghook, hInst,0);
因为最后一个参数为0,你hook了所有线程
只需要改为hook你的目标线程就只有一次
sivenyu 2012-08-22
  • 打赏
  • 举报
回复
不对,刚才搞错了,使用WH_CALLWNDPROC可以hook到的,但是不知道为什么hook多了,每发送一次将hook到三次!
sivenyu 2012-08-22
  • 打赏
  • 举报
回复
用的WH_GETMESSAGE,
hook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)msghook, hInst,0);

也试过WH_CALLWNDPROC,但解释不到自己那个gluMyMsgID消息!
schlafenhamster 2012-08-22
  • 打赏
  • 举报
回复
HookAPI
HookMessage
你用的什么?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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