【问题标题】:How to programmatically send a key event to any window/process in a Java App?如何以编程方式将关键事件发送到 Java 应用程序中的任何窗口/进程?
【发布时间】:2015-12-14 23:14:40
【问题描述】:

使用 Java 应用程序,我如何以编程方式将关键事件(字母、数字、标点符号、箭头等)发送/触发到同一台机器上的窗口/进程?

【问题讨论】:

    标签: java process window keyevent


    【解决方案1】:

    假设您知道该窗口的位置,您可以使用java.awt.Robot

    这会在屏幕上覆盖 10,50 的任何窗口中键入 a。

    Robot r = new Robot();
    r.mouseMove(10, 50);
    r.mousePress(InputEvent.BUTTON1_MASK);
    r.mouseRelease(InputEvent.BUTTON1_MASK);
    r.keyPress(KeyEvent.VK_A);
    r.keyRelease(KeyEvent.VK_A);
    

    如果您知道一个窗口在 10,400 时覆盖 10,50,另一个在 400、400 时覆盖,那么这将在不同的窗口中键入 x y 和 z。在我的测试中,我还需要一些延迟才能移动以使其更可靠。

    Robot r = new Robot();
    r.mouseMove(10, 50);
    r.mousePress(InputEvent.BUTTON1_MASK);
    r.mouseRelease(InputEvent.BUTTON1_MASK);
    Thread.sleep(500);
    r.keyPress(KeyEvent.VK_X);
    r.keyRelease(KeyEvent.VK_X);
    Thread.sleep(500);
    r.mouseMove(10, 400);
    Thread.sleep(500);
    r.mousePress(InputEvent.BUTTON1_MASK);
    r.mouseRelease(InputEvent.BUTTON1_MASK);
    Thread.sleep(500);
    r.keyPress(KeyEvent.VK_Y);
    r.keyRelease(KeyEvent.VK_Y);
    Thread.sleep(500);
    r.mouseMove(400, 400);
    Thread.sleep(500);
    r.mousePress(InputEvent.BUTTON1_MASK);
    r.mouseRelease(InputEvent.BUTTON1_MASK);
    r.keyPress(KeyEvent.VK_Z);
    r.keyRelease(KeyEvent.VK_Z);
    

    【讨论】:

    • 谢谢威尔!这很有帮助。
    • 假设我在我的电脑上打开了 3 个窗口。我正在寻找一种将键“x”发送到窗口#1,将键“y”发送到窗口#2,将键“z”发送到窗口#3 的方法。
    • @android-user 假设窗口不是基于 Java 的(或在同一个 JVM 中),您将需要一个本机实现来查找窗口及其位置,例如 exampleexample , exampleexample
    猜你喜欢
    • 2010-10-09
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2020-04-10
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多