2009-03-20 9 views
6

Moim celem jest stworzenie aplikacji monitorującej system za pomocą Java. Chciałbym wiedzieć, kiedy użytkownik wykonuje działanie na komputerze z systemem Windows. Wynik byłby coś takiego:Jak wykrywać aktywność użytkownika za pomocą usługi Java działającej w systemie Windows?

08:00 - 08:15 aktywność

09:12 - 10:29 aktywność

12:24 - 15:34 aktywność

I nie jestem zainteresowany żadnymi innymi informacjami (który klawisz został wciśnięty, zastosowana aplikacja itp.). Tylko aktywność użytkownika.

Czy to jest nawet możliwe w Javie? Planuję uruchomić moją aplikację java jako usługę. Ale jeśli chodzi o pobieranie zdarzeń, gdy użytkownik korzysta z komputera, nie mam pojęcia, od czego zacząć.


[edytuj] Dalsze wyjaśnienia: nie jestem zainteresowany szczegółów aktywności, tylko że użytkownik został przeniesiony myszy lub naciśnięciu klawisza. Nie obchodzi mnie, który klawisz został naciśnięty, o ile wiem, że gdzieś wciśnięto jakiś klawisz w aplikacji. Nie obchodzi mnie też żadna inna aktywność poza naciśnięciem klawisza i ruchem myszki (na przykład nie jestem zainteresowany, jeśli klucz USB jest włożony do portu USB).

+0

Czy możesz edytować swój przykładowy wynik i zastępować "aktywność" tym, co naprawdę chcesz zobaczyć? – OscarRyz

+0

Nie chcę więcej szczegółów niż "aktywność". Nie jestem zainteresowany poznaniem rodzaju działalności. Właśnie, że "coś się stało". –

+0

Self-Contradictory - Gdy powiesz "Nie interesują mnie żadne inne informacje (naciśnięty przycisk, używana aplikacja itp.)". Następnie mówisz: "Nie dbam też o żadną inną aktywność poza naciśnięciem klawisza i ruchem myszy" – talonx

Odpowiedz

2

Nie można monitorować aktywność użytkownika bezpośrednio z usługi. Usługa będzie działała w innej stacji okiennej od działań użytkowników, a więc nie będzie możliwości podłączenia się do tej czynności (z wyjątkiem sterowników filtrów, które należy zapisać w C).

Potrzebna jest zatem aplikacja kliencka działająca na pulpicie użytkownika i podłączana do działania klawiatury i myszy. Można to zrobić za pomocą dwóch wywołań interfejsu API systemu Windows SetWindowsHookEx (w przypadku haków o niskim poziomie klawiatury i myszy) przy użyciu interfejsu JNI. Aby monitorować aktywność, aplikacja musiałaby przetworzyć komunikaty dla haseł klawiatury i myszy.

Możesz uruchomić aplikację jako auto-start, dodając wpis do klucza Run rejestru lub możesz mieć swój monitor usług dla sesji logów zdarzeń i launch the application z niego. Następnie aplikacja sesji użytkownika może sama przetwarzać informacje lub przekazywać je do usługi za pośrednictwem potoku lub gniazda.

+0

Dzięki. Po wyszukiwaniu w Google znalazłem kod JNI, który używa SetWindowsHookEx(), aby zrobić to, czego szukam. –

1

Co dokładnie masz na myśli przez "aktywność użytkownika"? Musisz najpierw dokładnie zdefiniować ten termin, aby zacząć myśleć o rozwiązaniu, zwłaszcza gdy mówisz "wciśnięty klawisz, używana aplikacja itp." nie są działaniami.

1

Możesz spróbować tego SWT Win32 Extension. Pozwala na ustawienie haczyków klawiatury i myszy z java w oknach.

Powiązane problemy