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

我正在尝试在Java中执行鼠标单击,以在外部程序中单击一些内容。 为此,我使用java.awt.robot和下面的代码:

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

这是问题。 外部程序能够检测到这个点击是计算机生成的而不是人为生成的,因此它拒绝了这个点击。

我已经尝试将鼠标自然地移动,并没有任何效果。 所以我的猜测是,它必须听取键盘状态或类似的信息,并从中说明点击是由计算机生成的。

我需要做些什么来设置所有的键盘/鼠标状态的行为与正常的鼠标点击一样?

那么我有相同的确切要求,机器人class对我来说是完全正确的。 它适用于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_MASK); bot.mouseRelease(InputEvent.BUTTON1_MASK); } 

也许你可以分享拒绝点击的程序的名称?

仅供参考,在较新版本的Windows中,如果程序在Adminstrator模式下运行,则另一个未处于pipe理员模式的程序不能发送任何点击或其他input事件。 检查您尝试发送点击的源程序(右键单击 – >属性),然后查看是否选中“以pipe理员身份运行”checkbox。

它在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.BUTTON1_DOWN_MASK与我的InputEvent.BUTTON1_DOWN_MASK是一样的; 我正在使用1.6。

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

[在今天认识之后join],可能有必要通过模拟更平滑的鼠标移动来欺骗聆听程序。 在这里看到答案: 如何通过使用Java在整个屏幕上平滑移动鼠标?

在所有方面最可能的是,你是错误的为什么点击被“拒绝”。 你为什么认为某个程序正在试图确定它是否是人类? Robot类(已经使用了很多)应该发送操作系统无法区分的用户进行点击的消息。

某些应用程序可能会在低OS级别检测点击源 如果你真的需要这种破解,你可以在虚拟机的窗口中运行目标应用程序,并在主机操作系统上运行cliker,它可以提供帮助。

您可以创build一个简单的AutoIt脚本来为您完成这项工作,将其编译为可执行文件并在那里执行系统调用。

在au3脚本中:

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

现在在你的au3文件夹中findaut2exe,或者在你的开始菜单中find“编译脚本到.exe”,并创build一个可执行文件。

在你的Java类调用中:

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

AutoIt的行为就像是一个人,不会被检测为一台机器。

在这里findAutoIt: https : //www.autoitscript.com/