java中Robot
用者本身这个系统事件,或根据使用者的需要(例如程序需要自动展示一些功能等)来控制鼠标或键盘。
在 Robot 这个类中产生的事件有别于在AWT元件中的事件,在AWT 元件中的事件(例如 MouseEvent、KeyEvent等)会被放置在 AWT的事件队列中等候处理。但您用 Robot 这个类别所产生的事件,则会被放置在操作系统的事件队列中等候处理。例如,当你用了 Robot 中的 Robot.mouseMove() 这个方法,就表示真的让您的鼠标移动了,而不像 AWT 事件中只是产生鼠标移动的事件而已。
在这里要注意的是,由于 Robot 产生了一些较低阶的控制,所以一旦当前系统不允许您从事这些控制时,就会发出 AWTException 这个例程来通知您。 </ td > < td width = " 267 " align = " right " > </ td > </ tr > </ table >
import java.awt. * ;
import java.awt.event. * ;
public class example1 ... {
Robot robot=null;
void initial() ...{
try ...{
// 产生一个 Robot 类别的物件
robot = new Robot();
}catch (AWTException ex) ...{}
}
void start() ...{
// 一开始希望鼠标移动到的座标
int initX = 30, initY = 10;
//然后希望移动到的鼠标座标
int disX = 120, disY = 20;
// 目前鼠标的位置座标
int mouseX, mouseY;
mouseX = initX;
mouseY = initY;
// 延迟了 3 秒钟
robot.delay(3000);
// 移动到 左上角第一个图标的位置
robot.mouseMove(30,10);
// 鼠标按下了鼠标右键
robot.mousePress(InputEvent.BUTTON3_MASK);
// 鼠标放开所按下的右键
robot.mouseRelease(InputEvent.BUTTON3_MASK);
// 停留 1 秒钟
robot.delay(1000);
// 鼠标移动到“打开”的位置
for(int i = 0 ; mouseX < disX ; i++) ...{
mouseX = mouseX + i;
robot.mouseMove(mouseX, mouseY);
robot.delay(50);
}
for(int j = 0 ; mouseY < disY ; j++) ...{
mouseY = mouseY + j;
robot.mouseMove(mouseX, mouseY);
robot.delay(50);
}
// 停留 1 秒钟后按下左键
robot.delay(1000);
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
public static void main(String[] args) ...{
example1 ex=new example1();
ex.initial();
ex.start();
System.exit(0);
}
}
在Robot类中有一个比较特殊的method:
BufferedImage createScreenCapture(Rectangle screenRect)
顾名思义,当我们使用这个这个method 时,就会建立一张影像,而这张影像中存的的则是我们从屏幕撷取出来的像素(pixel)。而使用这个method,就会传回一个BufferedImage类的对象,我们可以根据我们的需要来对它进行处理。下面是个简单的范例,在这个范例中,程序会在使用者希望停留的秒数钟后截取屏幕,并将文件用jpg格式保存。
/**/ /*
* @(#)ScreenCapture.java 2001/09/24
* Usage: java ScreenCapture [-d seconds] [-f filename]
* @Author
* Cheng-Yu Chang
* @License
* GPL(GNU GENERAL PUBLIC LICENSE)
* http://www.gnu.org/copyleft/gpl.html
*/
import java.awt. * ;
import java.awt.image. * ;
import java.io. * ;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ScreenCapture ... {
public static void ScreenCapture(int seconds, String filename) ...{
Robot robot = null;
// 产生 Robot 物件,记着要 catch AWTException
try ...{
robot =new Robot();
// 延迟使用者输入的秒数
robot.delay(seconds);
// 将截取的image转换成jpg格式
OutputStream f = new FileOutputStream(filename);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(f);
encoder.encode(robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));
f.close();
}catch(AWTException e1) ...{}
catch(IOException e2) ...{}
}
// 使用说明
private static void usage() ...{
System.out.println("Usage: java ScreenCapture [-d seconds] [-f filename]");
System.out.println(" -d Seconds to delay before capturing screen");
System.out.println(" -f JPG filename to save");
System.exit(0);
}
public static void main(String args[]) ...{
int s = 0;
String filename = "ScreenCapture.jpg";
// 判定输入的参数
if (args.length == 0)
usage();
else ...{
for (int i = 0 ; i < args.length ; i++) ...{
if (args[i].startsWith("-")) ...{
if (args[i].equals("-d")) ...{
if (i < args.length - 1)
s = Integer.parseInt(args[++i]);
else
usage();
}
if (args[i].equals("-f")) ...{
if (i < args.length - 1)
filename = args[++i];
else
usage();
}
}else
usage();
}
}
ScreenCapture(s * 1000, filename);
System.exit(0);
}
使用者本身这个系统事件,或根据使用者的需要(例如程序需要自动展示一些功能等)来控制鼠标或键盘。
在 Robot 这个类中产生的事件有别于在AWT元件中的事件,在AWT 元件中的事件(例如 MouseEvent、KeyEvent等)会被放置在 AWT的事件队列中等候处理。但您用 Robot 这个类别所产生的事件,则会被放置在操作系统的事件队列中等候处理。例如,当你用了 Robot 中的 Robot.mouseMove() 这个方法,就表示真的让您的鼠标移动了,而不像 AWT 事件中只是产生鼠标移动的事件而已。
在这里要注意的是,由于 Robot 产生了一些较低阶的控制,所以一旦当前系统不允许您从事这些控制时,就会发出 AWTException 这个例程来通知您。 </td> <td width="267" align="right"> </td> </tr> </table>
import java.awt.*;
import java.awt.event.*;
public class example1 ...{
Robot robot=null;
void initial() ...{
try ...{
// 产生一个 Robot 类别的物件
robot = new Robot();
}catch (AWTException ex) ...{}
}
void start() ...{
// 一开始希望鼠标移动到的座标
int initX = 30, initY = 10;
//然后希望移动到的鼠标座标
int disX = 120, disY = 20;
// 目前鼠标的位置座标
int mouseX, mouseY;
mouseX = initX;
mouseY = initY;
// 延迟了 3 秒钟
robot.delay(3000);
// 移动到 左上角第一个图标的位置
robot.mouseMove(30,10);
// 鼠标按下了鼠标右键
robot.mousePress(InputEvent.BUTTON3_MASK);
// 鼠标放开所按下的右键
robot.mouseRelease(InputEvent.BUTTON3_MASK);
// 停留 1 秒钟
robot.delay(1000);
// 鼠标移动到“打开”的位置
for(int i = 0 ; mouseX < disX ; i++) ...{
mouseX = mouseX + i;
robot.mouseMove(mouseX, mouseY);
robot.delay(50);
}
for(int j = 0 ; mouseY < disY ; j++) ...{
mouseY = mouseY + j;
robot.mouseMove(mouseX, mouseY);
robot.delay(50);
}
// 停留 1 秒钟后按下左键
robot.delay(1000);
robot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
public static void main(String[] args) ...{
example1 ex=new example1();
ex.initial();
ex.start();
System.exit(0);
}
}
在Robot类中有一个比较特殊的method:
BufferedImage createScreenCapture(Rectangle screenRect)
顾名思义,当我们使用这个这个method 时,就会建立一张影像,而这张影像中存的的则是我们从屏幕撷取出来的像素(pixel)。而使用这个method,就会传回一个BufferedImage类的对象,我们可以根据我们的需要来对它进行处理。下面是个简单的范例,在这个范例中,程序会在使用者希望停留的秒数钟后截取屏幕,并将文件用jpg格式保存。
/**//*
* @(#)ScreenCapture.java 2001/09/24
* Usage: java ScreenCapture [-d seconds] [-f filename]
* @Author
* Cheng-Yu Chang
* @License
* GPL(GNU GENERAL PUBLIC LICENSE)
* http://www.gnu.org/copyleft/gpl.html
*/
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ScreenCapture ...{
public static void ScreenCapture(int seconds, String filename) ...{
Robot robot = null;
// 产生 Robot 物件,记着要 catch AWTException
try ...{
robot =new Robot();
// 延迟使用者输入的秒数
robot.delay(seconds);
// 将截取的image转换成jpg格式
OutputStream f = new FileOutputStream(filename);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(f);
encoder.encode(robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));
f.close();
}catch(AWTException e1) ...{}
catch(IOException e2) ...{}
}
// 使用说明
private static void usage() ...{
System.out.println("Usage: java ScreenCapture [-d seconds] [-f filename]");
System.out.println(" -d Seconds to delay before capturing screen");
System.out.println(" -f JPG filename to save");
System.exit(0);
}
public static void main(String args[]) ...{
int s = 0;
String filename = "ScreenCapture.jpg";
// 判定输入的参数
if (args.length == 0)
usage();
else ...{
for (int i = 0 ; i < args.length ; i++) ...{
if (args[i].startsWith("-")) ...{
if (args[i].equals("-d")) ...{
if (i < args.length - 1)
s = Integer.parseInt(args[++i]);
else
usage();
}
if (args[i].equals("-f")) ...{
if (i < args.length - 1)
filename = args[++i];
else
usage();
}
}else
usage();
}
}
ScreenCapture(s * 1000, filename);
System.exit(0);
}
java中Robot相关推荐
- JAVA中Robot类的运用,实现‘别踩白块’游戏辅助
Robot 一.功能分析 http://www.4399.com/flash/135255_3.htm 别踩白块游戏,运用Java Robot类完成游戏脚本,自动完成踩黑块. 二.设计思路 首先创建一 ...
- java.awt.robot api,像java.awt.Robot中的Android API
Is there an Android API analogous to java.awt.Robot, i.e. an API allowing to take screenshots? 解决方案 ...
- Mac环境下用Java(Sikuli+Robot)实现页游自动化
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Sikulix(以前叫Sikuli)在Mac电脑的环境配置步骤如下: 1.从官网上下载Sikuli ...
- 在java中通过过键盘输入_java中从键盘输入
控制台输入数据 1.1 主方法的形式参数 在 Java 中利用 main(Str... Java中获取键盘输入值的三种方法 2012-11-13 00:00比特网悠虎关键字:Java 程序开发过程中, ...
- Thinking in Java 中闪耀的星星(四)
51.对象序列化的具体应用 这也是书里的一个例子,挺有意思的.结合模板方法模式模拟CAD将用户作业的信息保存在文件中: import java.io.*; import java.util.*; ab ...
- JAVA工具篇--java.awt.Robot模拟微信批量添加好友
前言:java.awt.Robot可以控制鼠标和键盘,本文基于此通过模拟认为添加微信好友的过程实现批量添加微信好友,并最终输出微信号/手机号是否有好友及好友的基本信息,本文代码示例禁用学习交流使用: ...
- Java中dimension类详解
dimension - Java的一个类 dimension是Java的一个类,封装了一个构件的高度和宽度,这个类与一个构件的许多属性具有相关性,因此在Component类中定义多个与之有关的方法,L ...
- Java中的屠龙之术(二):如何方便快捷地生成.class文件
在之前的"Java中的屠龙之术:如何修改语法树"中,我们详细介绍了如何使用Javac源码提供的工具类来修改语法树. 而在此基础上,有一款开源工具javapoet可以更加快捷地生成字 ...
- 用java的robot类以及Gui 制作一个游戏(阴阳师)脚本
** 用java的robot类以及Gui 制作一个游戏(阴阳师)脚本 ** 由于阴阳师这个游戏肝度太大,就决定写一个脚本来模拟玩家的重复性操作.所以我就决定用java中的robot类中的一些方法来 ...
最新文章
- 以短带长进军网综,西瓜视频能否干过“优爱腾”?
- 2020年宇通大量裁人论坛_中国数学会计算数学分会2020年研究生论坛活动总结
- 正负样本不平衡处理方法总结
- WebGL——osg框架学习一
- SuperMap IS.NET保存地图之Ajax篇(转)
- Truncated Signed Distance Function: Experiments on Voxel Size
- Java 25天基础-DAY 05-面向对象-构造函数
- Linux 密码复杂度
- 开源项目UIL(UNIVERSAL-IMAGE-LOADER)
- C# winform小票打印
- 佳能打印机 Cannon G2810 维护修复方法
- java wsdl 服务端代码_wsdl2java 生成 webservice服务端代码:
- 基于tensorflow的iris数据集分类示例
- 转:: 刺鸟:用python来开发webgame服务端(1)
- 团队管理之绩效考核(OKR、KPI)
- 去掉win7快捷方式箭头及修复锁定到任务栏失效
- 小红书流量不好数据差,怎么解决?
- 自媒体注意了:借着315今日头条关闭了一批头条号账号
- 易语言怎么判断文件是否一样_戒指尺寸怎么量?如何判断大小是否合适
- 新手小白如何精准引流?新手小白精准引流思路
热门文章
- 符乐安:2020年短视频创作将迎来新的高峰
- VMware虚拟机网络模式详解 NAT模式
- 比nginx-rtmp高三倍性能的SRS的高性能是个什么球?
- bilibili Saber 实时计算平台架构与实践【Apache Flink 替换 Spark Stream的架构与实践】
- 在linux上运行scala的jar包
- java基础---集合之HashSet
- leetcode 850. Rectangle Area II | 850. 矩形面积 II(递归分割未重叠矩形)
- leetcode 415. 字符串相加(Java版)
- troubleshoot之:GC调优到底是什么
- python打包exe不弹窗_Pyinstaller 打包exe教程及问题解决