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

ricardjorg

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

3 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Fica bem

ricardjorg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora