【问题标题】:Tracking OS-level window events in Java在 Java 中跟踪操作系统级别的窗口事件
【发布时间】:2009-03-02 23:47:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: java user-interface awtrobot


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            我认为您应该考虑使用另一种语言。
            例如,还有其他语言(例如 C++)可以解决此类问题 :)

            【讨论】:

              【解决方案6】:

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

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

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  【解决方案8】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2012-06-02
                    • 1970-01-01
                    • 2012-09-11
                    • 1970-01-01
                    • 2012-08-26
                    • 2023-03-23
                    • 2014-10-15
                    • 2010-09-29
                    相关资源
                    最近更新 更多