我目前正在研究一种在计算机上记录用户操作的可靠方法。我创建了一个简单的应用程序,它可以在全局范围内挂起WH_CBT
个事件,它现在似乎运行良好。我已经阅读过应用程序将拥有自己的WH_CBT
事件处理程序并且在处理它之后不会调用CallNextHookEx()
函数的情况。我假设这种情况会阻止我自己使用系统范围的钩子来处理该应用程序中的任何事件。
还有其他(可能更好)的方法来劫持应用程序中的击键事件吗?也许与手动将DLL注入到这样的进程有关:
CreateRemoteThreadEx()
注入DLL。在这种情况下挂钩GetMessage()
或TranslateMessage()
功能是否足够?我是对的,使用消息循环的任何进程都必须使用这些函数来处理创建的窗口的事件吗?
答案 0 :(得分:1)
使用WH_KEYBOARD_LL
的低级别键盘连接将是最好的(因为它会捕获所有内容),但是存在其他更具体的解决方案,例如sub-classing the parent level window您要定位的任何应用程序以捕获关键字窗口消息,避免了必须进行任何代码篡改或系统范围的过滤。
回到更全局的范围,您也可以使用基于WH_KEYBOARD
,WH_CALLWNDPROC
或WH_GETMESSAGE
的挂钩来执行此操作,这可以在全局或线程级别完成。这一切都取决于你想要捕获的内容和数量。