6

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

8:00 - 8:15 活动

9:12 - 10:29 活动

12:24 - 15:34 活动

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

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


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

4

4 回答 4

2

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

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

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

于 2009-03-23T17:33:00.437 回答
1

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

于 2009-03-20T17:56:09.297 回答
1

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

于 2009-05-11T16:33:20.697 回答
0

java平台不直接支持这个

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

在 .net 中搜索捕获全局用户输入

于 2009-03-20T19:11:46.557 回答