我正在尝试使用Windows钩子检索另一个应用程序的消息。我已经用SetWindowsHookEx设置了一个WH_GETMESSAGE钩子。这是通过DLL完成的。在我的GetMsgProc函数(应该在目标应用程序接收到消息时调用该函数)中,我希望根据消息的类型执行操作。然而,我在这个if语句中遇到了问题。
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);
}由于某些原因,MessageBox从未被创建过。我知道应用程序正在接收来自Spy++的WM_COMMAND消息。如果我去掉If语句,就会反复创建MessageBox,因为它接收各种消息。
发布于 2009-05-18 02:09:16
您确定您分别挂接了正确的窗口或正确的消息吗?在某些情况下,会生成WM_SYSCOMMAND或WM_MENUCOMMAND而不是WM_COMMAND。
您的代码看起来很好,您是否也尝试过将传入消息转储到控制台?
发布于 2009-05-18 08:22:14
这里的LPARAM是指向CWPSTRUCT的指针,而CWPSTRUCT又包含消息参数。下面的方法应该是可行的。
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);
}https://stackoverflow.com/questions/875950
复制相似问题