我多次使用 Robot 类,但在 Windows 中我没有遇到任何问题。但这次我使用的是 Fedora,如果我尝试
keyPress(KeyEvent.VK_WINDOWS)
它不工作。
如何在 linux(Fedora) 中模拟按下 Windows 键?
PS:我什至尝试过Event.META_MASK
但没有运气
我多次使用 Robot 类,但在 Windows 中我没有遇到任何问题。但这次我使用的是 Fedora,如果我尝试
keyPress(KeyEvent.VK_WINDOWS)
它不工作。
如何在 linux(Fedora) 中模拟按下 Windows 键?
PS:我什至尝试过Event.META_MASK
但没有运气
使用此问题的第一个答案的编辑版本:
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)元键确实映射到524,根据常量值查找表映射到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
没有触发我的系统运行快捷方式。Robot
我猜是 AWT,或者Robot
它本身以某种方式错误地处理了元密钥。也许 Java 还没有达到 Linux 中Windows键的使用标准——例如在 Gnome Shell 键盘快捷键中。
我个人会尽量不使用它,或者尝试不同的框架,fe Eclipse SWT。
尝试RobotTest
使用 OpenJDK 运行并没有产生更好的结果。
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