2015-01-16 31 views
5

我有問題通過java機器人類按特殊字母(土耳其等)。我有一種方法來按鍵作爲alt +鍵碼。我不能將一些特殊的字母轉換爲當前的鍵碼。那我該如何解決它。感謝名單Java機器人類按土耳其語字母(Ö,ö,Ş,ş,Ü,ü,Ğ,?,İ,ı,Ç,ç,Ə,ə)?

例如:

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); 
System.out.println(ks.getKeyCode()); 
Output : 246 
// So alt+0246='ö' 
//but if I convert 'ş' to keycode 
//Output is 351 . So alt+351= '_' and alt+0351= '_' 
//What is the Correct combination for 'ş'. same for 'Ş', 'ş','Ğ', 'ğ', 'İ', 'ı', 'Ə', 'ə' 

按鍵:

public void altNumpad(int... numpadCodes) { 
    if (numpadCodes.length == 0) { 
     return; 
    } 

    robot.keyPress(VK_ALT); 

    for (int NUMPAD_KEY : numpadCodes) { 
     robot.keyPress(NUMPAD_KEY); 
     robot.keyRelease(NUMPAD_KEY); 
    } 

    robot.keyRelease(VK_ALT); 
} 
+0

這些字符是否在BMP之外? – fge

+0

從[此鏈接](http://www.fileformat.info/info/unicode/char/015f/index.htm),似乎在Windows下您應該使用Alt + 015F。我沒有Windows,所以我無法測試... – fge

+0

不起作用。謝謝 – Bertrand

回答

1

我不知道你爲什麼這樣做

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); 

因爲Java文檔說,

public static KeyStroke getKeyStroke(Character keyChar, 
       int modifiers) 
//Use 0 to specify no modifiers. 

您需要將超過0的修飾符傳遞給過載。

你應該嘗試通過修改一樣,

java.awt.event.InputEvent.ALT_DOWN_MASK 

所以應該嘗試,

KeyStroke ks = KeyStroke.getKeyStroke('ö', java.awt.event.InputEvent.ALT_DOWN_MASK); 

Java文檔作爲參考:http://docs.oracle.com/javase/7/docs/api/javax/swing/KeyStroke.html#getKeyStroke(char)

如果不能正確地得到一個輸出那麼你應該考慮的事實是字符是UTF-8 這可能會幫助你在這方面,Java, Using Scanner to input characters as UTF-8, can't print text

2

字符數字在Unicode標準中是defiunied。這些也用於HTML,因此您可以使用this table

無論如何,如果您看到源代碼中的字符取決於編輯器正確解釋文件(首選UTF-8)的事實。

其次使用的編輯器必須安裝包含這些字符的字體。因此,如果您輸入alt + 0351並獲取和'_',則這可能只是一個替代字符,表示字體遺漏了此字符。

最後,您應該告訴Java編譯器,源代碼是UTF-8 - 只是爲了確保(javac -encoding utf8)。

0

我知道這是一個遲到的答案,但這裏是我如何處理這個問題的土耳其QWERTY鍵盤

static void writeRobotWrite(Robot robot, String keys) throws InterruptedException { 
    .... 
     try { 
      robot.keyPress(keyCode); 
      robot.delay(20); 
      robot.keyRelease(keyCode); 
      robot.delay(20); 
     }catch (IllegalArgumentException e) 
     { 
      pressUnicode(c, robot); 
     } 

    } 
} 

基本上當我得到未定義鍵代碼,機器人我打電話pressUnicode功能是:

static void pressUnicode(char c, Robot robot) 
{ 
    String cantRecognize = ""+c; 
    StringSelection selection = new StringSelection(cantRecognize); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selection, null); 
    robot.keyPress(KeyEvent.VK_CONTROL); 
    robot.keyPress(KeyEvent.VK_V); 
    robot.keyRelease(KeyEvent.VK_V); 
    robot.keyRelease(KeyEvent.VK_CONTROL); 
} 

只是我只是複製和粘貼角色。這適用於所有未定義的字符。 :)

相關問題