2

我需要能够跟踪用户与其机器上运行的不同应用程序交互的程度。在我看来合乎逻辑的做法是记录带有时间戳的窗口焦点事件,它会告诉您在一天中哪些应用程序处于焦点位置。

在这个应用程序中,我们还有一些其他的事情要做,这些事情在 Java 中很简单。但是我没有在 Java 中进行任何 GUI 编程,所以我不确定是否可以通过 awt API 获取有关操作系统级窗口的信息。这甚至可能吗?是否有另一种方法可以通过 JNI 执行此操作,或者是否需要本机应用程序来执行此操作?

PS:我知道这个要求听起来有点邪恶,但我只是在这里确定这在技术上是否可行。请不要向信使开枪,这不是我的主意。:)

4

8 回答 8

5

如果不诉诸本机代码,我认为这是不可能的。

于 2009-03-02T23:54:02.350 回答
5

焦点事件可能会起作用;您可能还想考虑 Windows键盘和鼠标挂钩。使用这些方法中的任何一种,您都需要创建一个 DLL(本机代码)并使用 JNI 来访问它。

于 2009-03-02T23:55:35.013 回答
1

您可能会寻找一个窗口测试库——其中一些是用来创建和拦截 win32 本机事件的。

于 2009-03-03T00:57:49.997 回答
0

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

于 2009-03-02T23:53:26.893 回答
0

我认为你应该考虑使用另一种语言。
例如,还有其他语言(例如 C++)专门针对此类问题 :)

于 2009-03-02T23:59:03.773 回答
0

您基本上要求将您的应用程序包含在其他应用程序的操作系统通知中。您可能需要有一个应用程序将其他应用程序作为子进程启动,或者使用诸如 rootkit API 之类的东西来建立高于普通应用程序授予的权限。

如果目标是查看用户与您的应用程序交互的时间,您可能会通过查看为您的应用程序安排的 CPU 时间或如何查看 I/O 事件之间的延迟并将其映射到统计数据来获得一些粗略的想法关于用户的活跃程度。

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

于 2009-03-03T00:40:38.837 回答
0

如果您想从 Java 中执行此操作并且不想编写自己的本机代码,您可以尝试SWT。我怀疑它是否有与平台无关的方式来完成你想要的,但你可以在特定于 Windows 的类中四处寻找,尤其是 org.eclipse.swt.internal.win32.OS。

于 2009-03-03T00:40:42.363 回答
0

我们还可以监视 Windows 任务列表以跟踪用户使用的应用程序,它在 Java 中很容易读取控制台,您还可以从中获取进程数据,但您需要在其中进行少量繁重的字符串处理,bcz 您的所有数据get 将采用字符串格式,您必须从中获取所需的数据,以使其有用,如果您需要进一步的帮助,我可以提供用于监视和保存该数据以进行跟踪的代码,但此解决方案不会覆盖窗口事件,它会给出任务信息,

于 2011-09-05T07:25:35.870 回答