我想发送条形码,用我的手机阅读,发送到我的电脑。我的计算机运行一个简单的服务器,它监听条形码。当条形码到达时,服务器应用程序应该能够将接收到的条形码的值输入到活动应用程序中(我真的不关心哪个应用程序将获得输入,用户应该能够选择gedit,终端窗口或浏览器,如果他们选择)。
目前我的语言是GNU / Linux(Ubuntu)上的Java,所以我知道Robot类。但Robot类模拟键盘,这意味着:当你在美国键盘布局上发送VK_1时,输出确实是“1”,但是当你在另一个布局上发送VK_1时(比如我使用的比利时),这需要转换为'1'键,输出为'&' (这是'1'键上的字符,当你不保持移位时)。
我也找到了xsendkeys,但是这个应用程序也要求你指定是否需要保持shift。因此,它将能够发送'a',但是对于'A'(因此是资本),您需要指定您想要使用'a'保持转移。
对于GNU / Linux和Windows,只是使用字符串,没有一种简单的方法可以做到这一点。我希望能够将“12a68dd”发送到活动应用程序。我还希望能够将UTF-8字符发送到活动应用程序。
我一直在寻找解决方案,但大多数都需要多次击键细分,这通常取决于键盘布局。
答案 0 :(得分: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重定向。
答案 1 :(得分:1)
如果我理解正确,您希望将一系列字符发送到另一个应用程序(目的地)。此目标可以是任何应用程序,您可能无权访问其源代码。
答案是否定的。
击键与角色不同(我认为你可能已经解决了),而Robot只是为了调用击键。这些击键的结果输出通常是不同的,因为大多数键盘使用的键盘不符合ISO标准。
通过API,文件IO等,通常还有其他方法可以实现相同的效果。
答案 2 :(得分:0)
我可能没有完全理解你的问题,但你想分开用Java编写的应用程序来交换信息?我建议你阅读RMI,这是非常有目的的。
答案 3 :(得分:0)
只是想让你知道我的解决方案:
从java调用xvkbd -text并将文本作为参数写入。如果文本包含空格,我会在xvkbd -text \ [space]调用中多次调用xvkbd。
我目前的方式很容易“移植”到Windows,因此不会太难以使用SendKeys VB应用程序运行。
感谢大家的帮助!