c++ - SetWindowsHookEx() ,钩子(Hook)不维护? (可能)

标签 c++ winapi hook

我正在尝试学习 Windows API。目前我在尝试让钩子(Hook)工作时遇到了很多麻烦。我有一些我已经弄乱了几天的示例代码——它有一个用 C# 或其他东西编写的 GUI,以及一个用 C++ 编写的 dll。 dll 具有外部化的功能:

bool __declspec(dllexport) InstallHook(){
    g_hHook      = SetWindowsHookEx(WH_CBT, (HOOKPROC) CBTProc, g_hInstance, 0);
    return g_hHook != NULL;
}

CBT Proc是这个,也是在dll中:

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam){
    if (nCode < 0)
        return CallNextHookEx(g_hHook, nCode, wParam, lParam);
    /* Something should go here to do stuff when certain nCodes are recieved.*/
    return 0;
}

当我运行这些代码时,一切正常。他有一个 InstallHook() 调用埋在他的 C# GUI 中,如果我在 CBTProc 函数中放置一个断点,我可以看到它被系统一遍又一遍地调用。由于我不太了解 C#,因此我尝试使用以下(微型)控制台应用程序将其删除:

int _tmain(int argc, _TCHAR* argv[]){
    bool bbbb = InstallHook();
    Sleep(2000);
    return 0;
}

我的问题是,如果我这样做, Hook 将不再起作用。通过调试器,我可以看到 InstallHook() 被正确调用,并且该函数中的 g_hHook 不为空,但 CBTProc 函数根本没有被调用——就好像系统一离开 InstallHook 就忘记了钩子(Hook)() 函数。

谁能阐明这个问题?几天来我一直在努力尝试让它发挥作用,但我没有运气。

最佳答案

我怀疑这是因为您有控制台应用程序,而系统不发送有关控制台窗口的激活、创建、移动等的通知。尝试使其成为普通的 Windows 应用程序。

关于c++ - SetWindowsHookEx() ,钩子(Hook)不维护? (可能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2366468/

相关文章:

c# - 使用c#/c++的windows远程登录api

c++ - 比较 unordered_map 与 unordered_set

c++ - 什么在调用 void();正在做?

vba - 如何使用 VBA 在 Mac OS X 上读取/写入内存?

linux - Git - 自动 pull 入服务器

ruby - :save hook relate to the :update hook in DataMapper? 怎么办

c++ - 适用于C++的wso2 Web服务框架中的JSON支持

c - 滚动条初始范围

c++ - typedef 一个可在 Windows 和 Linux 上使用的 C++ 函数

perl - 如何在词法上关闭 Perl 的 AUTOLOAD 子例程?