2012-05-23 43 views
4

我在Java中的Robot类中遇到问题:当我运行全屏游戏时,它有时不起作用。这里是我的代码:Java:在运行全屏应用程序时使用机器人

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秒钟左键单击一次并发出哔声。它工作正常,但是当我运行一些全屏应用程序时,它只是发出嘟嘟声,而不是点击。

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

我已经尝试过5种不同的游戏,其中3种甚至全屏都可以正常工作,但是它没有工作,但只有蜂鸣。任何帮助?

回答

4

假设你在Windows机器上,呼叫java.awt.Robot调用被重定向到sun.awt.windows.WRobotPeer,而该调用又调用awt_Robot.cpp中的本机代码。您可以检查这里的awt_Robot.cpp的源代码:http://www.koders.com/cpp/fidFFE004659A9CAB3DA2B3302C457E624AF6F3EEDF.aspx?s=GetDIBits#L232

在这里,您可以看到鼠标事件与Win32调用mouse_event(...)(WINUSER.H中定义)

所以你的机器人鼠标点击通话不会受到限制实现mouse_event(...)的限制。

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

+0

好的,我想安装一个可以与我的java程序交流的鼠标驱动程序会非常痛苦吗? – kajacx

+0

就我所知,Hackshield,例如,安装和使用自己的驱动程序。 –

+0

好,让我们试试这个:可以说我想要有一个由java程序控制的虚拟鼠标,但它的行为将像绝对正常的鼠标,如触摸板或实际的鼠标。如果我点击“控制面板 - >设备 - >鼠标”,我会在其他鼠标设备中看到它。这可能吗? – kajacx

相关问题