티스토리 뷰

들어가며

  • 애플리케이션에서 사용자의 키보드, 마우스 입력을 감지하는 기능을 구현해야 할 때가 있습니다.
  • JNativeHook 라이브러리를 이용하여 이러한 기능을 구현하는 방법에 대해서 알아보겠습니다.

 


JNativeHook

  • Java 전용 Gloabl Keyboard, Mouse 리스너를 제공하는 라이브러리 입니다.
  • 플랫폼에 구애받지 않으며 순수 Java로는 구현하지 못하는 키, 마우스 동작을 수신할 수 있습니다.
  • 리스너에는 아래와 같은 Event들을 감지할 수 있습니다.
    • Key Press Events
    • Key Release Events
    • Key Typed Events
    • Mouse Down Events
    • Mouse Up Events
    • Mouse Click Events
    • Mouse Move Events
    • Mouse Drag Events
    • Mouse Wheel Events
 

kwhat/jnativehook

Global keyboard and mouse listeners for Java. Contribute to kwhat/jnativehook development by creating an account on GitHub.

github.com


라이브러리 적용

Gradle

compile group: 'com.1stleg', name: 'jnativehook', version: '2.1.0'

Maven

<!-- https://mvnrepository.com/artifact/com.1stleg/jnativehook -->
<dependency>
    <groupId>com.1stleg</groupId>
    <artifactId>jnativehook</artifactId>
    <version>2.1.0</version>
</dependency>

ETC

 

Maven Repository: com.1stleg » jnativehook » 2.1.0

Global keyboard and mouse listeners for Java. com.1stleg jnativehook 2.1.0 // https://mvnrepository.com/artifact/com.1stleg/jnativehook compile group: 'com.1stleg', name: 'jnativehook', version: '2.1.0' // https://mvnrepository.com/artifact/com.1stleg/jnat

mvnrepository.com


예제

  • 리스너를 먼저 구현해보겠습니다. 
  • 아래와 같이 NativeKeyListener, NativeMouseListener인터페이스를 통해서 구현이 가능합니다. 
//KeyBoard 입력 리스너 구현
public class KeyHooker implements NativeKeyListener {
  public void nativeKeyPressed(NativeKeyEvent e) {
    System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
  }

  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()));
  }
}

//Mouse 입력 리스너 구현 
public class MouseHooker implements NativeMouseListener {
  public void nativeMouseClicked(NativeMouseEvent e) {
    System.out.println("Mouse Clicked: " + e.getPoint());
  }

  public void nativeMousePressed(NativeMouseEvent e) {
    System.out.println("Mouse Pressed: " + e.getPoint());
  }

  public void nativeMouseReleased(NativeMouseEvent e) {
    System.out.println("Mouse Released: " + e.getPoint());
  }
}

 

  • 메인 메서드에서 리스너를 등록해보겠습니다.
  • 후에 실행을 해보면 이벤트가 발생했을 때 Console 창에 해당 이벤트가 출력되는 것을 확인할 수 있습니다.
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 MouseHooker());
    GlobalScreen.addNativeKeyListener(new KeyHooker());
  }
반응형
댓글