2015-01-28 6 views
1

Java를 사용하여 Copy&Paste 핫키를 가로 채려고합니다. 전세계에서 단축키를 연결하는 데 다른 OS에서 단축키를 연결하면 정상적으로 작동하는 JKeyMaster을 사용했습니다.전체적으로 핫키를 차단하지만 원래의 동작을 유지하십시오.

이번에는 새로운 핫키를 OS에 부착하고 싶지 않습니다. 난 그냥 중간에 코드를 실행하고 싶다. 그래서 CTRL + V에 단축키를 추가하고 싶습니다. 전 세계적으로 그것을 누르면, OS 이벤트가 처리되기 전이나 후에 (문제가 아닌) 내 사용자 정의 동작을 실행하고 싶습니다. 나는 텍스트가있는 경우

그래서 예를 들어, 내 클립 보드에 "Test Text"을 내가 붙여 넣기가 일어나기 전에, 내가 "New Text"에 클립 보드의 텍스트를 변경하려면, CTRL에게 + V를 누릅니다.

라이브러리가있어 덮어 쓰지 않고 글로벌 핫키를 차단할 수 있습니까?

+0

http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/Clipboard.html – Stefan

+0

클립 보드에 액세스하는 방법을 알고 있습니다. 문제는 언제 알 수 있어야합니다. 정확히 CTRL + V를 누르거나 그 후에. 그래서 전 세계적으로이 키 이벤트를 연결해야합니다. 하지만 발견 한 모든 라이브러리는 표준 동작을 덮어 씁니다. 그리고 그것은 내가하고 싶은 것이 아닙니다. – Loki

+0

https://code.google.com/p/jnativehook/ –

답변

1

jnativehook을 사용할 수 있습니다. (약간 변경)을 keyboard listener example에서 하나는 왼쪽, 오른쪽 Ctrl 키 키 다음 중 하나가 아닌 다른 발표를 칠 경우 때문에

import org.jnativehook.GlobalScreen; 
import org.jnativehook.NativeHookException; 
import org.jnativehook.keyboard.NativeKeyEvent; 
import org.jnativehook.keyboard.NativeKeyListener; 

public class GlobalKeyListenerExample implements NativeKeyListener { 

    boolean isCtrlDown = false; 

    public void nativeKeyPressed(NativeKeyEvent e) { 
     System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode())); 

     if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL_L || e.getKeyCode() == NativeKeyEvent.VC_CONTROL_R) { 
      System.out.println("Ctrl pressed"); 
      isCtrlDown = true; 
     } 

     if (e.getKeyCode() == NativeKeyEvent.VC_V && isCtrlDown) { 
      System.out.println("User hit Ctrl+V"); 
     } 
    } 

    public void nativeKeyReleased(NativeKeyEvent e) { 
     System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode())); 

     if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL_L || e.getKeyCode() == NativeKeyEvent.VC_CONTROL_R) { 
      System.out.println("Ctrl released"); 
      isCtrlDown = false; 
     } 
    } 

    public void nativeKeyTyped(NativeKeyEvent e) {} 

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

이것은 약간의 버그가 될 것이라고 isCtrlDownfalse 될 것이다. 나는 그들이 Mac에 붙이기위한 핵심 콤보를 모르기 때문에 Mac에서 작동하는지 모르겠습니다.

+0

ant로 빌드 된'.jar' 파일을 얻을 수 없습니다. 비록 위키를 매뉴얼로 사용했지만. 아마도 일부 도구가 누락되었습니다. 이것은 물건을 만드는 데 엄청난 오버 헤드가 될 수 있습니다. 왜 단순히 github 내에'.jar' 파일을 제공하지 않는 것입니까? 그런 식으로 코드를 테스트 할 수 없습니다. 죄송합니다. – Loki

+0

릴리스가 있습니다 ... 좋아. 이것을 시험해 보면 꽤 괜찮아 보입니다. 실제 문제의 코드를 구현할 수 없었지만 실제로 붙여 넣기 이벤트가 끝난 후 코드를 실행 ('System.out') 할 수있었습니다. 이것이 제가 원했던 것입니다. 고맙습니다 – Loki