我曾多次使用Robot类,但我在Windows中没有遇到任何问题。 但这次我正在使用Fedora,如果我尝试
keyPress(KeyEvent.VK_WINDOWS)
它不起作用。
如何在linux(Fedora)中模拟按Windows键?
P.S:我甚至试过Event.META_MASK
但没有运气
答案 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
并没有产生更好的效果。