全局钩子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到?请指教!
...全文
288 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
你用的什么?
内容概要:本文针对T型三电平逆变器在电网电压跌落条件下的低电压穿越(LVRT)问题,提出了一种结合改进电流解耦控制与直流侧中点电位平衡的综合控制策略。通过建立逆变器的数学模型,采用双二阶广义积分器(DSOGI)实现电网电压正负序分量的精确分离,并在此基础上设计自适应无功支撑与故障电流限幅控制,以满足LVRT对无功补偿和电流安全性的要求。为提升不对称故障下的动态性能,引入改进的正负序解耦电流控制方法,有效克服传统PI控制器在耦合干扰下的控制滞后问题。同时,结合零序电压注入法对中点电位进行主动调控,抑制中点电压漂移,保障系统长期稳定运行。整个控制方案在Simulink平台上完成建模与仿真验证,结果表明该方法在电网故障期间具有优良的动态响应特性、稳定的中点电位控制能力和可靠的并网运行性能。; 适合人群:具备电力电子、自动控制或新能源并网技术背景,从事逆变器控制算法开发、微电网系统集成或可再生能源发电系统研究的工程技术人员及高校研究生。; 使用场景及目标:①用于提升T型三电平逆变器在电网故障条件下的并网可靠性与电能质量;②为高比例新能源接入场景下的LVRT控制策略设计提供理论支撑与技术路径;③适用于需要实现高性能电流控制与中点电位稳定的工业级变流器控制系统开发。; 阅读建议:建议结合提供的Simulink仿真模型进行学习,重点剖析正负序分离、改进电流解耦控制环设计及中点电位平衡模块的协同工作机制,可通过设置不同类型的电网故障(如单相短路、两相短路)和调节控制参数开展对比实验,深入掌握各模块对系统整体性能的影响规律。

15,465

社区成员

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

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