我写了一个带有简单文本框的应用程序,试图根据他们的打字习惯识别用户(按键之间的间隔,持续时间键,按键之间的时间,即a-> s比a->更快;对于某些用户,对于其他用户,根据打字样式更短。它远非完美,但它确实正确地识别出中等大小的风格差异。
我希望将其用作安全监视器的一种形式 - 如果用户的输入样式不符合识别的模式,请向中央服务器报告。
当然,测试它的下一步是开始捕捉“常规”打字习惯 - 即浏览时,在应用程序之间切换等。
我无法弄清楚如何捕获所有应用程序的键盘输入(不包括登录/欢迎屏幕,备用桌面等等) - 我没有理由解析它并且可能没有足够的输入来分析)
免责声明: 是的,我知道这非常接近于编写一个禁止使用的键盘记录器,但如果我想这样做,我会写一个C ++中的键盘驱动程序 - 我相信它会比笨重的.Net MSIL程序集更加简化并且更容易混淆。我毫不怀疑我会抵挡“那是一个键盘记录器”的评论,但我已经碰壁了,需要问某个地方......
我不需要隐藏应用程序 - 但理想情况下能够在没有明确用户确认的情况下捕获输入(除了管理员安装之外) - 如果需要用户确认,我可以忍受(只是)如果它可以是一次性的,我有办法监控和报告否认。
这在.Net中是否可行?我能够找到的唯一例子是通过向每个看起来很笨重的键添加一个事件挂钩来操作,我认为这很容易出错。 - 或 - 他们轮询键盘状态以确定按下的键。这对我来说没有好处,因为a)我需要精确的按键时间,所以关键的上/下事件是必须的,而b)它是讨厌的。
如果框架旨在明确禁止这种情况,我不会感到惊讶,在这种情况下,我将不得不回退到一些非托管代码来提供事件。我显然更喜欢一直使用托管代码。
任何帮助表示感谢。
编辑:感谢Hans Passant的回答,这是迄今为止我发现的最佳资源:http://www.codeguru.com/columns/vb/article.php/c4831
答案 0 :(得分:5)
Google SetWindowsHookEx
+ WH_KEYBOARD_LL
,谷歌搜索好的关键字。这设置了一个低级键盘钩子。它不是一个全局钩子,所以可以在VB.NET程序中工作。
答案 1 :(得分:0)
.net不提供任何类型的服务,因此您必须降低并使用p / invoke。选项包括: