【发布时间】:2013-06-24 08:47:42
【问题描述】:
目前我正在尝试让 java 按住如下键:
Robot rob;
rob.keyPress(KeyEvent.VK_ENTER);
Thread.sleep(3000);
rob.keyRelease(KeyEvent.VK_ENTER);
这应该按住 enter 3 秒钟,在一秒钟左右后产生重复效果。换句话说,如果您要手动按住“r”键,它会首先键入 r,然后大约一秒钟后它会变成 rrrrrrrr。我想要机器人的这种效果。我也试过了:
curTime = System.currentTimeMillis();
while(System.currentTimeMillis() - curTime < duration)
{
rob.keyPress(whatever);
}
rob.keyRelease(whatever);
然而,这是非常敏感的,并且持续时间为 1 秒输出......好吧,你的计算机在 1 秒内可以输出多少。价值数千行。这不是我的本意。有任何想法吗?谢谢!
附:我想要这种行为的原因是因为我正在编写一个小脚本语言来自动化游戏。如果我想像正常人一样按住向上箭头键,我认为我需要我正在谈论的行为。
编辑:
由于似乎有些混乱,我很抱歉。让我详细说明。在我的第一个代码中,如果我选择“r”作为字符,无论持续时间如何,它都会打印一个 r。如果您在键盘上按“r” 5 秒钟,它将变为 -> r...rrrrrrrrrrrrrrrr 其中 ... 表示像一秒钟的时间。那是我想要的行为,但我不会得到它。第二个代码是我尝试垃圾邮件单击“按”的地方,但每次执行时都会输入“r”。所以如果我在一个定时循环中持续一段时间,每次循环迭代它都会发送“r”按钮。那不是我想要的。同样,我想要的结果与您在键盘上按下 r 3 秒时会发生相同的结果。首先它只有一个 r,然后是 rrrrrrrrrrrrrrrrrrrrrr。我什至不确定 release() 方法是做什么的......我想如果你在没有释放的情况下将它留在新闻中,它只会在循环中向屏幕发送垃圾邮件!为什么不呢,钥匙被按下了?这让我感到困惑。显然,当按下一个键时,它不会一直按下。
【问题讨论】:
-
你没有告诉我们你的代码是什么或如何不工作的。
-
我可以验证一下,您当前的代码是否产生重复字符?我的测试没有
-
@MadProgrammer:你是对的。问题是机器人没有
keyDown()方法。我想这可以通过 JNI 或 JNA 以依赖于平台的方式完成。 -
我假设 keyPress() 是 keyDown(),因为有一个 keyRelease()。嗯
-
我会推荐使用 AutoHotKey。这是一个选择吗?