Java Robot 关键活动在某些软件运行时似乎停止工作

问题描述 投票:0回答:2

我正在编写一个 Java 应用程序,用于在一夜之间自动执行在线游戏中的角色动作(具体来说,它在《最终幻想 XI》中抓鱼)。该应用程序大量使用 java 的 Robot 类来模拟用户键盘输入和检测屏幕某些部分的颜色变化。它还使用多线程和 swing GUI。

当我在没有运行游戏的情况下测试它时,该应用程序似乎工作得很好,只需使用屏幕截图来触发应用程序对记事本的响应。但由于某种原因,当我真正启动 FFXI 并启动程序时,我所有的键盘和鼠标操作都完全停止工作。程序仍在运行,Robot 类仍然能够读取像素颜色。但是Robot.keyPress、Robot.keyRelease、Robot.mouseMove、Robot.mousePress 和Robot.mouseRelease 都不执行任何操作。这是最奇怪的事情 - 为了测试它,我编写了一个简单的循环,它只是不断输入字母,并聚焦记事本。然后我开始游戏,重新聚焦记事本,但它什么也没做。然后我退出游戏,它会立即重新开始工作。

还有其他人遇到过这样的事情吗,特定的软件会阻止java的某些功能工作?

另外,为了让这更有趣——去年我编写了一个非常相似的程序,使用相同的类和编程技术来自动治疗游戏中战斗的一方。去年,这个计划运行得非常完美。遇到这些问题后,我挖出了那个旧程序,在不做任何更改的情况下运行它,发现它也有同样的问题。现在和工作时的唯一区别是:我运行的是 Windows Vista,现在运行的是 Windows 7,并且已经发布了几个新的 Java 版本以及 FFXI 版本。

发生什么事了?

java mouseevent keyboard-events awtrobot
2个回答
3
投票

FFXI 有防止作弊的代码。看起来相当有效。


0
投票

如果可能的话,在WinXP中尝试一下。我自己也为在线游戏编写了一个机器人,它使用了许多相同的概念(即使用 Java Robot 读取像素颜色并模拟按键和鼠标点击)。

在WinXP下: 机器人在所有情况下都能按预期工作。

Win7下: 在游戏之外,机器人按预期工作。游戏中,模拟输入失败(我认为像素读取还可以)。

© www.soinside.com 2019 - 2024. All rights reserved.