gpt4 book ai didi

java - 机器人 keyPress 在 linux 中不工作

转载 作者:搜寻专家 更新时间:2023-11-01 03:56:47 24 4
gpt4 key购买 nike

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

keyPress(KeyEvent.VK_WINDOWS) 它不工作。

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

P.S:我什至尝试过 Event.META_MASK 但没有成功

最佳答案

使用 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映射到 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);

}

}

我运行 konsole 的系统快捷方式不是通过使用 Robotmeta+z 触发的。

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

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

尝试使用 OpenJDK 运行 RobotTest 并没有产生任何更好的结果。

关于java - 机器人 keyPress 在 linux 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18912556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com