Winapi 带有WM_键盘的SetWindowsHookEx拒绝工作,但未失败

Winapi 带有WM_键盘的SetWindowsHookEx拒绝工作,但未失败,winapi,Winapi,我需要能够以编程方式禁用我的DLL注入到的应用程序中的键盘输入。最初我尝试挂接WindowProc,但它不适用于所有应用程序,现在我尝试使用SetWindowsHookEx安装键盘挂接 这是用于挂接DLL的代码,所有函数在类中都是静态的: (DLLHandle是从DllMain保存的句柄) SetKeyboardHookEx成功,但从不调用回调…WH\u键盘仅当挂接线程处理WM\u按键向下/向上窗口消息时才起作用。您正在挂接的应用程序是否有活动的UI消息循环?它是UI应用程序还是控制台应用程序?

我需要能够以编程方式禁用我的DLL注入到的应用程序中的键盘输入。最初我尝试挂接WindowProc,但它不适用于所有应用程序,现在我尝试使用SetWindowsHookEx安装键盘挂接

这是用于挂接DLL的代码,所有函数在类中都是静态的: (DLLHandle是从DllMain保存的句柄)


SetKeyboardHookEx成功,但从不调用回调…

WH\u键盘
仅当挂接线程处理
WM\u按键向下
/
向上
窗口消息时才起作用。您正在挂接的应用程序是否有活动的UI消息循环?它是UI应用程序还是控制台应用程序?如何将DLL注入其中?该应用程序有一个UI,通过LoadLibrary和远程线程将其注入,如果该应用程序不处理WM_KEYDOWN/UP消息,您是否有一个以编程方式阻止输入的万无一失的解决方案?基本上,我的dll是一个游戏覆盖,当我启用它时,我想禁用任何进入游戏的输入“基本上,我的dll是一个游戏覆盖”-这将是有用的信息,以提供前期。游戏通常不使用窗口消息来处理用户输入,它们倾向于更直接地访问输入硬件。
void SomeClass::HookKeyboard()
{
    KeyboardHook = SetWindowsHookEx(WH_KEYBOARD, HookedKeyboard, DLLHandle, 0);
    if(KeyboardHook == NULL) {
        Logger::Warn("Failed to install low level kbd hook %d", GetLastError());
    }
}

LRESULT SomeClass::HookedKeyboard(int nCode, WPARAM wParam, LPARAM lParam)
{
    Logger::Info("Keyboard");
    return CallNextHookEx(0, nCode, wParam, lParam);
}