Java:运行全屏应用程序时使用Robot

Java:运行全屏应用程序时使用Robot,java,awt,fullscreen,awtrobot,Java,Awt,Fullscreen,Awtrobot,我对Java中的Robot类有一个问题:当我运行全屏游戏时,它有时不起作用。这是我的密码: Toolkit tlkt = Toolkit.getDefaultToolkit(); Robot bot = new Robot(); while(true) { Thread.sleep(3000); tlkt.beep(); //make sure that program still runs bot.mousePress(MouseEvent.BUTTON1_DOWN_M

我对Java中的Robot类有一个问题:当我运行全屏游戏时,它有时不起作用。这是我的密码:

Toolkit tlkt = Toolkit.getDefaultToolkit();
Robot bot = new Robot();
while(true) {
    Thread.sleep(3000);
    tlkt.beep(); //make sure that program still runs
    bot.mousePress(MouseEvent.BUTTON1_DOWN_MASK);
    bot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
}
我想每3秒钟左键点击一次,然后肯定会发出嘟嘟声。它工作得很好,但当我运行一些全屏应用程序时,它只会发出嘟嘟声,而不会单击

我已经尝试将Robot声明移动到循环中,因此每次都会创建新的Robot,但没有成功


我已经在5个不同的游戏上试过了,其中3个游戏即使全屏也能正常工作,但在第2个游戏上它不工作,只发出嘟嘟声。有什么帮助吗?

假设您在Windows机器上,对
java.awt.Robot
的调用被重定向到
sun.awt.Windows.WRobotPeer
,后者反过来调用
awt\u Robot.cpp
中的本机代码。您可以在此处查看
awt\u Robot.cpp
的源代码:

在这里,您可以看到鼠标事件是通过win32调用
鼠标事件(…)
(在winuser.h中定义)实现的

因此,您的机器人鼠标单击调用受到
鼠标事件(…)
的限制

然后在谷歌上搜索一下,就会发现有些游戏有某种宏观保护机制。他们忽略
鼠标事件(…)
路由方法并直接与驱动程序对话。例如,Hackshield为许多游戏提供了这样的保护机制。
这就是为什么有些游戏没有收到你的机器人鼠标点击的原因。

好吧,我想安装一个可以与我的java程序通信的鼠标驱动程序会非常痛苦?据我所知,例如Hackshield,它安装并使用自己的驱动程序。好吧,让我们试试这个:让我们假设我想要一个由java程序控制的虚拟鼠标,但它的行为会像绝对正常的鼠标一样,像触摸板或实际的鼠标。如果我点击“控制面板->设备->鼠标”,我会在其他鼠标设备中看到它。这可能吗?我不确定,你需要检查一下。同时,您可以检查游戏安装文件夹中是否有名为HShield的文件夹。如果你能找到,那我们就走上正轨了。