使用KeyboardProc / SetWindowsHookEx从注入的DLL中钩住键盘

注意:我在简单的C中工作。不是C ++,而不是C#。 我正在研究一个mod。我已经编写了一个有效的DLL注入器,以及要注入的DLL。除了用户输入之外,一切进展顺利。 我希望能够使用热键,所以我尝试使用SetWindowsHookEx设置keyboardhook。 以下是我的回调函数:
LRESULT CALLBACK keyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    printf("key touchedn");
    if (wParam == VK_F5)
    {
        keyEvent = VK_F5;
    }
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}
这就是我设置它的方式:
HHOOK kbHookHandle = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)keyboardHook, NULL, GetCurrentThreadId());

if (kbHookHandle != NULL)
{
    printf("keyboard hook successful!n");
}
else
{
    printf("keyboard hook failed!n");
}
据我所知,钩子设置得很好(我曾经有一个无效参数的问题,但通过使用GetCurrentThreadID修复了)。它返回一个非NULL的句柄。 但每当我按下一个键,就没有输出。 进一步澄清: 上面的代码来自注入的DLL。所以它实际上“属于”游戏过程。我已经使用AllocConsole分配了一个控制台,用于打印调试消息。 我究竟做错了什么? 编辑: 澄清(甚至更多):列出的代码来自注入的DLL。这不是我用来注入DLL的方法 - 我写了一个单独的(工作!)程序来做到这一点。 令我惊讶的是,我使用printf(),因为我不会出现,因为我从主机进程内部调用它。是的,我确实从主机进程内部调用它,但这不是问题,因为我已经分配了一个工作控制台。我使用的方法与此处提到的方法非常相似 EDIT2: 我不是在问为什么printf()没有工作(因为它是),我问为什么这个键盘钩不工作。     
已邀请:
以下是我在NoQuake ID Tech游戏最小化器中检测按键和按键的方法。希望能帮助到你。     

要回复问题请先登录注册