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