首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在挂钩筛选器函数中筛选Windows消息

在挂钩筛选器函数中筛选Windows消息
EN

Stack Overflow用户
提问于 2009-05-18 01:46:28
回答 2查看 2.6K关注 0票数 1

我正在尝试使用Windows钩子检索另一个应用程序的消息。我已经用SetWindowsHookEx设置了一个WH_GETMESSAGE钩子。这是通过DLL完成的。在我的GetMsgProc函数(应该在目标应用程序接收到消息时调用该函数)中,我希望根据消息的类型执行操作。然而,我在这个if语句中遇到了问题。

代码语言:javascript
运行
复制
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,因为它接收各种消息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-18 02:09:16

您确定您分别挂接了正确的窗口或正确的消息吗?在某些情况下,会生成WM_SYSCOMMANDWM_MENUCOMMAND而不是WM_COMMAND

您的代码看起来很好,您是否也尝试过将传入消息转储到控制台?

票数 1
EN

Stack Overflow用户

发布于 2009-05-18 08:22:14

这里的LPARAM是指向CWPSTRUCT的指针,而CWPSTRUCT又包含消息参数。下面的方法应该是可行的。

代码语言:javascript
运行
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/875950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档