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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco  (Leído 8,388 veces)
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco
« Respuesta #10 en: 27 Marzo 2015, 10:33 am »

Muchas gracias [ Thunder | CLS ], estuve mirando la fuente que pusiste y la idea esta bastante buena la de no tener que recurrir a otros lenguajes.

el problema de java es que está sobre maquina virtual y todos sus esfuerzos para que todo sea multiplataforma lo alejan del sistema operativo, por otro lado los lenguajes nativos es casi imposible hacer un unico binario multiplataforma, pero tienes acceso al sistema operativo que estés trabajando... C y C++ no tienen más control sobre el SO, solo sobre ellos mismos... el control sobre el SO será igual para todo lenguaje que pueda usar las API del sistema, ya que el programa no hace esas operaciones, sino que se las solicita al sistema


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco
« Respuesta #11 en: 31 Marzo 2015, 04:57 am »

Hola Darhius, el hilo que comentas me ayudo bastante, muchas gracias.

Hola engel lex, ¿Cada sistema tiene su propia API? tengo entendido que la API de un SO te brinda funciones para realizar cosas con el SO que se esta trabajando
¿O que vendría siendo exactamente?, lo que si se, es que acceder desde Java a la misma es mala practica, por lo que es recomendable usar un lenguaje aparte, dicho lenguaje tiene que poder acceder a la API del SO como C/C++


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco
« Respuesta #12 en: 31 Marzo 2015, 13:04 pm »

Citar
¿Cada sistema tiene su propia API?
Si, cada sistema tiene su propia API, esas son básicamente las funciones directas del sistema operativo, si quieres interactuar con el, no tienes más opción...

esto no es standard ni los creadores están obligado a seguir algún patrón... ellos solo prestan las funciones que parecerían útiles

Citar
lo que si se, es que acceder desde Java a la misma es mala practica
Claro, porque se supone que java corre donde caiga y si tiene una api de windows e intenta correr en linux, ahí murió (no se si tenga implicaciones de seguridad más profundas)

En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco
« Respuesta #13 en: 31 Marzo 2015, 17:27 pm »

Citar
Claro, porque se supone que java corre donde caiga y si tiene una api de windows e intenta correr en linux, ahí murió (no se si tenga implicaciones de seguridad más profundas)

No tiene porque morir. Es simple, detectas el SO sobre el cual se está corriendo la app y se carga mediante JNI el archivo C/C++ correspondiente a dicho SO.

Código
  1. public enum OS {
  2.    WINDOWS {
  3.        @Override public void bind() {
  4.            Bind.withWindows();
  5.        }
  6.    },
  7.    LINUX {
  8.        @Override public void bind() {
  9.            Bind.withLinux();
  10.        }
  11.    },
  12.    UNIX {
  13.        @Override public void bind() {
  14.            Bind.withUnix();
  15.        }
  16.    },
  17.    MAC {
  18.        @Override public void bind() {
  19.            Bind.withMac();
  20.        }
  21.    },
  22.   SOLARIS {
  23.        @Override public void bind() {
  24.            Bind.withSolaris();
  25.        }
  26.    };
  27.  
  28.    public abstract void bind();
  29.  
  30. }

Código
  1. public class LowLevelKeyListenerBinder {  
  2.    private OS os;
  3.  
  4.    private String getOSName() {
  5.        return System.getProperty("os.name").toLowerCase();
  6.    }
  7.    public LowLevelKeyListenerBinder prepare() {
  8.        final String OS_NAME = this.getOSName();
  9.        if(OS_NAME.contains("win")) {
  10.            os = OS.WINDOWS;
  11.        }
  12.        if(OS_NAME.contains("nux")) {
  13.            os = OS.LINUX;
  14.        }
  15.        if(OS_NAME.contains("nix")) {
  16.            os = OS.UNIX;
  17.        }
  18.        if(OS_NAME.contains("mac")) {
  19.            os = OS.MAC;
  20.        }
  21.        if(OS_NAME.contains("sunos")) {
  22.            os = OS.SOLARIS;
  23.        }
  24.        return this;
  25.    }
  26.    public LowLevelKeyListenerBinder bind() {
  27.        os.bind();
  28.        return this;
  29.    }
  30.  
  31. }

Desde el contralador de la ventana principal, debes de detectar el SO y asociar el KeyListener:

Código
  1. new LowLevelKeyListenerBinder().prepare().bind();
  2.  

Es necesario que los métodos de Bind sean estáticos ya que un Enum es por defecto estático.


Un saludo.
« Última modificación: 31 Marzo 2015, 17:39 pm por Gus Garsaky » En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: [Duda]Es posible detectar teclas si mi aplicacion no tiene el foco
« Respuesta #14 en: 1 Abril 2015, 04:48 am »

Ok muchas gracias a todos tendré en cuenta lo que me habéis dicho.

Saludos!!!
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

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