4

我在 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 款上却没有用,只是发出哔哔声。有什么帮助吗?

4

1 回答 1

4

假设您在 Windows 机器上,对调用的java.awt.Robot调用被重定向到sun.awt.windows.WRobotPeer,而后者又调用awt_Robot.cpp. 您可以在这里查看源代码awt_Robot.cpphttp ://www.koders.com/cpp/fidFFE004659A9CAB3DA2B3302C457E624AF6F3EEDF.aspx?s=GetDIBits#L232

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

因此,您的机器人鼠标点击调用受到mouse_event(...).

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

于 2012-05-23T17:33:59.130 回答