2013-06-18 6 views
1

Я пытаюсь сделать метод ввода Robot намного проще. Большинство кодов ключей в KeyEvent являются шестыми кодами.Char to Hex параметр

план:

  1. String к char[]
  2. для-каждого через находят шестнадцатеричное значение (int)char
  3. Keypress (шестнадцатеричное значение (int)char)
  4. keyRelease (шестнадцатеричное значение char[]
  5. (int)char)

То, что я до сих пор:

import java.awt.*; 
import java.awt.event.*; 
public class Driver 
{ 
    private static Robot r; 
    public static void send(String phrase) 
    { 
     char[] chars = phrase.toCharArray(); 
     for (char letter:chars) 
     { 
      //int hex = hex value of (int)letter 
      //r.keyPress(hex); 
      //r.keyRelease(hex); 
     } 
    } 
    public static void main(String[]args) 
    { 
     try 
     { 
      r = new Robot(); 
      r.delay(5000); 
      send("Hello World"); 
     } 
     catch(AWTException e) 
     { 
      //Nothing 
     } 
    } 
} 
+2

Пожалуйста, укажите конкретный проблема с вашим кодом, как есть. Чего вы хотите добиться, чтобы ваш код в настоящее время не работает? – fge

+0

Вам нужна шестнадцатеричная строка или вам нужно только целое значение? Если вы используете символы ASCII, вы можете использовать char в int. –

+0

keyPress должен принять параметр, который выглядит как 0x41 для его нажатия. Мне нужно выяснить способ превращения символа в шестнадцатеричный. И я не могу передать строку. поэтому он должен выглядеть как keyPress (0x4b); –

ответ

1

Кодовые ключи для ASCII букв равна их заглавной значения полукокса. Таким образом, вы можете сделать следующее:

char[] chars = phrase.toUpperCase().toCharArray(); 
for (char letter:chars) 
{ 
    int keyCode = (int)letter; 
    r.keyPress(keyCode); 
    r.keyRelease(keyCode); 
} 

С помощью этого цикла, строка «Hello World» даст «привет мир». Это не работает для таких вещей, как восклицательные знаки.

Кроме того, если вы не хотите, чтобы робот отправлял заглавные буквы, вам нужно будет имитировать нажатие на клавишу смены или на клавишу блокировки колпачков.

Не уверен, что этот метод является надежным. Вы также можете много сделать, если/else (или переключатель), чтобы вернуть правильную константу кода ключа из java.awt.event.KeyEvent.

+0

Не совсем такой ответ I искал, но я чувствую, что это самое близкое, что я получу. Я действительно просто хотел узнать, как передать шестнадцатеричный параметр. Например, keyPress (0x4b). –

+0

0x4b - отлично полезная ценность, но это так же, как писать 75 или (int) 'K' –

+0

Итак, как бы я получил значение char для шестнадцатеричного значения, используя сделку + 'K'? –

1

Эта работа, но у нее возникли проблемы со специальными символами типа «Hello World é ç», см. Вывод.
Хотелось бы лучше использовать парадигму \ unnn UniCode.

 final char[] chars = phrase.toCharArray(); 
     for (final char c : chars) { 
      try { 
       final byte[] tabB = (c + "").getBytes("UTF-8"); 
// You can replace "UTF-8" by : System.getProperty("sun.jnu.encoding"), 
       for (final byte element : tabB) { 
        System.out.format("%s\t0x%s\n", element, 
          Integer.toHexString(element)); 
       } 
      } catch (final UnsupportedEncodingException e) { 
       // TODO Auto-generated catch block 
      } 
     } 

Выход:

72 0x48 
101 0x65 
108 0x6c 
108 0x6c 
111 0x6f 
32 0x20 
87 0x57 
111 0x6f 
114 0x72 
108 0x6c 
100 0x64 
32 0x20 
-61 0xffffffc3 
-87 0xffffffa9 
32 0x20 
-61 0xffffffc3 
-89 0xffffffa7 

с System.getProperty ("sun.jnu.encoding") -> ISO-8859-15 на моем компьютере

72 0x48 
101 0x65 
108 0x6c 
108 0x6c 
111 0x6f 
32 0x20 
87 0x57 
111 0x6f 
114 0x72 
108 0x6c 
100 0x64 
32 0x20 
-23 0xffffffe9 
32 0x20 
-25 0xffffffe7