Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/04/2015, 15:06
susi141
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 13 años, 6 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