SetWindowsHookEx成功但从不调用回调函数

时间:2015-10-10 06:38:34

标签: c++ winapi hook

dll代码:

LRESULT CALLBACK CBTNewProc(int nCode, WPARAM wParam, LPARAM lParam)
{

    std::ofstream file;
    file.open("E:\\enter.txt", std::ios::out);
    file << nCode;
    file.close();

    return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}


extern "C" __declspec(dllexport) void installHook()
{
    if (g_hHook != NULL){
        UnhookWindowsHookEx(g_hHook);
        g_hHook = NULL;
    }
    HINSTANCE hInstance = GetModuleHandle(NULL);
    g_hHook = SetWindowsHookEx(WH_CBT, CBTNewProc, NULL, GetCurrentThreadId());
    if (g_hHook == NULL)
    {
        MessageBox(NULL, L"fail!", L"caption", MB_OK);
    }
    else
    {
        MessageBox(NULL, L"install success!", L"caption", MB_OK);
    }
}

我写了另一个程序来加载这个dll并调用installHook。显示消息框“安装成功”,但从未调用回调函数,在驱动器E下找不到enter.txt。

我正在使用Win7 + VS2013。

1 个答案:

答案 0 :(得分:0)

对于要在其他进程中设置的挂钩,必须将包含钩子proc的DLL的hInstance传递给SetWindowsHookEx

您还应该传递零作为线程ID。