Caras, consegui implementar um KeyboardHook com essa lib:
http://feeling.sourceforge.net/
Ele funciona legal, mas daí do nada ele para de aceitar keybinds…
E se eu tento reinstalar o Hook.KEYBOARD.install(); o java da exception dizendo que ele ja esta instalado… Alguem teve algum problema semelhante?
“Do nada” quer dizer: keyboard hooks são coisas do Windows que na verdade são completamente incompatíveis com o Java. É que um hook é na verdade injeção de código ede DLL em todos os processos que têm interface com o usuário e estão sob o usuário que instalou o hook .
Na primeira vez que o Java tiver de fazer uma garbage collection (ou seja, dentro de alguns segundos) o Windows irá achar que está havendo um acesso ilegal qualquer (porque endereços de memória de alguns objetos mudaram de lugar) e então irá simplesmente desativar o hook e não deixar instalá-lo novamente.
Vár reclamar com o titio Bill, ou então escreva um keyboard hook em C puro (nem C++ é recomendado nesse caso).
[quote=entanglement]“Do nada” quer dizer: keyboard hooks são coisas do Windows que na verdade são completamente incompatíveis com o Java. É que um hook é na verdade injeção de código ede DLL em todos os processos que têm interface com o usuário e estão sob o usuário que instalou o hook .
Na primeira vez que o Java tiver de fazer uma garbage collection (ou seja, dentro de alguns segundos) o Windows irá achar que está havendo um acesso ilegal qualquer (porque endereços de memória de alguns objetos mudaram de lugar) e então irá simplesmente desativar o hook e não deixar instalá-lo novamente.
Vár reclamar com o titio Bill, ou então escreva um keyboard hook em C puro (nem C++ é recomendado nesse caso).
[/quote]
Eu ja consegui resolver, mas é exatamente isso que tu falo, analisei processo por processo que meu programa estava fazendo, e cheguei a conclusão que “na hora do refresh” o sistema dropava a execução do Hook. Porém, vc se enganou na hora de dizer que ele não deixa instalar novamente. A minha solução foi simples, tendo em vista que para a VM o metodo Hook.KEYBOARD.install(); ainda estava ativo.
public void keyHookRefresh(){
Hook.KEYBOARD.uninstall();
Hook.KEYBOARD.install();
}
Muito obrigado pela resposta Entanglement, segunda vez que vc me ajuda