因此,对于工作,他们让我编写了一个简单的程序来跟踪员工在工作流程中的效率(比如使用键盘快捷键,窗口位置,他们需要查看内容的频率)。目前我们想要跟踪'F5'键(调出下一个工作项),'Alt + Tab'(更改窗口),'Ctrl + V'(粘贴),但可能会扩展,因为他们发现有更多的快捷方式或东西他们想跟踪。
注意我们在Windows 7上,并使用c#编写跟踪程序。
为了做到这一点,我编写了一个低级挂钩库来捕获所选择的击键,将消息发送到挂钩链,然后向使用该键的数据库添加注释。挂钩库在所有Web浏览器和大多数普通程序中都很有效(除了我们实际上并不关心浏览器,所以我们忽略了它们中完成的所有操作)。
问题是他们用来管理他们的工作的应用程序(我们实际关心跟踪的程序)有些如何阻止我们的钩子挂钩而我不知道怎么做。有问题的应用程序是TA2000桌面。
我知道如果应用程序无法在LowLevelHooksTimeout期间调用callnexthook()
系统杀死挂钩,那么钩子的工作方式会起作用。因此,可能TA2000只是花了很长时间或者我将超时时间提高到30秒(是的,我知道这比挂钩应该需要的时间多得多),但这没有效果。
我接下来尝试的是实现基于Raw Input API的跟踪系统。再一次跟踪浏览器,微软办公室,记事本以及我打开的所有其他程序,除了它仍然无法跟踪TA2000中的按键。这真让我感到惊讶,因为根据MSDN
- 应用程序不必检测或打开输入设备。
- 应用程序直接从设备获取数据,并根据需要处理数据
- 应用程序可以区分输入源,即使它来自同一类型的设备。例如,两个鼠标设备。
因此,如果我直接从设备获取数据,TA2000如何阻止我按键?
我能想到的最后一件事是在TA2000上使用dll注入来注入一个钩子。然而,这种方法似乎有风险,因为这是我和任何其他开发人员都没有任何经验,我们想要跟踪的应用程序是操作关键所以搞乱它不会发生并将代码注入其内存空间似乎是一个很好的方法搞砸了。
如果有人可以解释TA2000如何阻止我跟踪击键以及如何击败它或指向一个好的方向我会非常感激。
P.S。这对于SO格式来说是一个合适的问题,但它也具有足够的特殊性,可以成为一个可行的问题。很抱歉,如果这不是一个好问题,但我最终会以此为由。
答案 0 :(得分:2)
此财务软件包受到保护以防止窥探。以管理员身份运行密钥日志记录软件似乎可以解决此特定问题。最初使用Sysinternals的Process Explorer确定了安全性,这是出现意外问题的一个很好的起点。