Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Como puedo Contar las de teclas y clicks con JNativeHook ?

Estas en el tema de Como puedo Contar las de teclas y clicks con JNativeHook ? en el foro de Java en Foros del Web. Hola, Necesito obtener el conteo de teclas presionadas y click en todo el sistema. Esto debe de poder realizarlo cada cierto tiempo, es decir que ...
  #1 (permalink)  
Antiguo 01/04/2015, 15:06
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Como puedo Contar las de teclas y clicks con JNativeHook ?

Hola,

Necesito obtener el conteo de teclas presionadas y click en todo el sistema. Esto debe de poder realizarlo cada cierto tiempo, es decir que durante un periodo de tiempo cuento las teclas presionadas y clicks realizados y luego inicializo el contador.

Estoy utilizando Jnativehook pero no logro que la variable del contador se actulice, es decir que si hago un system.out.println de public void nativeKeyPressed(NativeKeyEvent e) me muestra el conteo pero cuando intento acceder a la variable contador en el main me muestra 0.

Aqui dejo la clase que estoy utilizando para ver si alguien me puede ayudar.

Código Java:
Ver original
  1. package org.systrix.timetracker.resources;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4.  
  5. import org.jnativehook.GlobalScreen;
  6. import org.jnativehook.NativeHookException;
  7. import org.jnativehook.keyboard.NativeKeyEvent;
  8. import org.jnativehook.keyboard.NativeKeyListener;
  9. import org.jnativehook.mouse.NativeMouseEvent;
  10. import org.jnativehook.mouse.NativeMouseListener;
  11.  
  12. /*Primero se implementará la interfaz que contiene los métodos necesarios para el
  13.  * manejo de las teclas según su comportamiento
  14.  */
  15.  
  16. public class MouseKeyListener implements NativeKeyListener, NativeMouseListener{
  17.     /**
  18.      *
  19.      */
  20.     public int contadorclicks;
  21.     public int contadorkeys;
  22.    
  23.     public static void main(String[] args) {
  24.         //Se inicia la rutina de inicialización de los componentes de la librería JNativeHook
  25.         try {          
  26.  
  27.             GlobalScreen.registerNativeHook();
  28.             GlobalScreen.addNativeKeyListener(new MouseKeyListener());
  29.             MouseKeyListener aux = new MouseKeyListener();
  30.             aux.countKeysPress(20000,aux);
  31.         } catch(Exception e) {
  32.             e.printStackTrace();
  33.         }
  34.     }
  35.    
  36.     public MouseKeyListener(){
  37.         setContadorclicks(0);
  38.         setContadorkeys(0);
  39.     }
  40.    
  41.     public void countKeysPress(final int miliseconds, final MouseKeyListener aux){
  42.             TimerTask timerTask = new TimerTask()
  43.         {
  44.             public void run()  
  45.             {
  46.                 // Aquí el código que queremos ejecutar.
  47.                 System.out.println("Dentro del thread las teclas " + aux.getContadorkeys());
  48.                 aux.setContadorkeys(0);
  49.                 try {
  50.                     Thread.sleep(miliseconds);
  51.                 } catch (InterruptedException e) {
  52.                     // TODO Auto-generated catch block
  53.                     e.printStackTrace();
  54.                 }
  55.             }
  56.         };
  57.         Timer timer;
  58.         timer = new Timer();
  59.         // Dentro de 0 milisegundos avísame cada  miliseconds
  60.        timer.scheduleAtFixedRate(timerTask, 0, miliseconds);
  61.     }
  62.     //El método que se utilizará por ahora es nativeKeyPressed:
  63.     public void nativeKeyPressed(NativeKeyEvent e) {
  64.         //El código que imprimirá en la salida estándar cuál tecla se ha presionado es:
  65.         setContadorkeys(getContadorkeys() + 1);
  66.         System.out.println("Se han presionado " + getContadorkeys() + " teclas");
  67.     }
  68.  
  69.     public void nativeKeyReleased(NativeKeyEvent e) {
  70.         // TODO Auto-generated method stub
  71.        
  72.     }
  73.  
  74.     public void nativeKeyTyped(NativeKeyEvent e) {
  75.         // TODO Auto-generated method stub
  76.        
  77.     }
  78.  
  79.     public void nativeMouseClicked(NativeMouseEvent arg0) {
  80.         // TODO Auto-generated method stub
  81.         setContadorclicks(getContadorclicks() + 1);
  82.         System.out.println("Se han realizado "+ getContadorclicks() + " clicks");
  83.        
  84.        
  85.     }
  86.  
  87.     public void nativeMousePressed(NativeMouseEvent arg0) {
  88.         // TODO Auto-generated method stub
  89.        
  90.     }
  91.  
  92.     public void nativeMouseReleased(NativeMouseEvent arg0) {
  93.         // TODO Auto-generated method stub
  94.        
  95.     }
  96.  
  97.     /**
  98.      * @return the contadorclicks
  99.      */
  100.     public int getContadorclicks() {
  101.         return contadorclicks;
  102.     }
  103.  
  104.     /**
  105.      * @param contadorclicks the contadorclicks to set
  106.      */
  107.     public void setContadorclicks(int contadorclicks) {
  108.         this.contadorclicks = contadorclicks;
  109.     }
  110.  
  111.     /**
  112.      * @return the contadorkeys
  113.      */
  114.     public int getContadorkeys() {
  115.         return contadorkeys;
  116.     }
  117.  
  118.     /**
  119.      * @param contadorkeys the contadorkeys to set
  120.      */
  121.     public void setContadorkeys(int contadorkeys) {
  122.         this.contadorkeys = contadorkeys;
  123.     }
  124.  
  125. }

si alguien me puede ayudara conseguir el error o decirme alguna otra forma mas eficiente de hacerlo lo agradeceria.

Adicionalmente deben de saber que ese valor lo voy a almacenar en una base de datos.

Gracias
  #2 (permalink)  
Antiguo 02/04/2015, 03:55
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Como puedo Contar las de teclas y clicks con JNativeHook ?

Buenas,

Eso es porque estas creando dos MouseKeyListener . Uno el que realmente le pasas al hook y otro el que intentas monitorizar (y que obviamente esta siempre a 0).

Cambia tu main por este:

Código Java:
Ver original
  1. public static void main(String[] args) {
  2.         //Se inicia la rutina de inicialización de los componentes de la librería JNativeHook
  3.         try {
  4.  
  5.             GlobalScreen.registerNativeHook();
  6.             MouseKeyListener myMouseListener = new MouseKeyListener();
  7.             GlobalScreen.getInstance().addNativeKeyListener(myMouseListener);
  8.             myMouseListener.countKeysPress(20000, myMouseListener);
  9.         } catch (Exception e) {
  10.             e.printStackTrace();
  11.         }
  12.     }

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 02/04/2015, 08:12
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Como puedo Contar las de teclas y clicks con JNativeHook ?

Muchas gracias por tu ayuda, a la final lo hice un poco diferente a como lo plantie arriba, pero definitivamente era como tu decias, estaba llamandolo doble.

use el this en lugar de new MouseKeyListener() y solo lo llamo una vez al comenzar el hilo.

Etiquetas: clase, clicks, string, teclas, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:37.