2009-03-02 73 views
1

我有一个要求,能够跟踪用户与他们机器上运行的不同应用程序交互的程度。对我来说,合乎逻辑的做法是记录带有时间戳的窗口焦点事件,这些事件会告诉你哪些应用程序在一天中的焦点。在Java中跟踪操作系统级别的窗口事件

在这个应用程序中我们还有一些其他的事情可以在Java中直接进行。然而,我没有在Java中进行任何GUI编程,因此我不确定是否可以通过awt API获取有关OS级窗口的信息。这甚至有可能吗?会有另一种方式通过JNI来做到这一点,或者是否需要本地应用程序来做到这一点? PS:我知道这个要求听起来有点邪恶,但我只是在这里来确定这在技术上是否可行。请不要拍摄使者,这不是我的想法。 :)

回答

5

焦点事件可能有效;你可能也想考虑Windows keyboard and mouse hooks。使用这些方法中的任何一种,您都需要创建一个DLL(本地代码)并使用JNI来访问它。

0

我不认为这是可能的使用AWT。 Java无法访问其他应用程序的进程。

5

无法诉诸本地代码,我不认为这是可能的。

0

我认为你应该考虑使用另一种语言。
还有其他语言如C++例如被predistinated对于这类问题:)

0

你基本上问你的应用程序被包含在操作系统通知到其他应用程序。您可能需要有一个应用程序将其他应用程序作为子进程启动,或者使用类似于rootkit API的应用程序来建立超出正常应用程序授予的权限。如果目标是要查看用户与应用程序进行交互的时间,则可以通过查看计划到您的应用程序的CPU时间或一些如何查看I/O事件与将这些映射到有关用户活跃程度的统计信息中。

否则,我认为你可能能够与一些间谍软件开发者联系以获得你所需要的东西。

0

如果你想从Java做到这一点,不想写自己的本地代码,你可以试试SWT。我怀疑它有完成你想要的平台不可知的方式,但你可以在Windows特定的类中找到,特别是org.eclipse.swt.internal.win32.OS。

1

您可能会寻找一个窗口测试库 - 其中一些用于创建和拦截win32本地事件。

0

我们还可以监视windows任务列表以跟踪用户使用的应用程序,它在Java中简单易懂,可以读取控制台,也可以从中获取过程数据,但是您需要使用很少的繁重字符串处理,bcz all你得到的数据将是字符串格式,你必须从它得到你需要的数据,使其成为有用的,如果你需要进一步的帮助,我可以给它的代码来监视和保存这些数据用于跟踪,但是这个解决方案不会覆盖窗口事件,它会给任务信息,