如何用java模拟真实的鼠标点击?

问题描述 投票:38回答:6

我试图在Java中进行鼠标点击,点击在外部程序的东西。要做到这一点,我使用java.awt.robot,和下面的代码:

Robot bot = new Robot();
int mask = InputEvent.MOUSE_BUTTON1_DOWN;
bot.mouseMove(x, y);           
bot.mousePress(mask);     
bot.mouseRelease(mask);

这里的问题。外部程序是能够检测到该点击是计算机产生的,而不是人类生成的,因此,其拒绝这个点击。

我已经尝试过移动鼠标,有自然,并且没有任何效果。所以我的猜测是,它必须是听键盘状态还是这样,并从该讲,所产生的点击电脑。

我有什么做的所有设置键盘/鼠标状态以同样的方式作为一个正常的鼠标点击会吗?

java windows
6个回答
55
投票

嗯,我有同样的确切要求,Robot类是完全为我好。它适用于Windows 7和XP(试过了Java 6和7)。

public static void click(int x, int y) throws AWTException{
    Robot bot = new Robot();
    bot.mouseMove(x, y);    
    bot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
    bot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
}

可能是你可以分享是拒绝你单击该程序的名称?


14
投票

仅供参考,在新版本的Windows,还有的地方,如果一个程序在管理员联系模式下运行一个新的设置,然后另一个程序不是在管理员模式下,无法发送任何点击或其他输入事件给它。检查你的源程序,你要发送的点击(右键 - >属性),看看如果选择“以管理员身份运行”复选框。


8
投票

它工作在Linux中。或许还有可以在Windows中更改为允许它的系统设置。

jcomeau@aspire:/tmp$ cat test.java; javac test.java; java test
import java.awt.event.*;
import java.awt.Robot;
public class test {
 public static void main(String args[]) {
  Robot bot = null;
  try {
   bot = new Robot();
  } catch (Exception failed) {
   System.err.println("Failed instantiating Robot: " + failed);
  }
  int mask = InputEvent.BUTTON1_DOWN_MASK;
  bot.mouseMove(100, 100);
  bot.mousePress(mask);
  bot.mouseRelease(mask);
 }
}

我在你的Java版本假设InputEvent.MOUSE_BUTTON1_DOWN是在我同样的事情,InputEvent.BUTTON1_DOWN_MASK;我使用的是1.6。

否则,这可能是你的问题。我可以告诉它的工作,因为我的Chrome浏览器是开放的http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html,当我跑的程序,并把它改为Debian.org,因为这是在(100,100)在书签栏中的链接。

[今天它cogitating后来经过加],可能有必要通过模拟一个平滑的鼠标移动来欺骗监听程序。看到答案在这里:How to move a mouse smoothly throughout the screen by using java?


4
投票

与所有尊重最有可能的是,你是误会了,为什么点击被“拒绝”。为什么你认为一些程序试图确定是否是人为因素或不?机器人类(已经使用了很多)应发出操作系统已经没有办法从做点击一个用户来区分消息。


1
投票

有些应用程序可以检测低操作系统级别单击源。如果你真的需要那种黑客攻击,你可能只是运行目标应用程序在虚拟机的窗口,并运行主机操作系统cliker,它可以帮助。


1
投票

你可以创建一个简单的AutoIt脚本,没有工作适合你,编译为可执行的,有执行系统调用。

在AU3脚本:

; how to use: MouseClick ( "button" [, x, y [, clicks = 1 [, speed = 10]]] )
MouseClick ( "left" , $CmdLine[1], $CmdLine[1] )

现在发现aut2exe在您的AU3文件夹或开始菜单找到“编译脚本的.exe”,并创建一个可执行文件。

在Java类的呼叫:

Runtime.getRuntime().exec(
    new String[]{
        "yourscript.exe", 
        String.valueOf(mypoint.x),
        String.valueOf(mypoint.y)}
);

AutoIt的行为就好像它是一个人,不会因为机器检测。

在这里找到的AutoIt:https://www.autoitscript.com/

© www.soinside.com 2019 - 2024. All rights reserved.