我在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种情况下它没有用,但只有蜂鸣。有什么帮助吗?
答案 0 :(得分:4)
假设您使用的是Windows计算机,则java.awt.Robot
来电的呼叫将重定向至sun.awt.windows.WRobotPeer
,awt_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为许多游戏提供了这样的保护机制。 所以这就是为什么有些游戏没有收到你的机器人鼠标点击的原因。