代码之家  ›  专栏  ›  技术社区  ›  cliff.meyers

在Java中跟踪操作系统级窗口事件

  •  2
  • cliff.meyers  · 技术社区  · 16 年前

    我有一个要求,即能够跟踪用户和机器上运行的不同应用程序的交互程度。对我来说,合理的做法是保留一个带有时间戳的窗口焦点事件日志,它可以告诉您一天中哪些应用程序处于焦点位置。

    在这个应用程序中,我们还有一些在Java中非常简单的事情要做。然而,我还没有用Java做过任何GUI编程,所以我不确定是否有可能通过AWTAPI获得有关操作系统级窗口的信息。这可能吗?是否有其他方法通过JNI来实现这一点,或者是否需要本机应用程序来实现这一点?

    8 回复  |  直到 13 年前
        1
  •  5
  •   jdigital    16 年前

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

        2
  •  5
  •   TofuBeer    16 年前

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

        3
  •  1
  •   Bill K    16 年前

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

        4
  •  0
  •   Mark    16 年前

        5
  •  0
  •   n00ki3    16 年前

    我认为你应该考虑使用另一种语言。
    还有其他一些语言,比如C++,是为这种问题预编译的:

        6
  •  0
  •   dhable    16 年前

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

        7
  •  0
  •   Adam Crume    16 年前

    如果您想从Java执行此操作,但不想编写自己的本机代码,可以尝试 SWT . 我怀疑它是否有平台无关的方式来实现您想要的功能,但您可以在Windows特定的类中进行研究,尤其是org.eclipse.swt.internal.win32.OS。

        8
  •  0
  •   Abdul    13 年前

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