C++ 键盘挂钩仅在呼叫过程中工作

C++ 键盘挂钩仅在呼叫过程中工作,c++,winapi,input,keyboard,hook,C++,Winapi,Input,Keyboard,Hook,我正在做一个VoIP程序,我用键盘钩子检查按键通话按钮是否按下。 它通过安装钩子的进程在本地工作,但我的目标是让它也检查所有全局输入。 以下是我使用的: SetWindowsHookEx(WH_KEYBOARD,hook_hookproc,hookInst,0); 根据MSDN和其他来源,我需要将我的挂钩dll注入所有其他进程。。。这将是痛苦的,我怀疑ventrilo/teamspeak等会这样做。是否可以将其注入系统进程,然后所有子进程(一切)都以这种方式继承钩子调用?或者你必须把它注入每一

我正在做一个VoIP程序,我用键盘钩子检查按键通话按钮是否按下。 它通过安装钩子的进程在本地工作,但我的目标是让它也检查所有全局输入。 以下是我使用的:

SetWindowsHookEx(WH_KEYBOARD,hook_hookproc,hookInst,0);
根据MSDN和其他来源,我需要将我的挂钩dll注入所有其他进程。。。这将是痛苦的,我怀疑ventrilo/teamspeak等会这样做。是否可以将其注入系统进程,然后所有子进程(一切)都以这种方式继承钩子调用?或者你必须把它注入每一个进程


干杯

像WHU键盘这样的全局钩子确实需要一个可以注入的DLL。您通常需要添加一些IPC代码来告诉其他人。请注意,您正在跨越流程边界进行此操作,因此您需要像管道一样的东西来说话

您是否考虑过使用低级键盘挂钩(WH_keyboard_LL)。它不需要可注入的DLL,Windows会将上下文切换到进程来调用钩子。它几乎总是足以检测特定的击键,也许可以与GetAsyncKeyState()结合起来检查修改器键


使用RegisterHotKey()注册的热键可能也可以工作。它应该是您的首选,因为它对机器的影响要小得多。

像WHU键盘这样的全局钩子确实需要一个可以注入的DLL。您通常需要添加一些IPC代码来告诉其他人。请注意,您正在跨越流程边界进行此操作,因此您需要像管道一样的东西来说话

您是否考虑过使用低级键盘挂钩(WH_keyboard_LL)。它不需要可注入的DLL,Windows会将上下文切换到进程来调用钩子。它几乎总是足以检测特定的击键,也许可以与GetAsyncKeyState()结合起来检查修改器键


使用RegisterHotKey()注册的热键可能也可以工作。它应该是您的首选,因为它对机器的影响要小得多。

注册表快捷键看起来不错,正是我所需要的,它阻止了其他基于键盘的窗口/程序运行。有办法解决吗?我猜不出“it”可能是什么意思。对不起,它应该说“但是it”:p无论如何,我在互联网上找到了answear,假设你必须在while(getmsg)循环中处理WM_热键消息,如果翻译并发送到proc函数,会导致不良行为。谢谢你的提示,现在我不必使用hooks.RegisterHotKey了,它看起来不错,正是我所需要的,它阻止了其他基于键盘的窗口/程序运行。有办法解决吗?我猜不出“it”可能是什么意思。对不起,它应该说“但是it”:p无论如何,我在互联网上找到了answear,假设你必须在while(getmsg)循环中处理WM_热键消息,如果翻译并发送到proc函数,会导致不良行为。谢谢你的提示,现在我不用用钩子了。