代码之家  ›  专栏  ›  技术社区  ›  Thierry Roy

如何在Windows上运行Java服务来检测用户活动?

  •  6
  • Thierry Roy  · 技术社区  · 15 年前

    我的目标是创建一个使用Java的系统监控应用程序。我想知道用户何时在Windows PC上进行活动。结果如下:

    8:00-8:15活动

    9:12-10:29活动

    12:24-15:34活动

    我对任何其他信息(按键、应用程序等)都不感兴趣。仅限用户活动。

    这在Java中是可能的吗?我计划运行我的Java应用程序作为一个服务。但至于在用户使用计算机时获取事件,我不知道从哪里开始。


    [编辑]进一步澄清:我对 细节 只有用户移动了鼠标或按下了一个键。我不在乎按下了哪个键,只要我知道在某个应用程序中某个地方按下了一个键。除了按键和鼠标移动(例如,如果USB钥匙插入USB端口,我不感兴趣)之外,我也不关心其他任何活动。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Community dbr    7 年前

    不能直接从服务监视用户活动。服务将在与用户活动不同的窗口站中运行,因此无法连接到该活动(除非通过需要用C编写的过滤器驱动程序)。

    因此,您需要一个在用户桌面上运行的客户端应用程序,并钩住键盘和鼠标活动。您可以通过两个对Windows API的调用来实现这一点 SetWindowsHookEx (用于低级键盘和鼠标挂钩)使用JNI。为了监视活动,应用程序随后需要处理消息的键盘和鼠标挂钩。

    您可以通过在注册表的运行项中添加一个条目以自动启动的方式启动应用程序,或者让服务监视器监视会话登录事件和 launch the application 从它。然后,用户会话应用程序可以自己处理信息,也可以通过管道或套接字将信息传递给服务。

        2
  •  1
  •   talonx    15 年前

    “用户活动”究竟是什么意思?您需要首先精确地定义这个术语,以便开始思考解决方案,特别是当您说“按下键、使用应用程序等”不是活动时。

        3
  •  1
  •   Peter Smith    15 年前

    你可以试试这个 SWT Win32 Extension . 它允许您在Windows上从Java中设置键盘和鼠标挂钩。

        4
  •  0
  •   OscarRyz    15 年前

    这不是Java平台直接支持的。

    如果您探索一个.NET替代方案,会容易得多。

    寻找 Capture global user input in .net