Pergunta

Meu objetivo é criar um aplicativo de monitoramento do sistema usando Java. Eu gostaria de saber quando um usuário está fazendo a atividade em um PC com Windows. O resultado seria algo como isto:

8:00 - 8:15 atividade

9:12-10:29 atividade

12:24-15:34 atividade

Eu não estou interessado em qualquer outra informação (que tecla foi pressionada, aplicativo usado, etc.). Apenas a atividade do usuário.

É isto mesmo possível em Java? Eu pretendo executar o meu aplicativo java como um serviço. Mas, como para obter eventos quando um usuário utiliza o computador, eu não tenho idéia por onde começar.


[editar] Esclarecimentos: Eu não estou interessado no detalhes da atividade, apenas que um usuário mudou o mouse ou pressionar uma tecla. Eu não me importo qual tecla foi pressionada, desde que eu sei que uma tecla foi pressionada em uma em algum lugar do aplicativo. Eu também não me importo com qualquer outra atividade, exceto tecla pressionada e movimento do mouse (por exemplo, eu não estou interessado se uma chave USB é inserido em uma porta USB).

Foi útil?

Solução

Você não pode monitorar a atividade do usuário diretamente a partir de um serviço. O serviço será executado em uma estação de janela diferente das atividades dos usuários e assim não terá nenhuma maneira de ligar para essa atividade (exceto por meio de controladores de filtros que precisam ser escritos em C).

Então você vai precisar de um aplicativo cliente que é executado no computador do usuário e ganchos para a atividade do teclado e mouse. Você faria isso por meio de duas chamadas para a API do Windows SetWindowsHookEx (para baixo nível teclado e ganchos de ratinho) utilizando JNI. Para monitorar a atividade do aplicativo, então, necessidade de processar os ganchos de teclado e mouse para mensagens.

Você pode iniciar o aplicativo como auto-start, adicionando uma entrada de chave Run do Registro ou você poderia ter o seu monitor de serviço para log sessão sobre eventos e lançar o aplicação a partir dele. Em seguida, a aplicação sessão do usuário ou poderia processar a informação em si ou passá-lo para o serviço através de um tubo ou socket.

Outras dicas

O que exatamente você quer dizer com 'atividade do usuário'? Você precisa definir esse termo precisamente primeiro a mesmo começar a pensar em uma solução, especialmente como você diz que "tecla pressionada, aplicativo usado, etc." não são actividades.

Você poderia tentar este SWT Win32 Extensão . Ele permite que você conjunto de teclado e mouse ganchos de Java no Windows.

Este não é diretamente suportado pela plataforma java

Seria muito mais fácil se você explorar uma alternativa .NET.

Pesquise Captura de entrada do usuário global em .net

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top