Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ricardjorg

Verificar se uma tecla foi pressionada com o programa em 2ºplano..

Recommended Posts

ricardjorg

Olá..

Tenho um problema num programa que ando a fazer.. O meu programa tem uma janela com um KeyEvent listener para a tecla Pause.. a minha intenção é que, ao premir a tecla Pause, o programa feche a janela actual e abra a janela de menu do programa.. Isso está a funcionar.. mas se eu abrir outro programa e o meu ficar em 2º plano, a minha janela já não identifica se a tecla foi pressionada.. Ou seja.. Abre-se o programa, e depois abre-se outra coisa qualquer ficando a minha janela fica em 2º plano com a outra em 1º..

Actualmente o meu programa identifica se a tecla foi premida.. Mas se eu abrir uma janela do explorer, por exemplo, e carregar na tecla, o programa deixa de reconhecer o evento..

Agradeço qualquer ajuda que me possam dar

ricardjorg


visitem o meu super-site:http://www.pixeis.net/

Share this post


Link to post
Share on other sites
Knitter

O que pretendes fazer não é possível fazer a nível da aplicação.

O sistema operativo envia os eventos de teclado para a aplicação que tem focus, nem faz sentido que seja de outra forma, se a janela está em segundo plano então é porque o utilizador não a está a usar e, consequentemente, não tem qualquer lógica, para o sistema operativo, que essa janela recebe qualquer input que não seja o de trazer a janela para primeiro plano.

Assim, a resposta mais simples seria que não é possível fazeres o que pretendes.

A resposta mais longa é que é possível capturar os eventos ao nível do sistema operativo. Uma aplicação pode registar-se como hook na cadeia de eventos e receber o evento antes de ele ser enviado para a aplicação que está com focus em determinado momento.

Se fizeres isso podes detectar que a tecla foi pressionada e agir em conformidade.

Esta abordagem tem alguns problemas, isto funciona em Windows, não faço ideia como o fazer em Linux ou outro sistema operativo, pode ser bloqueado por um antivírus já que esta é uma técnica básica usada por keyloggers, podes interferir no normal funcionamento da aplicação que está com focus e que deve receber o evento da tecla sem interferências e o pior de todos, em Java serás obrigado a usar JNI o que, não sendo extremamente complicado, é suficientemente chato de se usar em Windows, especialmente no caso das funções de hooking de teclado que terás de usar e da péssima documentação que as acompanha.

Desconheço se existem algumas bibliotecas que façam isto por ti e que possas integrar na tua aplicação. Em Java essa tarefa é dificultada devido às politicas de segurança impostas.

Share this post


Link to post
Share on other sites
ricardjorg

Obrigado pela resposta.. ok.. Eu vou tentar contornar isso de outra forma..

Fica bem

ricardjorg


visitem o meu super-site:http://www.pixeis.net/

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.