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

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

8:00 – 8:15活动

9:12 – 10:29活动

12:24 – 15:34活动

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

这在Java中甚至可能吗? 我打算运行我的Java应用程序作为服务。 但是,至于用户使用电脑时发生的事件,我不知道从哪里开始。


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

Solutions Collecting From Web of "如何使用在Windows上运行的Java服务来检测用户活动?"

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

所以你需要一个在用户桌面上运行的客户端应用程序,并挂接到键盘和鼠标的活动。 你可以通过使用JNI对Windows API SetWindowsHookEx (对于低级别的键盘和鼠标钩子)进行两次调用。 为了监视活动,应用程序需要处理消息的键盘和鼠标钩子。

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

“用户活动”是什么意思? 您需要首先定义该术语,甚至开始思考解决方案,特别是当您说“按键,使用的应用程序等”时。 不是活动。

你可以试试这个SWT Win32扩展 。 它允许你在Windows上设置键盘和鼠标钩子。

这不是由java平台直接支持的

如果你研究一个.NET的选择,这将会容易得多。

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