代码之家  ›  专栏  ›  技术社区  ›  MrSnowflake

从Java(或其他平台)发送字符串到应用程序

  •  1
  • MrSnowflake  · 技术社区  · 16 年前

    我想把用手机读的条形码发送到我的电脑上。我的电脑有一个简单的服务器在运行,它可以监听条形码。当条形码到达时,服务器应用程序应该能够将接收到的条形码的值输入到活动的应用程序中(我不太关心哪个应用程序将得到输入,用户应该能够选择gedit、终端窗口或浏览器(如果他们选择)。

    我目前的语言是GNU/Linux(Ubuntu)上的Java,所以我知道机器人类。但是robot类模拟键盘,这意味着:当您在美国键盘布局上发送vk_1时,输出确实是“1”,但当您在另一个布局(如我使用的比利时语)上发送vk_1时,需要为“1”键进行移位,输出是“amp;”(这是“1”键上的字符,如果您不按住SHIFT键)。

    我还找到了xsendkeys,但这个应用程序也要求您指定是否需要按住shift。因此,它可以发送一个“A”,但对于“A”(因此资本),您需要指定您希望用“A”保持轮班。

    对于GNU/Linux和Windows来说,仅仅使用字符串是不是有一种简单的方法可以做到这一点?我希望能够将“12A68DD”发送到活动应用程序。我还希望能够向活动应用程序发送UTF-8字符。

    我一直在寻找一个解决方案,但大多数都需要在多个按键中进行分解,这通常取决于键盘布局。

    4 回复  |  直到 16 年前
        1
  •  1
  •   dimitarvp    16 年前

    似乎您希望能够将任意键盘序列发送到 任何 可能的应用。由于我不能帮助你(你应该寻找“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重定向。

        2
  •  1
  •   Phil J. Laszkowicz    16 年前

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

    答案就是否定。

    关键的笔画不同于人物(我想你可能已经知道了),而机器人只是用来调用关键的笔画。由于大多数键盘使用的键盘不符合键盘的ISO标准,因此这些按键的输出通常是不同的。

    但是,通过API、文件IO等,通常还有其他方法来实现相同的影响。

        3
  •  0
  •   mikek    16 年前

    我可能没有完全掌握你的问题,但你想把应用程序都用Java编写来交换信息吗?我建议你读一下RMI,它的存在就是为了这个目的。

        4
  •  0
  •   MrSnowflake    16 年前

    只是想让你知道我的解决方案:

    调用XVKBD——Java中的文本,并将要写入的文本作为参数。如果文本包含空格,我会多次调用xvkbd,并在其中调用xvkbd-text\[space]。

    我目前的方法很容易“移植”到Windows,所以用sendkeys-vb应用程序运行不会太困难。

    谢谢大家的帮助!