机器人keyPress不在linux中工作

时间:2013-09-20 08:53:46

标签: java

我曾多次使用Robot类,但我在Windows中没有遇到任何问题。 但这次我正在使用Fedora,如果我尝试

keyPress(KeyEvent.VK_WINDOWS)它不起作用。

如何在linux(Fedora)中模拟按Windows键?

P.S:我甚至试过Event.META_MASK但没有运气

2 个答案:

答案 0 :(得分:0)

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_L);
robot.keyRelease(KeyEvent.VK_L);
robot.keyRelease(KeyEvent.VK_ALT);
robot.keyRelease(KeyEvent.VK_CONTROL);

在linux中,windows键被视为ctrl + alt

答案 1 :(得分:-1)

使用this question第一个答案的编辑版本:

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class Sample implements KeyListener {
    private JLabel label = new JLabel("Hello");
    private JPanel panel = new JPanel(new BorderLayout());
    private JFrame frame = new JFrame("Sample");

    public Sample() {
        panel.add("North", label);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
        panel.addKeyListener(this);
        frame.addKeyListener(this);
        label.addKeyListener(this);
        pnl.setVisible(true);

    }

    public static void main(String[] args) {
        new Sample();
    }

    @Override
    public void keyPressed(KeyEvent key) {
        System.out.println(key.getExtendedKeyCode());
        System.out.println(key.getKeyCode());
        System.out.println(key.getModifiers());
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
}

您可以使用此程序检查KeyEvent密钥代码中的任何密钥。对我来说(Fedora 19 x86_64,Oracle Java 1.7.0_40 x86_64), meta 键确实映射到 524 ,根据constant values lookup table映射到{ {1}}

现在问题是,当您尝试通过VK_WINDOWS

按键时
java.awt.Robot

使用import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; public class RobotTest { public static void main(String[] args) { Robot r = null; try { r = new Robot(); } catch (AWTException e) { e.printStackTrace(); } r.setAutoDelay(250); r.keyPress(KeyEvent.VK_WINDOWS); r.keyPress(KeyEvent.VK_Z); r.keyRelease(KeyEvent.VK_Z); r.keyRelease(KeyEvent.VK_WINDOWS); } } meta + z ,无法触发运行konsole的系统快捷方式。

我猜AWT或Robot本身在某种程度上错误地处理了 meta 键。也许Java尚未达到Linux中 Windows 键的使用标准 - 例如在Gnome Shell键盘快捷键中。

我个人会尽量不使用它,或尝试不同的框架,例如。 Eclipse SWT。

尝试使用OpenJDK运行Robot并没有产生更好的效果。