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

ali*_*ali 41 java windows

我正在尝试在Java中执行鼠标单击,以单击外部程序中的某些内容.要做到这一点,我正在使用java.awt.robot,以及以下代码:

Robot bot = new Robot();
int mask = InputEvent.MOUSE_BUTTON1_DOWN;
bot.mouseMove(x, y);           
bot.mousePress(mask);     
bot.mouseRelease(mask);
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试过自然地移动鼠标,但没有任何效果.所以我的猜测是,它必须正在听键盘状态等,并告诉它,点击是由计算机生成的.

如何将所有键盘/鼠标状态设置为与正常鼠标单击相同的方式,我该怎么办?

and*_*dev 57

好吧,我有同样的要求,机器人类对我来说非常好.它适用于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);
}
Run Code Online (Sandbox Code Playgroud)

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


Cli*_*ote 16

仅供参考,在较新版本的Windows中,有一个新设置,如果程序在管理员模式下运行,则另一个不在管理员模式下的程序无法向其发送任何点击或其他输入事件.检查您尝试发送点击的源程序(右键单击 - >属性),然后查看是否选中了"以管理员身份运行"复选框.

  • 这只是为我节省了大量时间进行故障排除!必须以管理员身份运行NetBeans -_- (3认同)

jco*_*ctx 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);
 }
}
Run Code Online (Sandbox Code Playgroud)

我假设InputEvent.MOUSE_BUTTON1_DOWN您的Java版本与我的版本相同InputEvent.BUTTON1_DOWN_MASK; 我正在使用1.6.

否则,这可能是你的问题.我可以说它很有效,因为当我运行该程序时,我的Chrome浏览器对http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html开放,并且它更改为Debian.org因为这是(100,100)书签栏中的链接.

[今天在考虑之后补充]可能有必要通过模拟更平滑的鼠标移动来欺骗听力程序.在这里看到答案:如何使用java在整个屏幕上平滑移动鼠标?