2009-03-20 21 views
6

Mi objetivo es crear una aplicación de supervisión del sistema utilizando Java. Me gustaría saber cuándo un usuario está haciendo actividad en una PC con Windows. El resultado sería algo como esto:¿Cómo detectar la actividad del usuario con un servicio Java que se ejecuta en Windows?

08:00-8:15 actividad

09:12 - actividad 10:29

12:24 - 15:34

actividad

I' m no estaba interesado en ninguna otra información (qué tecla se presionó, aplicación utilizada, etc.). Solo actividad del usuario

¿Es esto posible en Java? Planeo ejecutar mi aplicación Java como un servicio. Pero en cuanto a obtener eventos cuando un usuario usa la computadora, no tengo idea de por dónde empezar.


[Editar] Cualquier aclaración adicional: No estoy interesado en los detalles de la actividad, solo que un usuario ha movido el ratón o pulsar una tecla. No me importa qué tecla se presionó, siempre que sepa que se presionó una tecla en alguna aplicación. Tampoco me importa ninguna otra actividad, excepto el movimiento de las teclas y el mouse (por ejemplo, no me interesa si se inserta una llave USB en un puerto USB).

+0

¿podría editar la salida de muestra y sustituir "actividad" con lo que realmente desea ver? – OscarRyz

+0

No quiero más detalles que "actividad". No estoy interesado en saber el tipo de actividad. Solo que "algo sucedió". –

+0

Autocontradictorio: una vez que dice "No estoy interesado en ninguna otra información (tecla presionada, aplicación utilizada, etc.)". Luego dices "No me importa otra actividad, excepto la tecla presionada y el movimiento del mouse" – talonx

Respuesta

2

No se puede supervisar la actividad del usuario directamente desde un servicio. El servicio se ejecutará en una estación de ventana diferente de las actividades de los usuarios y, por lo tanto, no tendrá forma de conectarse a esa actividad (excepto a través de controladores de filtro que deberían escribirse en C).

Por lo tanto, necesitará una aplicación cliente que se ejecute en el escritorio del usuario y se enganche en la actividad del teclado y el mouse. Lo haría a través de dos llamadas a la API de Windows SetWindowsHookEx (para ganchos de teclado y mouse de bajo nivel) utilizando JNI. Para monitorear la actividad, la aplicación necesitaría procesar los ganchos de teclado y mouse para los mensajes.

Puede iniciar la aplicación como de inicio automático agregando una entrada a la clave Ejecutar del registro o puede hacer que su monitor de servicio inicie sesión en eventos y launch the application desde la misma. Entonces, la aplicación de sesión del usuario podría procesar la información o pasarla al servicio a través de una tubería o zócalo.

+0

Gracias. Después de buscar en Google, encontré un código JNI que usa SetWindowsHookEx() para hacer lo que estoy buscando. –

1

¿Qué quiere decir exactamente 'actividad de usuario'? Primero tiene que definir ese término para comenzar a pensar en una solución, especialmente cuando dice "tecla presionada, aplicación utilizada, etc." no son actividades.

1

Puede probar este SWT Win32 Extension. Le permite establecer ganchos de teclado y mouse desde Java en Windows.

Cuestiones relacionadas