1

I am trying to retrieve messages for another application with a Windows hook. I have setup a WH_GETMESSAGE hook with SetWindowsHookEx. This is done via a DLL. In my GetMsgProc function (that should be called whenever the target application receives a message) I want to take action based on the type of message. However I am having trouble with this if statement.

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){
    if(((MSG*)lParam)->message == WM_COMMAND){
        MessageBox(NULL,L"The hook procedure was called",L"Test Window",MB_OK);
    }

    return CallNextHookEx(g_MessageHook,code,wParam,lParam);
}

For some reason the MessageBox is never created. I know the application is receiving WM_COMMAND messages from Spy++. If I take out the IF statement the MessageBox is created over and over as it receives a variety of messages.

BenMorel
  • 34,448
  • 50
  • 182
  • 322
JohnG
  • 75
  • 1
  • 4
  • 10

2 Answers2

1

Are you sure that you're hooking the correct window or the correct message, respectively? Under some circumstances WM_SYSCOMMAND or WM_MENUCOMMAND is generated instead of WM_COMMAND.

Your code looks fine, have you also tried dumping the incoming messages into console?

arul
  • 13,998
  • 1
  • 57
  • 77
  • I think you are right, I must be hooking the wrong window. I will check my logic. Thanks for looking at my code. – JohnG May 19 '09 at 01:22
0

The LPARAM here is a pointer to CWPSTRUCT which in turn contains message parameter. The following should work.

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){
    if(((CWPSTRUCT*)lParam)->message == WM_COMMAND){
        MessageBox(NULL,L"The hook procedure was called",L"Test Window",MB_OK);
    }

    return CallNextHookEx(g_MessageHook,code,wParam,lParam);
}
Canopus
  • 7,351
  • 11
  • 46
  • 57
  • Your comment helped too. I actually got the functionality I needed with a WH_CALLWNDPROC hook which uses the CWPSTRUCT as you mentioned. I also was hooking the wrong window. :) Thanks for the help! – JohnG May 25 '09 at 04:23