Отслеживание нажатия клавиш в фоне

1273
15 июня 2017, 05:02

Столкнулся с такой проблемой. Как отследить нажатие клавиши в фоне. Знаю, что можно как-то сделать через JNI, JNA, Winapi. Хотел бы увидеть примеры, как отслеживать нажатие определенной клавиши, когда программа свернута. Спасибо

Answer 1

Есть библиотека jnativehook.

Вот зависимость мавен:

<dependency>
    <groupId>com.1stleg</groupId>
    <artifactId>jnativehook</artifactId>
    <version>2.0.2</version>
</dependency>

А здесь примеры использования от разработчика. Процитирую код от туда касаемый перехвата событий с клавиатуры:

Global Keyboard Listener

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
public class GlobalKeyListenerExample implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
        if (e.getKeyCode() == NativeKeyEvent.VC_ESCAPE) {
            GlobalScreen.unregisterNativeHook();
        }
    }
    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }
    public void nativeKeyTyped(NativeKeyEvent e) {
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }
    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());
            System.exit(1);
        }
        GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
    }
}

Кроме событий клавиатуры, библиотека умеет отрабатывать события мыши.

READ ALSO
Что конкретно нужно знать Android-разработчику? [требует правки]

Что конкретно нужно знать Android-разработчику? [требует правки]

Хочу стать Android-разработчикомЧто нужно знать для этого? Сейчас учу java SE

340
Как отсылать push-уведомления

Как отсылать push-уведомления

Доброго времени сутокСуществует необходимость отсылать push-уведомления от устройства к самому себе

316
генерация base64 swift

генерация base64 swift

есть пример генерации ключа на java

321