Pregunta

Tengo el requisito de poder realizar un seguimiento de cuánto interactúa un usuario con las diferentes aplicaciones que se ejecutan en su máquina. Lo que me pareció lógico era mantener un registro de eventos de enfoque de ventana con marcas de tiempo que le dirían qué aplicaciones estaban enfocadas a lo largo del día.

Tenemos otras cosas que hacer en esta aplicación que serían sencillas en Java. Sin embargo, no he realizado ninguna programación de GUI en Java, así que no estoy seguro de si es posible obtener información sobre las ventanas de nivel de sistema operativo a través de la API awt. ¿Es eso posible? ¿Habría otra forma de hacerlo a través de JNI o ??se requeriría una aplicación nativa para hacerlo?

PD: Sé que este requisito suena un poco nefasto, pero solo estoy aquí para determinar si esto es técnicamente posible o no. Por favor no dispares al mensajero, esto no fue idea mía. :)

¿Fue útil?

Solución

Los eventos de enfoque podrían funcionar; es posible que también desee considerar Windows ganchos para teclado y mouse . Con cualquiera de estos enfoques, querrá crear una DLL (código nativo) y usar JNI para acceder a ella.

Otros consejos

Sin tener que recurrir al código nativo, no creo que esto sea posible.

Puede buscar una biblioteca de pruebas de ventanas, algunas de ellas están creadas para crear e interceptar eventos nativos de win32.

No creo que esto sea posible usando AWT. Java no tiene forma de acceder a los procesos para las otras aplicaciones.

Creo que deberías considerar usar otro idioma.
Hay otros lenguajes como C ++, por ejemplo, que están predestinados para este tipo de problemas :)

Básicamente estás pidiendo que tu aplicación se incluya en las notificaciones del sistema operativo a otras aplicaciones. Probablemente deba tener una aplicación que inicie las otras aplicaciones como procesos secundarios o usar algo como una API de rootkit para establecer permisos por encima de lo que se concede una aplicación normal.

Si el objetivo es ver cuánto tiempo está interactuando un usuario con su aplicación, puede obtener algunas ideas aproximadas al observar el tiempo de CPU que se está programando para su aplicación o cómo los retrasos entre los eventos de E / S y la asignación esos en las estadísticas sobre qué tan activo es el usuario.

De lo contrario, creo que podría contactarse con algunos desarrolladores de spyware para obtener lo que necesita.

Si desea hacer esto desde Java y no desea escribir su propio código nativo, puede intentar SWT . Dudo que tenga formas agnósticas de plataforma de lograr lo que quiere, pero puede buscar en las clases específicas de Windows, especialmente org.eclipse.swt.internal.win32.OS.

también podemos monitorear la lista de tareas de Windows para rastrear la aplicación utilizada por un usuario, y es simple en java para leer la consola y también puede obtener los datos del proceso, pero necesitará un pequeño procesamiento de cadenas pesadas en ella, bcz todo el Los datos que obtenga estarán en el formato de cadena y tendrá que obtener los datos requeridos para que sean útiles. Si necesita más ayuda, puedo darle el código para monitorear y guardar los datos para su seguimiento, pero esta solución no anulará el evento de la ventana, dará la información de la tarea,

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top