1

问题:

Java Robot 的 MousePress() 在 99% 的情况下都可以正常工作,但它不能在 Windows 8.1 或 10 的任务管理器上工作(我没有测试过 7 或更低版本)。

As a matter of fact, when the Task Manager window is selected, even MouseMove() will fail.

要复制:

  1. 使用下面的代码,运行一次以查看代码是否有效。
  2. 打开任务管理器(CTRL+Shift+Escape),运行代码,然后快速选择任务管理器窗口。代码将完成执行,但鼠标位置不会改变。

代码:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.MouseEvent;

public class RobotMousePressTest {

    public static void main(String[] args) throws AWTException, InterruptedException {
        System.out.println("Started. Waiting for sleep to finish.");
        Robot r = new Robot();
        Thread.sleep(3000);
        r.mouseMove(4, 4);
        r.mousePress(MouseEvent.getMaskForButton(MouseEvent.BUTTON1));
        System.out.println("Click!");
    }
}


问题:

  1. 有谁知道是否有办法让它工作?
  2. 是否有可用于 MousePress() 和 MouseMove() 的替代库?
  3. 我会被迫使用本机代码 (JNI) 以使其正常工作吗?
4

1 回答 1

3

在进行了更多的挖掘和测试后,我发现它与 Windows 的管理员用户有关。任何不具有管理员权限的应用程序都无法与具有管理员权限的应用程序交互。如果我以管理员身份运行应用程序,即使选择了任务管理器,代码也会正确执行。

到目前为止,我还没有找到其他方法可以做到这一点。

于 2016-07-24T12:23:08.357 回答