Java关于Robot类的使用以及远程桌面的实现

利用Robot类实现自动操作,实现效果是运行之后鼠标自动定位到整个屏幕坐标系的(635,454)位置,输入wangtianze

 1 package com.wtz.util;
 2
 3 import java.awt.AWTException;
 4 import java.awt.Robot;
 5 import java.awt.event.InputEvent;
 6 import java.awt.event.KeyEvent;
 7
 8 /**
 9  *     @author wangtianze QQ:864620012
10  *     @date 2017年4月16日 上午1:20:32
11  *     <p>description:Robot测试类,实现效果是运行之后鼠标自动定位到整个屏幕坐标系的(635,454)位置,输入wangtianze</p>
12  */
13 public class RobotTest {
14     public static void main(String[] args){
15         try {
16             Robot robot = new Robot();
17             //鼠标移动到坐标(635,454)
18             RobotTest.clickMouse(robot, 635, 454, 500);
19
20             int[] keys = {
21                     KeyEvent.VK_W,KeyEvent.VK_A,
22                     KeyEvent.VK_N,KeyEvent.VK_G,
23                     KeyEvent.VK_T,KeyEvent.VK_I,
24                     KeyEvent.VK_A,KeyEvent.VK_N,
25                     KeyEvent.VK_Z,KeyEvent.VK_E};
26             robot.delay(500);
27             RobotTest.pressKey(robot,keys,500);
28         } catch (AWTException e) {
29             // TODO Auto-generated catch block
30             e.printStackTrace();
31         }
32     }
33
34     public static void pressKey(Robot robot,int[] keys,int delay){
35         for(int i=0;i<keys.length;i++){
36             robot.keyPress(keys[i]);
37             robot.keyRelease(keys[i]);
38             robot.delay(500);
39         }
40         //处理完需要延迟
41         robot.delay(delay);
42     }
43
44     public static void clickMouse(Robot robot,int x,int y,int delay){
45         robot.mouseMove(x, y);
46         robot.delay(500);
47         robot.mousePress(InputEvent.BUTTON1_MASK);
48         robot.mouseRelease(InputEvent.BUTTON1_MASK);
49         robot.delay(delay);
50     }
51 }

利用Robot类实现监控屏幕,实现效果是运行后每隔50微秒获取当前屏幕图像,显示到JFrame内

 1 package com.wtz.util;
 2
 3 import java.awt.AWTException;
 4 import java.awt.Dimension;
 5 import java.awt.Graphics2D;
 6 import java.awt.Rectangle;
 7 import java.awt.RenderingHints;
 8 import java.awt.Robot;
 9 import java.awt.Toolkit;
10 import java.awt.image.BufferedImage;
11
12 import javax.swing.ImageIcon;
13 import javax.swing.JFrame;
14 import javax.swing.JLabel;
15
16 /**
17  *     @author wangtianze QQ:864620012
18  *     @date 2017年4月16日 下午4:43:11
19  *     <p>description:Robot实现监控屏幕,实现效果是每隔50微秒获取当前屏幕图像,显示到JFrame内</p>
20  */
21 public class RobotScreenTest {
22     public static void main(String[] args){
23         try {
24             Robot robot = new Robot();
25             JFrame jframe = new JFrame();
26             //设置标题
27             jframe.setTitle("wangtianze监控屏幕工具");
28             JLabel label = new JLabel();
29             jframe.add(label);
30             jframe.setSize(800,600);
31             //设置可见
32             jframe.setVisible(true);
33             //设置置顶
34             jframe.setAlwaysOnTop(true);
35             //控制台退出模式
36             jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
37             //获取屏幕大小
38             Toolkit toolkit = Toolkit.getDefaultToolkit();
39             Dimension dm = toolkit.getScreenSize();
40             while(true){
41                 //一个矩形面板
42                 Rectangle rec = new Rectangle(0, 0, (int)dm.getWidth(), (int)dm.getHeight());
43                 //按照矩形截取图片到缓冲流
44                 BufferedImage img = robot.createScreenCapture(rec);
45                 //缩放图片
46                 BufferedImage newImg = RobotScreenTest.resize(img, jframe.getWidth(), jframe.getHeight());
47                 label.setIcon(new ImageIcon(newImg));
48                 try {
49                     Thread.sleep(50);
50                 } catch (InterruptedException e) {
51                     // TODO Auto-generated catch block
52                     e.printStackTrace();
53                 }
54             }
55         } catch (AWTException e) {
56             // TODO Auto-generated catch block
57             e.printStackTrace();
58         }
59     }
60
61     public static BufferedImage resize(BufferedImage img, int newW, int newH){
62         int w = img.getWidth();
63         int h = img.getHeight();
64         //创建一个缩放后的图片流
65         BufferedImage newImg = new BufferedImage(newW,newH,img.getType());
66         Graphics2D g = newImg.createGraphics();
67         //设置模式
68         g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
69         //按比例缩放
70         g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
71         g.dispose();
72         return newImg;
73     }
74 }

以上两个就是Robot类的使用demo,既然我已经用Robot类实现了自动操作,还有屏幕监控,那么深入一下,如果再加入websocket实现即时通讯,那么就可以实现远程监控以及控制桌面的功能了。

时间: 2025-01-05 15:54:10

Java关于Robot类的使用以及远程桌面的实现的相关文章

java使用Robot类在eclipse上实现自动编写代码

运行时,把输入法关掉,切换成系统自带的输入法即可: 第二个类是自定义的键值Map集合,主要是为了方便输入字符串,有需要的可以自行添加: 主要的代码如下,会创建一个名称为Automaton.java的类,并输出"Hellow Word,I am a skynet" import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; import java.io.IOException;

Selenium Webdriver自动化测试设计(webdriver自动化架构设计、定义接口、日志处理、Java Robot类应用)

给各位网友分享一套课程,有兴趣的可以加我 2748165793 更多免费资料,可以查看http://blog.sina.com.cn/sonyandnokia码农的开心乐园 课程大纲第1章节:课程介绍概要介绍selenium介绍webdirver介绍webdriver环境搭建 第2章节Selenium IDE介绍IDE实例讲解录制回放过程录制脚本的导出IDE插件的介绍以及安装方法 第3章节Selenium 识别对象的方法包括:id,name,class name,link text,partia

Java常用工具类集合

数据库连接工具类 仅仅获得连接对象 ConnDB.java package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对象 * */ public class ConnDB { private static Connection conn = null; private static final String DRIVER_NAME = "com.mysql

java之URL类

Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通过使用Java的URL类 就可以经由URL完成读取和修改数据的操作. 通过一个URL连接,我们就可以确定资源的位置,比如网络文件.网络页面以及网络应用程序等.其中包含了许多的语法元素.  从URL得到的数据可以是多种多样的,这些都需要一种统一的机制来完成对URL的读取与修改操作.Java语言在它的

Java的URL类(一)

转:https://www.cnblogs.com/blackiesong/p/6182038.html Java的URL类(一) Java的网络类可以让你通过网络或者远程连接来实现应用.而且,这个平台现在已经可 以对国际互联网以及URL资源进行访问了.Java的URL类可以让访问网络资源就像是访问你本地的文件夹一样方便快捷.我们通过使用Java的URL类 就可以经由URL完成读取和修改数据的操作. 通过一个URL连接,我们就可以确定资源的位置,比如网络文件.网络页面以及网络应用程序等.其中包含

使用Robot类模拟鼠标、键盘事件

Robot类用于模拟鼠标.键盘事件,生成本机系统输入事件.Robot 的主要用于自动化.自运行的程序和其他需要自动控制鼠标和键盘的程序 相当于实际操作的效果,不仅仅只是生成对应的鼠标.键盘事件.比如Robot.mouseMove() 将实际移动鼠标光标,而不是只生成鼠标移动事件. 实现的是本机的全局模拟,不仅仅局限于写的程序和IDE Robot类常用方法: void delay (int ms) 睡眠指定的时间(类似于线程中sleep) void keyPress(int keycode) 按下

java单例类/

java单例类  一个类只能创建一个实例,那么这个类就是一个单例类 可以重写toString方法 输出想要输出的内容 可以重写equcal来比较想要比较的内容是否相等 对于final修饰的成员变量 一但有了初始值,就不能被重新赋值 static修饰的成员变量可以在静态代码块中 或申明该成员时指定初始值 实例成员可以在非静态代码块中,申明属性,或构造器中指定初始值 final修饰的变量必须要显示初始化 final修饰引用变量不能被重新赋值但是可以改变引用对象的内容分(只要地址值不变) final修

Java 对象和类

1.访问实例变量和调用成员方法: 2. 在该例子中,我们创建两个类:Employee 和 EmployeeTest. 首先打开文本编辑器,把下面的代码粘贴进去.注意将文件保存为 Employee.java. Employee类有四个成员变量:name.age.designation和salary.该类显式声明了一个构造方法,该方法只有一个参数. 程序都是从main方法开始执行.为了能运行这个程序,必须包含main方法并且创建一个实例对象. 下面给出EmployeeTest类,该类实例化2个 Em

Java 第八章 类的方法(一) 笔记

Java 第八章 类的方法(一) 一.类的方法语法: 访问修饰符 返回值类型 方法名(){             方法体:      } 二.方法名的规范:     1.必须以字母."_"或"$"开头     2.可以有数字,但不能以数字开头.     3.如果方法名是多个单词组成 ,第一个单词的首字母小写,      其后单词首字母单词大写.     4.方法名都采用动词. 三.方法的返回值     1.有返回值:必须告知返回值的数据类型,并且返回相应的值.