gpt4 book ai didi

java - 用 Java Robot 模拟按键类型

转载 作者:行者123 更新时间:2023-11-30 07:29:22 25 4
gpt4 key购买 nike

我写了一个方法来模拟 KeyEvent 中的按键,如下所示:

private Robot robot(){
if(robot==null){
try {
return new Robot();
} catch (AWTException e) {
throw new RuntimeException("Failed to create instance of Robot");
}
}else{
return robot;
}
}

public void sendKeyEvent(KeyEvent evt) throws IOException {
int type = evt.getID();
if(type == KeyEvent.KEY_PRESSED){
if(evt.isShiftDown()){
robot().keyPress(KeyEvent.VK_SHIFT);
}
robot().keyPress(evt.getKeyChar());
}else if(type == KeyEvent.KEY_RELEASED){
robot().keyRelease(evt.getKeyChar());
if(evt.isShiftDown()){
robot().keyRelease(KeyEvent.VK_SHIFT);
}
}
}

当此方法接收到按下“A”键事件时,它可以键入“A”。

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='A',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_UNKNOWN]]

但问题是当它收到这个 KeyEvent(按 'a')时,它实际上按下了“1”。

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='a',keyLocation=KEY_LOCATION_UNKNOWN]]

谁能告诉我这个方法有什么问题吗?

最佳答案

这有点棘手和令人困惑,您感到困惑。

没有“大写 a”和“小写 a”键事件。只有“A/a”事件,您可以使用或不使用 SHIFT 修饰符。

恰好 VK_A 到 VK_Z 与 ASCII“A”到“Z”相同,但“a”到“z”则不同。

当您重新发送从 getKeyChar() 获得的“a”(ASCII 0x61,又名 97)时,您实际上发送的是 VK_NUMPAD1,这就是为什么您得到 ' 1'。

getKeyChar 的 JavaDoc 是这样说的:

getKeyChar() Returns the character associated with the key in this event. For example, the KEY_TYPED event for shift + "a" returns the value for "A"

因此,当您尝试使用“A”时,您会返回 VK_A,并且一切如您所愿。但是,当您简单地键入“a”时,您会得到 0x61,这不是您想要的。

据我所知,将 getKeyChar() 更改为 getKeyCode() 会解决您的问题。

那就是说我不会乱用 KEY_PRESS/KEY_RELEASED。我只是从那里拦截 KEY_TYPED 和“机器人”。

关于java - 用 Java Robot 模拟按键类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546048/

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