为什么我们必须将一个全局钩子过程放在一个单独的DLL中

时间:2010-10-27 14:17:56

标签: dll hook

我读了一些文章和msdn和博客,但有一些问题

为什么我们必须在与安装钩子过程的应用程序分开的DLL中放置一个全局钩子过程

和全局钩子和键盘有什么不同(我没有单独的dll写密钥loge)? key loger如何在没有单独的dll的情况下拦截所有应用程序键盘消息?

最终

全局钩子的dll代码是什么?

请为编写带有详细信息的全局钩子提供一些步骤

1 个答案:

答案 0 :(得分:3)

基本上有两种方法可以全局捕获击键(键盘记录器可以使用其中任何一种):

  1. 使用全局键盘钩。 如上所述,此方法需要位于单独DLL文件中的HookProcedure。这是如何捕获击键的正确方法,因为只在每个按键上调用您的函数。

    这篇文章很有用:http://www.codeproject.com/KB/DLL/keyboardhook.aspx

  2. 调用WinAPI函数GetKeyboardState。此方法不需要单独的DLL文件,但有一个很大的缺点。该函数仅返回键盘的实际状态。有必要在一个无限循环(可能在单独的线程中,但不一定)中调用它,并有一点睡眠时间来限制所有键击。

    这会导致CPU使用率增加。我不建议你使用这种技术。此外,具有良好启发式的防病毒软件会将此类代码视为键盘记录程序。

  3. 没有DLL的键盘记录程序可能使用第二种方法或动态生成DLL。