Отправить строку из Java (или другой платформы) в приложение - PullRequest
1 голос
/ 10 марта 2010

Я хочу отправить штрих-код, прочитанный на моем мобильном телефоне, на мой компьютер. На моем компьютере работает простой сервер, который прослушивает штрих-коды. Когда приходит штрих-код, серверное приложение должно иметь возможность вводить значение полученного штрих-кода в активное приложение (меня не волнует, какое приложение получит ввод, пользователь должен иметь возможность выбрать gedit, терминал окно или браузер, если они захотят).

На данный момент мой язык - Java на GNU / Linux (Ubuntu), поэтому я знаю о классе Robot. Но класс Robot эмулирует клавиатуру, что означает: когда вы отправляете VK_1 на раскладке клавиатуры США, на самом деле вывод «1», но когда вы отправляете VK_1 на другой раскладке (например, бельгийский, который я использую), который требует сдвига для клавиша «1», вывод «&» (это символ клавиши «1», когда вы не удерживаете shift).

Я также нашел xsendkeys, но это приложение также требует, чтобы вы указали, нужно ли вам удерживать Shift. Таким образом, он сможет отправить «а», но для «А» (то есть заглавной буквы) вам нужно указать, что вы хотите удерживать смену с вашим «а».

Нет ли простого способа сделать это для GNU / Linux и Windows, просто используя строки? Я хочу иметь возможность отправить "12a68dd" в активное приложение. И я также хотел бы иметь возможность отправлять символы UTF-8 в активное приложение.

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

Ответы [ 4 ]

1 голос
/ 10 марта 2010

Похоже, вы хотите иметь возможность посылать произвольную последовательность клавиатуры в любое возможное приложение. В этом я не могу вам помочь (вам нужно искать «автоматизацию тестирования Java UI», чтобы найти подходящие инструменты), но если приложение, которое вы отправляете строку, прослушивает ее на своем стандартном входе, я бы выбрал:

// Example: send your string to "cat" (or "type" on Windows), which simply prints it.
Process spawned = ProcessBuilder.command("cat" /*No arguments*/).start();
spawned.getOutputStream().write(yourString.getBytes("UTF-8"));

Простое перенаправление stdin / stdout, другими словами.

1 голос
/ 10 марта 2010

Если я вас правильно понимаю, вы хотите отправить серию символов в другое приложение (пункт назначения). Это может быть любое приложение, и у вас может не быть доступа к его исходному коду.

Ответ просто нет.

Мазки клавиш различаются для символов (что, я полагаю, вы, вероятно, сработали), и Робот был предназначен просто для вызова нажатий клавиш. Результат этих нажатий клавиш, как правило, отличается, потому что большинство используемых клавиатур не соответствуют стандарту ISO для клавиатур.

Часто есть и другие способы добиться того же эффекта через API, файловый ввод-вывод и т. Д.

0 голосов
/ 12 марта 2010

Просто хотел, чтобы вы знали мое решение:

Вызвать xvkbd -text из java и дать текст, который будет записан в качестве аргумента. Если текст содержит пробелы, я вызываю xvkbd несколько раз с вызовом xvkbd -text \ [space] внутри.

Мой нынешний способ довольно легко «портировать» на окна, так что не составит труда запустить его с приложением SendKeys VB.

Спасибо всем за помощь!

0 голосов
/ 10 марта 2010

Возможно, я не полностью понял ваш вопрос, но вы хотите разделить приложения, написанные на Java, для обмена информацией? Я бы порекомендовал вам прочитать RMI, которая существует именно для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...