【问题标题】:Cannot send keystrokes to VM on hyper-V using JAVA无法使用 JAVA 在 hyper-V 上向 VM 发送击键
【发布时间】:2015-01-06 14:23:33
【问题描述】:

我必须将击键发送到虚拟机。任务是重复的(我必须每天做 3-4 次),但可以通过发送按键轻松模拟。 实际上,我的虚拟机只有终端窗口(基于 Linux)运行 SSH 会话。

我编写了一个小型 java 测试程序来发送击键。

public class TestRobot1 {

    static int keyInput[] = {
        KeyEvent.VK_H, KeyEvent.VK_E,
        KeyEvent.VK_L, KeyEvent.VK_L,
        KeyEvent.VK_O, KeyEvent.VK_ENTER,
    };

    public static void main(String[] args) throws InterruptedException, AWTException {
        Thread.sleep(5000);
        Robot robot =  new Robot();
        for(int i = 0; i < keyInput.length; i++){
             robot.keyPress(keyInput[i]);
             robot.delay(10);
             robot.keyRelease(keyInput[i]);
             robot.delay(10);
        }
    }
}

该程序在记事本上成功运行,VM在Oracle Virtual Box中启动通过SSH Session访问。但是它在从 hyper-V 启动 VM 时不会运行,虽然我可以通过 SSH 连接到那里,然后我可以运行程序。

我必须选择应该运行它的窗口,这就是为什么我包含 5 秒等待,以便我可以及时选择正确的窗口。我知道这不是很好,但它是一个测试程序。

【问题讨论】:

  • 尝试在keyPress()之后增加延迟
  • 已经试过了。没有成功。此外,如果是这样的话,至少会记录第一次击键。
  • 当您聚焦远程桌面窗口时,您在哪里执行单击操作:在窗口标题上还是在远程计算机上运行的记事本上?尝试点击记事本,甚至尝试手动输入以确保它确实是焦点。
  • 刚才试过了。还是一样。

标签: java ssh virtual-machine hyper-v


【解决方案1】:

我没有使用 hiper-v,但我使用的是常规远程桌面。但是,我使用机器人本身执行了单击以将焦点集中在窗口上。试试这个技巧。作为参考,请查看https://github.com/alexradzin/TypeToPaste

这里是 TypeToPaste 网站:https://sites.google.com/site/typetopaste/

我建议下载此应用程序并尝试一下。如果它有效,请检查它的代码。否则对不起……

无论如何,请告诉我进展如何。我很好奇……

【讨论】:

  • 您给定的程序有效。谢谢!现在我必须看看我是否可以直接使用它来满足我的需要,或者我应该通过你的代码。抱歉回复晚了,但我只能在办公室使用 hyper-v。
  • NP,很高兴听到您取得了进展。学习代码。它并不太复杂,恕我直言,有据可查。如果您有问题,请随时提出问题。
猜你喜欢
  • 2018-07-18
  • 2016-08-12
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
相关资源
最近更新 更多