2013-05-23 8 views
0

이 문제에 관해 비슷한 질문을 보았습니다. 그러나 나에게 일어난 일은 조금 다릅니다. 원격 제어 응용 프로그램을 개발 중이며 컴퓨터에 키 입력을 보내고 있습니다. 자바 로봇 클래스는 키 입력에 대한 VK_CODES을 받아, 그래서 나는이 같은 키 조합에 비 ASCII 문자를 번역 할 수 있습니다자바에서 문자를 키 입력으로 변환

public void type(char character) { 
     switch (character) { 
     case 'a': doType(KeyEvent.VK_A); break; 
     case 'á': doType(KeyEvent.VK_A); break; 
     case 'à': doType(KeyEvent.VK_A); break; 
     case 'ä': doType(KeyEvent.VK_A); break; 
     case 'â': doType(KeyEvent.VK_A); break; 
     case 'b': doType(KeyEvent.VK_B); break; 
     case 'c': doType(KeyEvent.VK_C); break; 
     case 'd': doType(KeyEvent.VK_D); break; 
     case '{': doType(KeyEvent.VK_SHIFT, KeyEvent.VK_OPEN_BRACKET); break; 
     case '}': doType(KeyEvent.VK_SHIFT, KeyEvent.VK_CLOSE_BRACKET); break; 
     case '|': doType(KeyEvent.VK_SHIFT, KeyEvent.VK_BACK_SLASH); break; 

     etc... 
    } 

    private void doType(int... keyCodes) { 
     doType(keyCodes, 0, keyCodes.length); 
    } 



    private void doType(int[] keyCodes, int offset, int length) { 
     if (length == 0) { 
      return; 
     } 

     robot.keyPress(keyCodes[offset]); 
     doType(keyCodes, offset + 1, length - 1); 
     robot.keyRelease(keyCodes[offset]); 
    } 

이 잘 작동,하지만 난에 대한 (Alt + 숫자 문자를 결합하려고 할 때 예를 들어 내가 할)에 '@'문자를 입력합니다 :

case '@': doType(KeyEvent.VK_ALT,KeyEvent.VK_6,KeyEvent.VK_4); break; 

그것을 입력하지 않습니다. 키보드로 직접 입력하면 작동합니다. 이유가 있을까요? ASCII 인스턴스뿐만 아니라 모든 유니 코드 문자를 받아들이도록 Robot 인스턴스를 만들려면 어떻게해야합니까? 내가하고있는 일을하는 더 좋은 방법이 있습니까?

영어를 읽어 주셔서 감사합니다.

답변

0

나는 문제가 있다는 것을 알아 냈는데, 나는 VK_number를 직접 입력하고 있었다. 는 지금은 VK_NUMPAD 키를 사용하여 마치 마법처럼 작동합니다

case '@': doType(KeyEvent.VK_ALT,KeyEvent.VK_NUMPAD6,KeyEvent.VK_NUMPAD4); break; 
case '#': doType(KeyEvent.VK_ALT,KeyEvent.VK_NUMPAD3,KeyEvent.VK_NUMPAD5); break; 

등 ..

관련 문제