5

我编写了一个带有简单文本框的应用程序,它试图从用户的打字习惯中识别用户(按键之间的间隔、按住持续时间键、击键之间的时间,即对于某些用户来说 a->s 比 a->v 快,对于其他人来说更短,具体取决于打字风格)。它远非完美,但它确实能正确识别出风格上的适度差异。

我希望将其用作安全监视器的一种形式 - 如果用户的打字风格不符合公认的模式,请向中央服务器报告。

当然,测试的下一步是开始捕捉“常规”打字习惯——即在浏览、在应用程序之间切换等时。

我不知道该怎么做是捕获所有应用程序的键盘输入(不包括登录/欢迎屏幕、备用桌面等 - 我没有理由解析它,而且可能没有足够的输入来分析)

免责声明:是的,我知道这非常接近于编写一个被禁止的键盘记录器,但如果我想这样做,我会用 C++ 编写一个键盘驱动程序——我相信它会比它更精简、更容易混淆一个庞大的 .Net MSIL 程序集。我毫不怀疑我会抵制“那是一个键盘记录器”的评论,但我已经碰壁了,需要在某个地方问......

我不需要隐藏应用程序 - 但理想情况下希望能够在没有明确用户确认的情况下捕获输入(除了由管理员安装) - 如果需要用户确认,我可以忍受(只是)如果它可以一次性,我有一些方法来监控和报告拒绝。

这在.Net中甚至可能吗?我能够找到的唯一示例是通过为每个键添加事件挂钩来操作,这看起来很笨重,我想这很容易出错。- 或 - 他们轮询键盘状态以确定按下的键。这对我没有好处,因为 a)我需要精确的按键时间,所以按键向上/向下事件是必须的,并且 b)它很讨厌。

如果该框架旨在明确禁止这种情况,我不会感到惊讶,在这种情况下,我将不得不回退到一些非托管代码来提供事件。我显然更喜欢一直使用托管代码。

任何帮助表示赞赏。

编辑:感谢 Hans Passant 的回答,这是迄今为止我找到的最好的资源:http: //www.codeguru.com/columns/vb/article.php/c4831

4

2 回答 2

5

谷歌SetWindowsHookEx+ WH_KEYBOARD_LL,谷歌很好的关键词。这设置了一个低级键盘钩子。它不是全局挂钩,因此可以在 VB.NET 程序中工作。

于 2010-08-09T16:25:46.880 回答
0

.net 不提供任何此类服务,因此您将不得不降低并使用 p/invoke。选项是:

  • 赢钩
  • 使用 GetAsyncKeyState 进行轮询
于 2010-08-09T16:14:35.730 回答