elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿detectar combinaciones de teclas con ventana minimizada? [solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿detectar combinaciones de teclas con ventana minimizada? [solucionado]  (Leído 6,388 veces)
p4nd4criss

Desconectado Desconectado

Mensajes: 40


Ver Perfil
¿detectar combinaciones de teclas con ventana minimizada? [solucionado]
« en: 6 Junio 2012, 04:13 am »

hola gente del foro


me gustaría poder traer al frente la ventana de mi programa(swing java) con una combinación de teclas. digamos
ctrl + P
<<la muñeca me esta matando>>
saben si es posible???
como se hace


« Última modificación: 1 Julio 2012, 03:34 am por pandacriss » En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: ¿es posible detectar combinaciones de teclas cuando mi ventana esta minimizada?
« Respuesta #1 en: 6 Junio 2012, 14:12 pm »

Hace tiempo busqué algo parecido pero solo encontré la escucha de teclado dentro de la ventana activa del JFrame, si no estaba en focus o minimizada no me hacia ni puñetero caso.

Me uno a la petición de algún código capaz de capturar dicho evento.


En línea

ollo

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: ¿es posible detectar combinaciones de teclas cuando mi ventana esta minimizada?
« Respuesta #2 en: 8 Junio 2012, 23:17 pm »

Parece ser que no es posible detectar teclas cuando la ventana de un programa está minimizada, cosas de seguridad, aunque no lo descartan del todo en la página donde lo he leído:

   stackoverflow.com/questions/6426955/listening-for-key-mouse-events
En línea

maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: ¿es posible detectar combinaciones de teclas cuando mi ventana esta minimizada?
« Respuesta #3 en: 8 Junio 2012, 23:45 pm »

mmmm supongo que poder hacerse se podra hacer....
Un keyloger guarda todas las teclas pulsadas y no estas sobre el foco ni la ventana de este...
Asi que supongo que se podrá hacer algo parecido y cuando salgan las teclas señaladas se venga al frente tu aplicacion no?
En línea

p4nd4criss

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: ¿es posible detectar combinaciones de teclas cuando mi ventana esta minimizada?
« Respuesta #4 en: 9 Junio 2012, 06:54 am »

mmmm supongo que poder hacerse se podra hacer....
Un keyloger guarda todas las teclas pulsadas y no estas sobre el foco ni la ventana de este...
Asi que supongo que se podrá hacer algo parecido y cuando salgan las teclas señaladas se venga al frente tu aplicacion no?

muy interesante
buscare si hay algún keylogger en java. ojala tenga suerte.
me has dado una gran idea
aun asi no encuentre uno en java talves pueda programas una combinacion de teclas en el gnome y hacer k me ejecute una programa de unas pocas lineas k se comunique con el principal(de alguna forma. ni idea pero ya eso seria otro tema)
gracias gente
En línea

p4nd4criss

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: ¿es posible detectar combinaciones de teclas cuando mi ventana esta minimizada?
« Respuesta #5 en: 1 Julio 2012, 03:23 am »

esta fue mi solución.
un poco mas complicada de lo k espere.
cuando el programa arranca crea un socket y se pone a escuchar con un hilo
cuando el programa es ejecutado nuevamente revisa el puerto y lo encuentra ocupado, asik envia uan señal al puerto y ternima su ejeucion
de esta manera el mismo atajo de teclado k uso para llamar al porgrama sirve para darle una orden, en este caso, k la ventana se ponga al frente

pero eso no es todo
si programo varios atajos de teclado, llamando al programa y dándole argumentos (java -jar algo.jar comando1)(java -jar algo.jar comando2)(java -jar algo.jar comando3)
puede enviar distintas señales dependiendo del argumento. y hacer k el hilo k escucha realice acciones diferentes con cada señal!!!

por cierto, mi escritorio es gnome. pueden  programar sus atajos de teclado en system>preferences>keyboard shortcuts o en el ccsm del compiz

weno les dejo el código

espero k les sea de ayuda. comenten si les gusto jeje
Código:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {
static ServerSocket SERVER_SOCKET;
static Socket socket;
static DataInputStream dataInput;
static DataOutputStream dataOutput;
   
    public static void main(String[] args) {       

      try {
        SERVER_SOCKET = new ServerSocket(1334);//si ya se esta ejecutando, el puerto estara ocupado
    } catch (IOException x) {
        System.out.println("puerto 1334 ocupado\n¿Otra instancia de la aplicación se está ejecutando?");
        try{
            System.out.println("enviando señal");//como ya se esta ejecutando solo hay k ponerlo al frente
            socket = new Socket("localhost", 1334);//conectarse al puerto
            dataOutput = new DataOutputStream(socket.getOutputStream());//esta tonteria es necesaria en java¬¬
            dataOutput.writeUTF("miapp.Show!!!");//enviando orden para k le ventana se haga visible
            socket.close();
        }
        catch(Exception e){e.printStackTrace();}
            System.exit(0);//ya enviada la orden se detiene
    }

        ventana obj = new ventana();//llamar a la ventana principal
        //obj.setVisible(true);
        try{
            if(args[0].equals("hide")){obj.setVisible(false);}else{obj.setVisible(true);}}// si revice un argumento "hide" la ventano no sera visible. cualquier otro argumento sera ignorado
        catch(Exception e){obj.setVisible(true);}//sin arguemntos, visible

        while (true){//la vetana principal ya esta funcionando y ahora escuchara cuadno se le ordene ir al frente
            try{
        Socket cliente = SERVER_SOCKET.accept();//espera k algo se coneccte
        dataInput = new DataInputStream(cliente.getInputStream());
        String text = dataInput.readUTF();//espera a recivir una orden
        //System.out.println(text);
        if (text.equals("miapp.Show!!!")){obj.setVisible(true);}//se asegura k la orden sea de la misma aplicacion y pone la ventana al frente
              }
            catch(Exception e){e.printStackTrace();}
        }

    }

}

« Última modificación: 1 Julio 2012, 03:31 am por pandacriss » En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: ¿detectar combinaciones de teclas con ventana minimizada? [solucionado]
« Respuesta #6 en: 2 Julio 2012, 16:25 pm »

Es una buena solución pero el detalle es que no es multiplataforma.
Supongo que esos atajos te teclado estarán en un archivo en linux quizás desde ahí se podrían añadir para hacerlo más transparente al usuario final.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines