Pergunta

Eu tenho um requisito para ser capaz de controlar o quanto um usuário interage com as diferentes aplicações rodando em sua máquina. O que parecia lógico para mim era manter um log de eventos foco da janela com marcas de tempo que iria dizer-lhe o que as aplicações estavam em foco ao longo do dia.

Temos algumas outras coisas para fazer nesta aplicação que seria simples em Java. No entanto eu não tenha feito qualquer programação GUI em Java, então eu não tenho certeza se é possível obter informações sobre as janelas de nível OS através da API AWT. É mesmo possível? Haveria outra maneira de fazer isso através de JNI ou se um aplicativo nativo ser obrigado a fazer isso?

PS: Eu sei que esta exigência soa um pouco nefasto mas estou aqui apenas para determinar se este é ou não tecnicamente possível. Por favor, não matar o mensageiro, esta não foi a minha ideia. :)

Foi útil?

Solução

eventos de foco pode funcionar; você também pode querer considerar o Windows teclado e mouse ganchos . Com qualquer uma dessas abordagens, você vai querer criar uma DLL (código nativo) e usar JNI para acessá-lo.

Outras dicas

Com a recorrer ao código nativo eu não acho que isso será possível.

Você pode olhar para uma biblioteca de testes janela -. Alguns desses são feitos para criar e interceptar win32 eventos nativos

Eu não acho que isso é possível usando AWT. Java não tem nenhuma maneira de acessar os processos para as outras aplicações.

Eu acho que você deve considerar o uso de outro idioma.
Existem outras linguagens como C ++, por exemplo, que são predistinated para este tipo de problemas:)

Você está pedindo, basicamente, que a sua aplicação ser incluídos nas notificações do sistema operacional para outras aplicações. Você provavelmente vai precisar que quer ter um aplicativo que lança a outras aplicações como processos filhos ou usar algo como uma API de rootkit para estabelecer permissões acima do que uma aplicação normal é concedido.

Se o objetivo é ver quanto tempo um usuário está interagindo com o seu aplicativo, você pode obter algumas idéias ásperas, olhando para o tempo de CPU que está sendo programado para a sua aplicação ou de alguma forma olhar para atrasos entre eventos I / O e mapeamento aqueles em estatísticas sobre quão ativo é o usuário.

Caso contrário, eu acho que você pode ser capaz de contato com alguns desenvolvedores de spyware para obter o que você precisa.

Se você quiser fazer isso a partir de Java e não quer escrever o seu próprio código nativo, você pode tentar SWT . Eu duvido que ele tem maneiras independentes de plataforma de realizar o que você quer, mas você pode bisbilhotar nas classes específicas do Windows, especialmente org.eclipse.swt.internal.win32.OS.

nós também pode monitorar janelas tasklist para rastrear o aplicativo utilizado por um usuário, e sua simples em Java para ler console e você também pode obter os dados do processo a partir dele, mas você terá pouco processamento corda pesado nele, bcz todo o dados que você começa será no formato de cadeia e você tem que obter os seus dados necessários a partir dele, para torná-lo usefull, se você precisar de mais ajuda que posso dar o código para que a monitorar e salvar esses dados para rastrear, mas esta solução não vai substituir o evento janela, a sua vai dar às informações da tarefa,

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