我的目标是使用Java创建系统监视应用程序。我想知道用户何时在Windows PC上进行活动。结果将是这样的:
8:00 - 8:15活动
9:12 - 10:29活动
12:24 - 15:34活动
我对任何其他信息(按下哪个键,使用的应用程序等)不感兴趣。只有用户活动。
这在Java中是否可行?我计划将我的java应用程序作为服务运行。但至于在用户使用计算机时获取事件,我不知道从哪里开始。
[编辑]进一步澄清:我对活动的详细信息不感兴趣,只是用户移动了鼠标或按了一个键。我不关心按下哪个键,只要我知道某个键在某个应用程序中被按下了。除了按键和鼠标移动之外,我也不关心任何其他活动(例如,如果在USB端口中插入USB密钥,我不感兴趣。)
答案 0 :(得分:2)
您无法直接从服务监控用户活动。该服务将在与用户活动不同的窗口站中运行,因此无法挂钩该活动(除非通过需要用C编写的过滤器驱动程序)。
因此,您需要一个在用户桌面上运行的客户端应用程序,并挂钩键盘和鼠标活动。您可以通过使用JNI两次调用Windows API SetWindowsHookEx(用于低级键盘和鼠标挂钩)来实现。要监视活动,应用程序将需要处理消息的键盘和鼠标挂钩。
您可以通过向注册表的Run键添加条目来启动应用程序作为自动启动,也可以让您的服务监视器用于事件的会话日志和launch the application。然后,用户会话应用程序可以自己处理信息,也可以通过管道或套接字将其传递给服务。
答案 1 :(得分:1)
“用户活动”究竟是什么意思?您需要先准确定义该术语,以便开始考虑解决方案,尤其是当您说“按下按键,使用应用程序等”时不是活动。
答案 2 :(得分:1)
你可以尝试这个SWT Win32 Extension。它允许您在Windows上从java设置键盘和鼠标挂钩。
答案 3 :(得分:0)