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

时间:2009-03-20 17:49:38

标签: java windows windows-services android-activity

我的目标是使用Java创建系统监视应用程序。我想知道用户何时在Windows PC上进行活动。结果将是这样的:

8:00 - 8:15活动

9:12 - 10:29活动

12:24 - 15:34活动

我对任何其他信息(按下哪个键,使用的应用程序等)不感兴趣。只有用户活动。

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


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

4 个答案:

答案 0 :(得分:2)

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

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

您可以通过向注册表的Run键添加条目来启动应用程序作为自动启动,也可以让您的服务监视器用于事件的会话日志和launch the application。然后,用户会话应用程序可以自己处理信息,也可以通过管道或套接字将其传递给服务。

答案 1 :(得分:1)

“用户活动”究竟是什么意思?您需要先准确定义该术语,以便开始考虑解决方案,尤其是当您说“按下按键,使用应用程序等”时不是活动。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

java平台

不直接支持

如果你探索.NET替代方案会更容易。

搜索Capture global user input in .net