Как сделать символы Unicode типа Java.awt.Robot? (Является ли это возможным?)

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

Как преобразовать строку в keyCodes, который будет использовать робот?
Как вы это делаете, так что это также независимая версия java (1.3 -> 1.6)?

То, что мы работаем для символов «ascii»,

//char c = nextChar(); //char c = 'a'; // this works, and so does 'A' char c = 'á'; // this doesn't, and neither does 'Ă' Robot robot = new Robot(); KeyStroke key = KeyStroke.getKeyStroke("pressed " + Character.toUpperCase(c) ); if( null != key ) { // should only have to worry about case with standard characters if (Character.isUpperCase(c)) { robot.keyPress(KeyEvent.VK_SHIFT); } robot.keyPress(key.getKeyCode()); robot.keyRelease(key.getKeyCode()); if (Character.isUpperCase(c)) { robot.keyRelease(KeyEvent.VK_SHIFT); } } 

Основываясь на коде javamonkey79, я создал следующий fragment, который должен работать для всех значений Unicode …

 public static void pressUnicode(Robot r, int key_code) { r.keyPress(KeyEvent.VK_ALT); for(int i = 3; i >= 0; --i) { // extracts a single decade of the key-code and adds // an offset to get the required VK_NUMPAD key-code int numpad_kc = key_code / (int) (Math.pow(10, i)) % 10 + KeyEvent.VK_NUMPAD0; r.keyPress(numpad_kc); r.keyRelease(numpad_kc); } r.keyRelease(KeyEvent.VK_ALT); } 

Это автоматически проходит через каждое десятилетие кода юникода, сопоставляет его с соответствующим эквивалентом VK_NUMPAD и соответственно нажимает / отпускает ключи.

Класс KeyEvent не имеет прямых отображений для многих classов Unicode в JRE 1.5. Если вы используете это в окне Windows, то вам может понадобиться написать собственный обработчик, который делает что-то вроде этого:

 Robot robot = new Robot(); char curChar = 'Ã'; // -- isUnicode( char ) should be pretty easy to figure out if ( isUnicode( curChar ) ) { // -- this is an example, exact key combinations will vary robot.keyPress( KeyEvent.VK_ALT ); robot.keyPress( KeyEvent.VK_NUMBER_SIGN ); robot.keyRelease( KeyEvent.VK_NUMBER_SIGN ); // -- have to apply some logic to know what sequence robot.keyPress( KeyEvent.VK_0 ); robot.keyRelease( KeyEvent.VK_0 ); robot.keyPress( KeyEvent.VK_1 ); robot.keyRelease( KeyEvent.VK_1 ); robot.keyPress( KeyEvent.VK_9 ); robot.keyRelease( KeyEvent.VK_9 ); robot.keyPress( KeyEvent.VK_5 ); robot.keyRelease( KeyEvent.VK_5 ); robot.keyRelease( KeyEvent.VK_ALT ); } 

например, выяснить, каковы они ключевые комбинации, а затем сопоставить их с каким-то объектом Object (возможно, HashMap?) для последующего поиска и выполнения.

Надеюсь это поможет 🙂

я думаю, что это немного поздно, но …

 Robot robot = new Robot(); robot.keyPress( KeyEvent.VK_DEAD_ACUTE); robot.keyPress( KeyEvent.VK_A ); robot.keyRelease( KeyEvent.VK_A ); robot.keyRelease( KeyEvent.VK_DEAD_ACUTE ); 

что просто введите “á”

Является ли это работающим, я попробовал то же самое в ноутбуке, похоже, не помогает мне вводить символы юникода, используя java-робот. больше свет для того же.

Лучший способ, который я нахожу при решении проблемы simulare

 import java.awt.AWTException; import java.awt.Robot; public class MyRobot { public static void typeString(String s) { try { Robot robik = new Robot(); byte[] bytes = s.getBytes(); for (byte b : bytes) { int code = b; // keycode only handles [AZ] (which is ASCII decimal [65-90]) if (code > 96 && code < 123) code = code - 32; robik.delay(40); robik.keyPress(code); robik.keyRelease(code); } } catch (AWTException e){ } } } 

http://www.devdaily.com/java/java-robot-class-example-mouse-keystroke \

  • Хороший шрифт для символов Unicode
  • Ручное преобразование кодов Unicode в UTF-8 и UTF-16
  • Как преобразовать wstring в строку?
  • Преобразование ascii с русского на русский?
  • Как правильно декодировать параметры юникода, переданные в сервлет
  • Световая библиотека Unicode
  • Действительно хорошие, плохие примеры тестовых данных UTF-8
  • Как ввести специальные символы в Linux?
  • Как отображать символы UTF-8 в phpMyAdmin?
  • Проблемы с символами UTF-8; я не вижу того, что я хранил
  • Каким персонажем это (𝒲)
  • Давайте будем гением компьютера.