在Java中跟踪OS级窗口事件

时间:2009-03-02 23:47:22

标签: java user-interface awtrobot

我需要能够跟踪用户与其计算机上运行的不同应用程序进行交互的程度。对我来说似乎合情合理的是用时间戳记录窗口焦点事件的日志,这些时间戳会告诉你在一天中关注的应用程序是什么。

我们在这个应用程序中还有一些其他的事情可以在Java中直接进行。但是我没有在Java中进行任何GUI编程,因此我不确定是否可以通过awt API获取有关OS级窗口的信息。这甚至可能吗?是否有其他方法可以通过JNI执行此操作,还是需要本机应用程序才能执行此操作?

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

8 个答案:

答案 0 :(得分:5)

如果没有使用本机代码,我认为这不可行。

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我认为您应该考虑使用其他语言 还有其他语言,例如C ++,它们会针对这类问题进行预防:)

答案 5 :(得分:0)

您基本上要求将您的应用程序包含在其他应用程序的操作系统通知中。您可能需要有一个应用程序将其他应用程序作为子进程启动,或者使用类似rootkit API的方式来建立超出正常应用程序授予的权限。

如果目标是查看用户与您的应用程序交互的时间,您可以通过查看计划到您的应用程序的CPU时间或者查看I / O事件和映射之间的延迟来获得一些粗略的想法。那些关于用户活跃程度的统计数据。

否则,我认为您可以与某些间谍软件开发人员联系以获得所需内容。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

相关问题