我读了一些文章、msdn 和博客,但有一些问题
为什么我们必须将全局 Hook 过程放置在与安装 Hook 过程的应用程序分开的 DLL 中
与全局钩子(Hook)和键盘记录器有什么不同(我在没有单独的dll的情况下编写键盘记录器)? 键盘记录器如何在没有单独的 dll 的情况下拦截所有应用程序键盘消息?
终于
全局钩子(Hook)的dll中有什么代码?
请给出一些详细的编写全局钩子(Hook)的步骤
最佳答案
基本上有两种方法可以全局捕获击键(键盘记录器可以使用其中任何一种):
使用全局键盘 Hook 。 如上所述,此方法需要位于单独的 DLL 文件中的 HookProcedure。这是捕获击键的正确方法,因为仅在每次按键时调用您的函数。
这篇文章可能有用:http://www.codeproject.com/KB/DLL/keyboardhook.aspx
调用WinAPI函数GetKeyboardState。这种方法不需要单独的DLL文件,但有一个很大的缺点。该函数仅返回键盘的实际状态。有必要在无限循环中调用它(可能在单独的线程中,但不一定),并有一点 sleep 时间来捕获所有击键。
这会导致 CPU 使用率增加。我不建议您使用此技术。此外,具有良好启发式的防病毒软件会将此类代码视为键盘记录器。
没有 DLL 的键盘记录器可能使用第二种方法或动态生成 DLL。
关于dll - 为什么我们必须将全局钩子(Hook)过程放在单独的 DLL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034246/