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

Thi*_*Roy 6 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密钥,我不感兴趣).

Ste*_*tin 2

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

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

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