Come rilevare l'attività dell'utente con un servizio Java in esecuzione su Windows?


Il mio obiettivo è creare un'applicazione di monitoraggio del sistema utilizzando Java. Mi piacerebbe sapere quando un utente sta facendo attività su un PC Windows. Il risultato sarebbe qualcosa del genere:

8:00 - 8:15 attività

9:12 - 10:29 attività

12:24 - 15:34 attività

Non sono interessato ad altre informazioni (quale tasto è stato premuto, applicazione utilizzata, ecc.). Solo attività utente.

È possibile anche in Java? Ho intenzione di eseguire la mia applicazione java come servizio. Ma per quanto riguarda l'ottenimento di eventi quando un utente utilizza il computer, non ho idea di dove iniziare.


[Modifica] Ulteriori chiarimenti: non sono interessato ai dettagli dell'attività, solo che un utente ha spostato il mouse o premuto un tasto. Non mi interessa quale tasto è stato premuto, purché sappia che un tasto è stato premuto in un'applicazione da qualche parte. Inoltre, non mi interessa nessun'altra attività tranne il tasto premuto e il movimento del mouse (ad esempio, non mi interessa se una chiave USB è inserito in una porta USB).

Author: Stephen Martin, 2009-03-20

4 answers

Non è possibile monitorare l'attività dell'utente direttamente da un servizio. Il servizio verrà eseguito in una stazione finestra diversa dalle attività degli utenti e quindi non avrà modo di collegarsi a quell'attività (tranne attraverso i driver di filtro che dovrebbero essere scritti in C).

Quindi è necessaria un'applicazione client che viene eseguita nel desktop dell'utente e si aggancia all'attività della tastiera e del mouse. Lo faresti tramite due chiamate all'API di Windows SetWindowsHookEx (per basso livello ganci per tastiera e mouse) utilizzando JNI. Per monitorare l'attività, l'applicazione dovrebbe quindi elaborare i ganci della tastiera e del mouse per i messaggi.

È possibile avviare l'applicazione come avvio automatico aggiungendo una voce alla chiave di esecuzione del registro di sistema o si potrebbe avere il monitor di servizio per gli eventi di accesso alla sessione e avviare l'applicazione da esso. Quindi l'applicazione della sessione utente potrebbe elaborare le informazioni stesse o passarle al servizio tramite una pipe o un socket.

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

Cosa intendi esattamente per "attività utente"? È necessario definire quel termine con precisione prima di iniziare a pensare a una soluzione, specialmente quando si dice che " tasto premuto, applicazione utilizzata, ecc."non sono attività.

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

Puoi provare questa estensione SWT Win32. Esso consente di impostare tastiera e mouse ganci da java su Windows.

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

Questo non è direttamente supportato dalla piattaforma java

Sarebbe molto più semplice se si esplora un'alternativa.NET.

Cerca Cattura l'input globale dell'utente in. net

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