¿Escucha de eventos en Java sin que la aplicación tenga foco? (Detección global de pulsación de tecla)

StackOverflow https://stackoverflow.com/questions/800747

Pregunta

He estado buscando por un tiempo y todo el mundo parece pensar que esto no es posible usando solo Java, así que daré MÁS oportunidad;)

¿Hay alguna forma de que mi aplicación Java escuche los eventos (eventos clave en particular) mientras otra aplicación no relacionada se enfoca en la ventana? En mi situación, busco detectar cuándo el usuario ha presionado la tecla 'Pausa' en el teclado aunque mi aplicación Java no esté enfocada.

He escuchado que algunas personas mencionan que la única forma es escribir un código C y usar JNI. ¿Solo por curiosidad si alguien supiera alguna forma de evitar eso? O, si no, al menos un tutorial realmente bueno sobre el tema c / JNI?

Gracias

¿Fue útil?

Solución

Tengo entendido que esto no se puede hacer. A un nivel fundamental, la JVM solo genera eventos para los eventos O / S que recibe, y solo recibe eventos de entrada O / S cuando tiene el foco.

Estoy seguro de que podría usar JNI para activar O / S para generar eventos para todas las entradas, pero eso sería muy dependiente de O / S.

Otros consejos

Aquí está la mejor respuesta que he encontrado:

" Hay una biblioteca para manejar el control nativo del teclado y el mouse: https://github.com/kwhat/jnativehook ) "

Tampoco conozco ninguna forma de evitar eso. Encontré este enlace en los foros de Java con un buen ejemplo de cómo configurar las cosas JNI y hacer un controlador de teclado global (demasiado para agregar aquí). Es un poco anticuado (2005), pero el ejemplo parece lo suficientemente completo como para comenzar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top