键盘钩子不等待 SendMessage?

Keyboard hook does not wait for SendMessage?

提问人:Zahbod 提问时间:11/8/2023 最后编辑:Zahbod 更新时间:11/8/2023 访问量:99

问:

我需要阻止来自某个输入设备的键,我使用键盘钩来做到这一点,这里是钩子功能

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (SendMessage(targetWindow, WM_HOOK, wParam, lParam)) {
        return 1;
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

由于键盘钩子无法接收设备句柄,因此我使用 Windows 消息传递系统向一个名为的自定义案例发送消息,在这种情况下,要查看哪个设备句柄正在创建输入,然后返回一个整数,因为它是设备句柄,该键应被阻止或不被阻止WM_HOOKPeekMessageWM_INPUTRAWINPUT

整个钩子工作正常,除非我使用 ,无论如何都会产生 keydown 事件,该函数等待返回并且不执行任何操作,直到从消息返回(使用 ) 但是当我在我的钩子中使用时,即使钩子返回 1,也会产生 keydown 事件, 所以我不知道是什么导致了这种行为。 整个程序处于同一进程中,并且 2 个函数的通信成功,但是在涉及消息传递时,Windows 没有等待钩子,我不知道是什么原因造成的?SendMessagestd::coutSendMessage

C++ Windows WinAPI 键盘钩

评论

1赞 xMRi 11/8/2023
targetWindow 是否在同一个进程中?如果没有,则无法在另一个进程中使用指针,该进程将接收消息...。
0赞 Paul Sanders 11/8/2023
std::cout 进行测试日志记录可能会更好,它的侵入性较小。OutputDebugString
0赞 Zahbod 11/8/2023
@xMRi是的,程序中发生的所有事情都在同一个过程中
0赞 Zahbod 11/8/2023
@PaulSanders这真的重要吗?两者都打印到控制台中,一个只是在调试器模式下编译,两者都在执行时打印,另外我这么说只是为了展示我如何知道函数正在等待
0赞 Zahbod 11/8/2023
@xMRi我已经测试了是否收到消息,实际上通信是成功的,只是在涉及消息传递时窗口没有等待键盘钩子,我不知道是什么原因导致的

答: 暂无答案