首页
社区
课程
招聘
[求助]Hook消息时遇到困难,求教!
发表于: 2008-9-11 20:31 5364

[求助]Hook消息时遇到困难,求教!

2008-9-11 20:31
5364
刚学编程,所以很多东西都不懂,前两天已在网上购买了<加密与解密>第三版, 现在都担心拿到书后到底能不能看得懂; 唉.

  转回正题, 想实现的目标: A程序中有几个按钮, 只要某个特定的按钮(如,按钮 1)被点击, B程序马上就可以收到消息; (注: A程序的源码肯定是没有的, B程序自己来写)

  于是用Hook消息来实现; (以下为简要代码)

//先获得A进程中创建了这个窗口的线程ID
HWND Ahwnd = FindWindow(NULL,"ATest");
DWORD AID = GetWindowThreadProcessId(Ahwnd,NULL);

//DLL中
HHOOK hookA = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hookdll,AID);

LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam ,LPARAM lParam)
{
        MSG msg = *(MSG*)lParam;
        if(nCode >= 0)
        {
                switch(msg.message)
                {
                case BN_CLICKED:
                        MessageBox(NULL,"i am a hook","Hook",MB_OK);
                        break;
                default:
                        break;
                }
        }
        return CallNextHookEx(hookA,nCode,wParam,lParam);
}

________________________________________________________

运行结果: 就是无法判断出按钮被点击了;

问题可能就出在:

switch(msg.message)
{
     case BN_CLICKED:
               ..........
               ..........
}

我对windows消息机制只是了解一些原理, 具体的不了解,比如都有一些什么消息, 有都哪些种类, 是不是也分层次... 等等;

希望大家给于指导一下,谢谢!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
确实是消息判断的问题,试试WM_LBUTTONDOWN或其它标准鼠标消息
2008-9-11 22:18
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
刚刚解决了;

应该Hook     WH_CALLWNDPROC   而不是  WH_GETMESSAGE ;

判断消息的时候应该:  case WM_COMMAND:  , 然后再取 wParam 的高字节:

if( HIWORD(wParam)  == BN_CLICKED)
......

然后再判断按钮的ID:

if( LOWORD(msg.wParam) == 按钮ID)
....

其中msg是: CWPSTRUCT msg = *(CWPSTRUCT*)lParam;

解决了; 对这方面不是很懂是很郁闷
2008-9-11 22:25
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
BN_CLICKED是通知码 不是消息
如果是拦截应该用WM_COMMAND

也可以采用窗口子类化的方法实现你的需求
2008-9-12 06:55
0
游客
登录 | 注册 方可回帖
返回
//