Pergunta

Eu estou trabalhando no desenvolvimento de um teclado na tela com java. Este teclado tem uma JComponent para cada chave possível. Quando um baixo mouse é detectado no botão, eu quero enviar um código de teclado específico para o aplicativo atualmente em foco. O teclado em si é dentro de um JFrame sem decorações e definido para always-on-top.

Eu achei que a classe Robot pode ser usado para simular esses eventos de teclado na fila nativa. No entanto, neste caso, a seleção da JComponent significaria que a chave-prima é recebida no JFrame, e eu não seria capaz de recebê-lo no outro aplicativo

Como posso manter meu teclado on-screen "Always-sem-focus"? É talvez possível usar uma outra abordagem para enviar a chave-prima?

Foi útil?

Solução 3

Aparentemente, a única maneira de fazer isso é ter uma camada JNI que fará a conversão de java para nativa. Java tem nenhuma maneira fácil de fornecer tal funcionalidade.

Este poderia ser um conceito interessante para uma pequena biblioteca, de terceiros para alguém que quer aprender JNI ...

Outras dicas

jnativehook quando eu estava tentando controlar um gamebot com teclado real e comandos de mouse (para ser mais "humano-like").

A única solução que eu poderia encontrar, até agora, é fazer com que cada tecla um JComponent (por isso não pode ter foco), e defina as seguintes propriedades no JFrame:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

Agora, quando usando a classe robot posso enviar eventos para qualquer janela focada clicando nas teclas. A única limitação é que ele só parece funcionar para as janelas que pertencem à mesma máquina virtual, e ele não funciona em todos com qualquer outra janela do sistema.

você já tentou chamar setfocus nativa () ou SetActiveWindow () para mover o foco antes de usar a classe robot?

Eu não estou ciente de qualquer maneira de fazer isso no OS maneira independente. Eu não sei sobre o Windows, mas seria possível falar com o servidor X através do protocolo X.

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