2010-03-10 70 views
1

我想用我的手机发送条形码到我的电脑。我的电脑有一个简单的服务器运行,它监听条码。当条形码到达时,服务器应用程序应该能够将接收到的条形码的值输入到活动应用程序中(我并不关心哪个应用程序将获得输入,用户应该能够选择gedit,终端窗口或浏览器如果他们选择)。从java(或其他平台)发送字符串到应用程序

我的语言目前是GNU/Linux(Ubuntu)上的Java,所以我知道Robot类。但是Robot类模拟键盘,这意味着:当您在美国键盘布局上发送VK_1时,确实输出为'1',但是当您在另一个布局(比如我使用的比利时语)上发送VK_1时,需要进行移位'1'键,输出'&'(这是'1'键上的字符,当你没有按住Shift键时)。

我也发现了xsendkeys,但是这个应用程序也要求你指定是否需要保持移位。所以它可以发送一个'a',但是发送一个'A'(因此大写),你需要指定你想用你的'a'进行转换。

是不是一个简单的方法来做到这一点,对于GNU/Linux和Windows,只是使用字符串。我希望能够将“12a68dd”发送到活动应用程序。我也希望能够将UTF-8字符发送到活动应用程序。

我一直在寻找一个解决方案,但大多数需要按键击穿,这往往取决于键盘布局。

+0

跟进:因为做这件事并不容易,定制键盘内核模块会是一个更简单的解决方案吗?我想不是,但编码起来可能很有趣。但是再次,在学校他们告诉我们:内核模块可以烧你的CPU。 (不知道这是否是真的,或者你是否真的有这种感觉)所以我不太愿意这样做。 – MrSnowflake 2010-03-10 22:19:35

回答

0

只想让你知道我的sollution:

从Java调用输入xvkbd -text并给予文字作为论点。如果文本包含空格,我会在xvkbd -text \ [space]内调用xvkbd多次。

我目前的方式很容易“移植”到windows,所以不会太难以使用SendKeys VB应用程序运行。

谢谢大家的帮助!

0

我可能没有完全掌握你的问题,但是你想分开用Java编写的应用程序来交换信息吗?我建议你阅读关于RMI的文章,这是为了达到目的。

+0

这不是主意:)。我有一个Java应用程序的服务器,它应该发送击键到任何其他可能的应用程序。服务器部分仅用于从我的手机实际接收条形码。 但谢谢你的时间。 – MrSnowflake 2010-03-10 13:09:13

+0

啊,我不确定这是可行的...它可能不会很优雅。如果所涉及的所有应用程序都是Web服务,那么您只是喜欢。 – mikek 2010-03-10 16:08:02

+0

当然这是可行的,你的键盘驱动程序/内核模块这样做:)。尽管我希望这很容易,就像在Internet上传输的Visual Basic SendKeys示例一样。 – MrSnowflake 2010-03-10 22:21:46

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 2010-03-10 13:10:07

+0

正如另一张海报所说,简短的回答是你不能提供任何可能的应用程序的输入。 *这不仅对于Java而言,而且对整个IT行业来说都是不可能的。这就是为什么人们正在开发各种协议(比如Web服务,RMI,IIOP等),以允许他们的应用程序“向”理解“这些协议的其他应用程序”发言“(将其视为人类语言;您首先应该学习日语,如果你想听并理解它)。您可能会发现任何UI自动化测试工具都将绑定到特定的操作系统或GUI工具包。你被警告了。 :) – dimitarvp 2010-03-10 14:07:18

+0

...和顺便说一句,不,这不会仅用于控制台应用程序。 *这将适用于所有真正阅读stdin流*的应用程序*。每个应用程序都有stdin/stdout/stderr流,即使是GUI应用程序(没有控制台界面),但并非所有应用程序都在读取/写入流。 – dimitarvp 2010-03-10 14:09:02

1

如果我理解正确,您希望将一系列字符发送到另一个应用程序(目标)。这个目标可能是任何应用程序,并且您可能无法访问其源代码。

答案根本不是。

关键笔划不同于字符(我收集你可能已经计算出来)和机器人仅用于调用击键。这些击键的输出结果通常是不同的,因为大多数使用的键盘不遵循键盘的ISO标准。

经常有完成相同的其他方式影响,虽然,通过API,文件IO等

相关问题