c++ - 在 Hook 过滤器函数中过滤 Windows 消息

标签 c++ windows winapi hook

我正在尝试使用 Windows Hook 为另一个应用程序检索消息。我已经使用 SetWindowsHookEx 设置了一个 WH_GETMESSAGE Hook 。这是通过 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 会在收到各种消息时一遍又一遍地创建。

最佳答案

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

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

关于c++ - 在 Hook 过滤器函数中过滤 Windows 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/875950/

相关文章:

Windows + Cygwin + 单行 If Else + Puppet

windows - 如何防止Windows程序以:Command from opening a popup?进程启动

C++ 输出流浮点调用链

c++ - 如何以编程方式创建列表控件?

c++ - 如何在 vector 中搜索结构项?

c++ - IsBadStringPtr 替代项

c# - 从安全的角度来看,在 Windows 中使用管道是否被认为是危险的?

c++ - Boost C++ - 生成一个介于 0 和 1 之间的随机实数

VLC 的 Python 绑定(bind)

c# - HRESULT 枚举 C#