【问题标题】:How to Create a global WH_GETMESSAGE HOOK without DLL如何在没有 DLL 的情况下创建全局 WH_GETMESSAGE HOOK
【发布时间】:2011-06-20 02:27:12
【问题描述】:

我正在尝试创建一个没有 DLL 的全局 WH_GETMESSAGE HOOK,但我无法成功。 我的操作系统是 Win7 32Bit,这是我的一些代码:

SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle(NULL),0);

如果您有时间,请帮助我。 :)

【问题讨论】:

    标签: dll windows-7 mfc hook global


    【解决方案1】:

    As documented,

    hMod [输入]

    类型:HINSTANCE

    包含 lpfn 参数指向的钩子过程的 DLL 句柄。如果 dwThreadId 参数指定由当前进程创建的线程,并且钩子过程在与当前进程关联的代码内,则 hMod 参数必须设置为 NULL。

    hMod 必须是 DLL 的句柄。不是EXE。这是因为 DLL 将被加载到所有正在运行的要挂接的进程中,并且它的代码直接从这些进程中运行。

    【讨论】:

    • 感谢您的回答,但对我来说似乎没用。
    • 我想还有别的办法。谢谢~。
    • @italkboy,你应该写下你的替代方法作为答案,这样其他有同样问题的人也可能会得到帮助......
    • @italkboy,那么没问题 - 如果您确实找到了解决方案,给未来的旅行者留下提示会很有帮助:) 通常的方法是专门为钩子创建一个 DLL,顺便说一句。跨度>
    • 感谢您的关注,找到解决办法后告诉您。
    【解决方案2】:

    在SetWindowsHookEx的调用线程中需要一个消息循环

    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    

    【讨论】:

      【解决方案3】:

      很明显,最后一个参数不应该是'0',它应该是你要调用函数的线程的线程id。你不能为最后一个参数和next to last参数都传入null .使用 GetThreadId() 获取当前线程的 id,这很可能是您想要做的。

      之前发帖人的回答对你很有用,如果你读过它,你自己就会看到上面的。

      【讨论】:

      • 非常感谢,我找到了折衷方案,我会再试一次。:)
      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多