Comment détecter l'activité des utilisateurs avec un service Java exécuté sous Windows?


Mon objectif est de créer une application de surveillance système en utilisant Java. Je voudrais savoir quand un utilisateur fait une activité sur un PC Windows. Le résultat serait quelque chose comme ceci:

8:00 - 8:15 activité

9:12 - 10:29 activité

12:24 - 15:34 activité

Je ne suis intéressé par aucune autre information (quelle touche a été enfoncée, application utilisée, etc.). Seule l'activité de l'utilisateur.

Est-ce même possible en Java? Je prévois d'exécuter mon application java en tant que service. Mais en ce qui concerne l'obtention d'événements lorsqu'un utilisateur utilise l'ordinateur, je ne sais pas par où commencer.


[Edit] Clarifications supplémentaires: Je ne suis pas intéressé par lesdétails de l'activité, seulement qu'un utilisateur a déplacé la souris ou appuyé sur une touche. Je me fiche de savoir quelle touche a été enfoncée, tant que je sais qu'une touche a été enfoncée dans une application quelque part. Je ne me soucie pas non plus de toute autre activité sauf la touche enfoncée et le mouvement de la souris (par exemple, je ne suis pas intéressé si une clé USB est inséré dans un port USB).

Author: Stephen Martin, 2009-03-20

4 answers

Vous ne pouvez pas surveiller l'activité de l'utilisateur directement à partir d'un service. Le service s'exécutera dans une station de fenêtre différente des activités des utilisateurs et n'aura donc aucun moyen de se connecter à cette activité (sauf via des pilotes de filtre qui devraient être écrits en C).

Vous aurez donc besoin d'une application cliente qui s'exécute sur le bureau de l'utilisateur et se connecte à l'activité du clavier et de la souris. Vous le feriez via deux appels à l'API Windows SetWindowsHookEx (pour le niveau bas crochets clavier et souris) en utilisant JNI. Pour surveiller l'activité, l'application devrait alors traiter les crochets du clavier et de la souris pour les messages.

Vous pouvez lancer l'application en tant que démarrage automatique en ajoutant une entrée à la clé d'exécution du registre ou vous pouvez avoir votre moniteur de service pour les événements de connexion de session et lancer l'application à partir de celle-ci. Ensuite, l'application de session utilisateur peut soit traiter les informations elle-même, soit les transmettre au service via un tuyau ou une socket.

 2
Author: Stephen Martin, 2017-05-23 10:32:58

Qu'entendez-vous exactement par "activité utilisateur"? Vous devez définir ce terme précisément d'abord pour commencer même à penser à une solution, d'autant plus que vous dites que "touche enfoncée, application utilisée, etc."ne sont pas des activités.

 1
Author: talonx, 2009-03-20 17:56:09

Vous pouvez essayer cette extension SWT Win32. Il vous permet de définir des crochets de clavier et de souris à partir de java sous Windows.

 1
Author: Peter Smith, 2009-05-11 16:33:20

Ce n'est pas directement pris en charge par la plate-forme java

Ce serait beaucoup plus facile si vous explorez une alternative.NET.

Recherche de Capture d'entrée utilisateur globale dans. net

 0
Author: OscarRyz, 2009-03-20 19:11:46