SetWindowHookEx中的WH_GETMESSAGE对应的回调函数不执行?

bai_hua_lin 2010-09-21 11:19:32
先说下我的做法:
在一个基于对话框的应用程序中,响应一个按钮消息,在这个消息函数里面得到桌面的句柄hwndLV,然后获取其线程的ID:
DWORD dwThreadId = GetWindowThreadProcessId(hwndLV, NULL);

写了一个MFC Regular DLL,在InitInstance()中,获取当前DLL的加载虚拟地址:
HINSTANCE g_hInst = AfxGetInstanceHandle();
在这个DLL中定义一个导出函数SomeFunc,带一个参数,接受线程ID,为dwThreadId,以便把DLL注入到这个线程所在的进程中:
SetWindowHookEx(WH_GETMESSAGE, GetMsgProc, g_hInst, dwThreadId);
其中,GetMsgProc定义如下:
LRESUT CALLBACK GetMsgProc(WPARAM wParam, LPARAM lParam)
{
}

最后在我的基于对话框的应用程序的那个响应函数中,把获得的线程ID,通过调用DLL的导出函数实现对指定进程注入DLL:
SomeFunc(dwThreadId);


结果,无论如何努力,DLL中的GetMsgProc函数就是不被执行。请大家分析下原因。
...全文
245 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TwilightSun 2011-02-09
  • 打赏
  • 举报
回复
哎,LZ的问题解决了吗?
小弟我也遇到了一模一样的问题,不止WH_GETMESSAGE,其他的也没用,原先还可以的,但是现在不行了……
bai_hua_lin 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lazy_2010 的回复:]
通常情况下,尽力隐藏的代码中包含犯的错误
[/Quote]

啥意思?
lazy_2010 2010-09-27
  • 打赏
  • 举报
回复
通常情况下,尽力隐藏的代码中包含犯的错误
bai_hua_lin 2010-09-27
  • 打赏
  • 举报
回复
试过了,确实不能调用回调函数
bai_hua_lin 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lsq19871207 的回复:]
大家都知道,单步调试的时候我们是看不见回调函数的单步执行情况,既然安装钩子函数安装成功,你可以在回调函数当中尽可能的多设置调试信息来看看哪里执行,哪里不执行
[/Quote]
好,我试试。
jikaizhang 2010-09-21
  • 打赏
  • 举报
回复
先看看SetWindowHookEx返回值是成功的吗?如果不成功,获取GetLastError(),有可能是5。
PunWinger 2010-09-21
  • 打赏
  • 举报
回复
试一下不要传递线程ID,传递句柄
信阳毛尖 2010-09-21
  • 打赏
  • 举报
回复
大家都知道,单步调试的时候我们是看不见回调函数的单步执行情况,既然安装钩子函数安装成功,你可以在回调函数当中尽可能的多设置调试信息来看看哪里执行,哪里不执行
bai_hua_lin 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jikaizhang 的回复:]
先看看SetWindowHookEx返回值是成功的吗?如果不成功,获取GetLastError(),有可能是5。
[/Quote]

返回值肯定是成功的。

15,471

社区成员

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

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