2010-03-10 3 views
1

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

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

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

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

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

+0

Последующие действия: Как это нелегко сделать, может ли пользовательский модуль ядра клавиатуры быть более простым решением? Наверное, нет, но было бы здорово закодировать его. Но опять же, в школе они сказали нам: модули ядра могут сжечь ваш процессор. (Не знаю, правда ли это, или у вас действительно есть tu f * ck it up). Поэтому я не очень склонен это делать. – MrSnowflake

ответ

0

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

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

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

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

0

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

+0

Это не идея :). У меня есть одно приложение Java на сервере, которое должно посылать нажатия клавиш любому другому возможному приложению. Часть сервера только там, чтобы фактически получить штрих-коды от моего мобильного телефона. Но спасибо за ваше время. – MrSnowflake

+0

А, я не уверен, что это выполнимо ... и, вероятно, это будет не очень элегантно. Если все приложения связаны с webservices, с другой стороны, тогда вы просто денди. – mikek

+0

Конечно, это выполнимо, ваш драйвер клавиатуры/модуль ядра делает это :). Хотя я надеялся, что это будет легко, например, примеры Visual Basic SendKeys, плавающие вокруг интернетов. – MrSnowflake

1

Похоже, вы хотите, чтобы иметь возможность отправить произвольную последовательность клавиш на любое возможное приложение. С этим я не могу вам помочь (вы должны искать «Автоматизацию тестирования 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, другими словами.

+0

Это будет работать только для консольных приложений нет? Моя идея - заставить сервер вводить некоторый штрих-код в поле ввода веб-формы или, возможно, в текстовом редакторе. Спасибо за подсказку, хотя, я посмотрю на автоматизацию тестирования. – MrSnowflake

+0

Как сказал другой плакат, короткий ответ: вы просто не можете предоставить вход для любого возможного приложения. * Это просто невозможно не только для Java, но и для всего ИТ-сектора *. Именно поэтому люди разрабатывают всевозможные протоколы (например, WebServices, RMI, IIOP, чтобы назвать лишь некоторые из них), чтобы их приложения могли «говорить» с другими приложениями, которые «понимают» эти протоколы (думают об этом как о человеческом языке; должен сначала изучать японский язык, если вы хотите его слушать и понимать). Все инструменты тестирования автоматизации пользовательского интерфейса, которые вы можете найти, будут привязаны к определенному набору инструментов OS или GUI. Вы были предупреждены. :) – dimitarvp

+0

... и btw, нет, это не будет работать только для консольных приложений. * Это будет работать для всех приложений, которые действительно читают свой поток stdin *. Каждое приложение имеет потоки stdin/stdout/stderr, даже графические приложения (без консольного интерфейса), но не все они на самом деле читают/записывают потоки. – dimitarvp

1

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

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

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

Есть часто другие способы достижения того же влияет, хотя, через API-интерфейсы, файл ввод-вывод и т.д.

Смежные вопросы