ouvinte de eventos em Java sem app tendo foco? (Detecção global premida)
-
03-07-2019 - |
Pergunta
Eu tenho procurado por um tempo e todo mundo parece pensar que isso não é possível usando apenas Java, por isso vou dar SO um tiro;)
Existe alguma maneira de ter a minha aplicação Java escutar eventos (eventos-chave, em particular), enquanto outro aplicativo relacionado tem o foco janela? Na minha situação, eu estou olhando para detectar quando o usuário pressionou a tecla 'Pause' no teclado, embora a minha aplicação Java não tem foco.
Já ouvi algumas pessoas mencionar que a única maneira é escrever um código C e utilizar JNI. Apenas curioso se alguém sabia de uma maneira de evitar isso? Ou, se não, pelo menos um muito bom tutorial sobre o c / stuff JNI?
Graças
Solução
É o meu entendimento de que isso não pode ser feito. Em um nível fundamental, a JVM só gera eventos para o / s eventos que recebe, e só recebe eventos O / S de entrada quando ele tem o foco.
Eu tenho certeza que você poderia usar JNI para acionar o O / S para gerar eventos para todas as entradas, mas que seria muito O / S dependente.
Outras dicas
Aqui é a melhor resposta que eu encontrei:
" Há uma biblioteca para lidar com teclado nativo e controle do mouse: https://github.com/kwhat/jnativehook ) "
Eu não estou ciente de qualquer maneira de contornar isso também. Eu achei este link em fóruns do Java com um bom exemplo de como configurar o material JNI e fazer um manipulador de teclado global (muito a acrescentar aqui). É um pouco datado (2005), mas o exemplo parece bastante completo para você começar.