【问题标题】:Java: use Robot while running fullscreen appJava:在运行全屏应用程序时使用机器人
【发布时间】:2012-05-30 04:24:41
【问题描述】:

我对 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 款游戏中却无法正常工作,只是发出哔哔声。有什么帮助吗?

【问题讨论】:

    标签: java awt fullscreen awtrobot


    【解决方案1】:

    假设您在 Windows 机器上,对 java.awt.Robot 的调用将重定向到 sun.awt.windows.WRobotPeer,而 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(...) 的限制。

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

    【讨论】:

    • 好的,我想安装一个可以与我的java程序通信的鼠标驱动程序真的很痛苦吗?
    • 据我了解,例如 Hackshield 安装和使用自己的驱动程序。
    • 好吧,让我们试试这个:假设我想让虚拟鼠标由 java 程序控制,但它的行为就像绝对普通的鼠标,如触摸板或实际鼠标。如果我单击“控制面板-> 设备-> 鼠标”,我会在其他鼠标设备中看到它。这可能吗?
    • 我不确定,你需要检查一下。同时,您能否在游戏安装文件夹中查看名为 HShield 的文件夹。如果你能找到它,那么我们就在正轨上。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多