无法使用WH_GETMESSAGE挂钩调用GetMsgPrc

时间:2017-10-11 16:11:10

标签: windows winapi hook

我正在尝试在钩子程序GetMsgProc中打印一条消息,如下面的代码所示:

LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    printf("inside hook proc");

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


void main()
{
    HINSTANCE hins;
    hins = GetModuleHandle(NULL);
    getmsghook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC) GetMsgProc, hins, 0);

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

    UnhookWindowsHookEx(getmsghook);
}

// --------------------------------------------- --------------

我的猜测是,对于每个键盘或鼠标输入,应该打印该消息。但我无法弄清楚为什么没有发生这种情况。能帮忙吗?

1 个答案:

答案 0 :(得分:1)

全局挂钩必须在.DLL中实现,唯一的例外是低kevel键盘和鼠标挂钩。检查SetWindowsHookEx的返回值,它可能是NULL。