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

时间:2012-05-23 15:22:11

标签: 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_MASK);
    bot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK);
}

我想每3秒左键点击一次并发出哔哔声。它工作正常,但是当我运行一些全屏应用程序时,它只是发出哔哔但没有点击。

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

我已经尝试了5种不同的游戏,其中3种即使使用全屏也能正常工作,但是在2种情况下它没有用,但只有蜂鸣。有什么帮助吗?

1 个答案:

答案 0 :(得分:4)

假设您使用的是Windows计算机,则java.awt.Robot来电的呼叫将重定向至sun.awt.windows.WRobotPeerawt_Robot.cpp会调用awt_Robot.cpp中的本机代码。您可以在此处查看mouse_event(...)的源代码:http://www.koders.com/cpp/fidFFE004659A9CAB3DA2B3302C457E624AF6F3EEDF.aspx?s=GetDIBits#L232

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

因此,您的机器人鼠标点击通话受限于mouse_event(...)的限制。

然后在网上搜索一下,发现有些游戏有某种宏观保护机制。他们忽略{{1}}路由方法并直接与驱动程序交谈。例如,Hackshield为许多游戏提供了这样的保护机制。 所以这就是为什么有些游戏没有收到你的机器人鼠标点击的原因。