今日目标熟悉robot的基本方法
控制键盘
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_W);
robot.delay(2000);
控制鼠标
robot.mouseMove(0,0);
robot.delay(1000);
robot.mouseMove(1690,1090);
robot.mouseMove(900,780);
robot.delay(1000);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.delay(3000);
(看到这里你会发现KeyEvent和InputEvent无法理解,就是两个代表某个操作的参数)
获取颜色
robot.mouseMove(950,500);
robot.delay(3000);
Color pixelColor = robot.getPixelColor(950, 500);
int red = pixelColor.getRed();
int green = pixelColor.getGreen();
int blue = pixelColor.getBlue();
System.out.print(red+","+green+","+blue);
截图
Dimension ssize = Toolkit.getDefaultToolkit().getScreenSize();
boolean flage = false;
int height = ssize.height;
int width = ssize.width;
System.out.print(height+","+width);
Rectangle rectangle = new Rectangle(ssize);
String path="/Users/lihao/Downloads";
String name="picturetest";
BufferedImage b = robot.createScreenCapture(rectangle);
File file = new File(path, name);
try {
flage = ImageIO.write(b, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
if(flage){
path=path+File.separator+name;
}
System.out.print(path);
java程序中注册系统级热键 Jintellitype:所谓系统级热键就是指一组快捷键,不论当前系统焦点在哪个程序中,只要按下该键,程序就能够捕捉该事件并进行相关处理。 这个基础知识可以用来做一些微操,比如强行停止,一键开始等。看后面有没有用。
Jintellitype的使用: 第一步:添加jar包和dll文件; 第二步:注册热键; 第三步:添加热键监听器,实现接口的方法;
以上就是基本应用。基本工具有了,然后就是思路。我要实现一个自动脚本。先初始化一个固定大小的方框节省空间,然后传入robot的createScreenCapture类中获取截图,根据截图的情况再进行对应的鼠标键盘操作。我对java了解的甚微,我直觉robot有点人工智能的感觉。
思路
获取按键位置 我想第一个要解决的是控制鼠标点该点的地方,总不可能记录每个按键的坐标,这样做太死板了,而且位置改了点就不能用了,从别人的博客吸取到的思路从一个大图片中找到小图片并且返回中心坐标的这个思路。
获取截图 截图应该怎么获取,是先截图下来再进行对比还是游戏打开后自动截图识别。目前先试着实现第一种,即截图对应的画面,然后当游戏打开后再运行程序,对游戏和画面进行对比然后获取按键位置。如何进行对比又是一个难题。 毕竟存在这样一个问题,游戏时刻都在变化,如果使用像素和图片完整一一对应的话,万一突然有个消息图片和游戏就不一样了,这样程序就没法用了;然后还可以这样,只取图片和游戏的一小片段进行对比。然后的问题上是程序怎么知道当前游戏处于什么状态。我可以让人来进行判断,这个时候热键的功能就来了,当游戏处于我们想要的界面后,利用Jintellitype让程序知道他该工作了。
目前思路就这么多,然后明天再进行实战。具体应该还会出现各种各样的问题。
|