键盘挂钩不限制按键正确按

时间:2015-07-30 15:05:30

标签: c++ hook dll-injection

我有一个dll被注入特定的过程,目的是限制某些按键被发送到上述过程..

这似乎有效,但存在一个主要缺陷..当按下我想要限制的按键时,它们仍然被传递给过程。

每当钩子返回值1时,我都会添加一行来引发一个消息框(限制键不再进一步拥有链),并且引发了消息框,甚至更奇怪,键被停止进展,但每当我删除消息框代码时,限制完全被忽略!!

有人能突出我做错了吗?或者在不太可能的情况下,这不是我自己的错误行为,而是一些我不知道的怪癖,请告诉我。

非常感谢。

这是我的钩子proc代码,我希望它是问题所在。

extern "C" __declspec(dllexport) int KeyboardHook(INT nCode, WPARAM wParam, LPARAM lParam) {
    //-- Return unless valid nCode
    if (nCode < 0) return CallNextHookEx(keyhook_handle, nCode, wParam, lParam);
    //-- Setup some bools
    BOOL alt_down = ((lParam & (1U << 29)) == 1);
    BOOL key_last = ((lParam & (1U << 30)) == 0);
    BOOL key_down = ((lParam & (1U << 31)) == 0);
    BOOL let_pass = TRUE;
    //-- Checks for keypresses 
    if (key_last && key_down) {
        if (wParam == VK_F12) let_pass = FALSE;
        if ((wParam == VK_RETURN) && alt_down) let_pass = FALSE;
    }
    //-- If not let_pass then return 1 to restrict key
    if (!let_pass) {
        //MessageBox(NULL, L"Key Stopped", L"Info:", MB_OK | MB_ICONERROR);
        return 1;
    }
    //-- Call the next hook in the chain
    return CallNextHookEx(keyhook_handle, nCode, wParam, lParam);
}

0 个答案:

没有答案