因此,为了工作,他们让我编写了一个简单的程序来跟踪员工工作流程中的效率(诸如使用键盘快捷键,窗口位置,他们需要多长时间查看一次东西)。当前,我们要跟踪“F5”键(调出下一个工作项),“Alt + Tab”(更改窗口),“Ctrl + V”(粘贴),但是可能会扩展,因为他们发现还有更多快捷键或其他功能他们想跟踪。
注意我们在Windows 7上,并使用C#编写跟踪程序。
为此,我编写了一个低级挂钩库来捕获选定的击键,向挂钩链发送消息,然后向使用该键的数据库添加注释。钩子(Hook)库在所有Web浏览器和大多数普通程序中都很好用(除非我们实际上并不关心浏览器,所以我们忽略了浏览器中完成的所有操作)。
问题在于,他们用来管理工作的应用程序(我们实际上关心的程序)在某种程度上阻止了钩子(Hook)的产生,而我却不知道该如何做。有问题的应用程序是TA2000 Desktop。
我知道,如果应用程序无法在系统杀死钩子(Hook)的LowLevelHooksTimeout时间内调用callnexthook()
,则钩子(Hook)会以这种方式工作。因此,弄清楚TA2000可能花了很长时间,或者我将超时时间提高到30秒(是的,我知道这比钩子(Hook)甚至需要的时间要多得多),但这没有效果。
我尝试的下一件事是实现基于Raw Input API的跟踪系统。并再次跟踪在浏览器,Microsoft Office,记事本和我打开的所有其他程序上的跟踪,只不过它仍然无法跟踪TA2000中的按键。这真的让我感到惊讶,因为根据MSDN
因此,如果我直接从设备获取数据,TA2000如何阻止我也获取按键?
我想到的最后一件事是在TA2000上使用dll注入(inject)来注入(inject)钩子(Hook)。但是,此方法似乎有风险,因为我和这里的任何其他开发人员都没有这方面的经验,而且我们要跟踪的应用程序对操作至关重要,因此不会发生困惑,将代码注入(inject)其内存空间似乎是一种不错的方法搞砸了。
如果有人能够解释TA2000如何阻止我跟踪击键,以及如何击打它或将我指向正确的方向,我将非常感激。
ps。作为SO格式的适当问题,这让人感到怀疑,但是它也足够具体,可以成为可行的问题。非常抱歉,如果这不是一个好问题,但我不知所措。
最佳答案
此财务软件包经过保护,可防止监听。以管理员身份运行 key 记录软件似乎可以解决此特定问题。最初使用Sysinternals的Process Explorer识别了安全性,这是处理此类意外问题的良好起点。