在码云上逛时发现了这个项目:

出于好奇就clone到本地后跑起来

部署

mvn install

mvn spring-boot:run

启动后会得到如下控制台

在浏览器中输入控制台中的启动地址,看到下面的界面

接着输入控制台中的密码,点击“开始连接”

此时在控制台中输入 start 回车,效果出现了,直接在浏览器里显示了当前的桌面

说实话,当时确实吃了那么一惊,效果不错哟。然后就猜想它是怎么实现,………… 嗯,结果是没想出来,既然已经clone了代码,不妨直接看代码吧,毕竟代码面前没有秘密

原理

代码不多,很快就找到了核心类 Robot , 这是JDK中自带的类, 位于java.awt 包下,它的可以截取当前胸屏幕并存为一个 BufferedImage 对象。浏览器中能到的实时桌面其实是不断截屏的结果,截屏后将截屏的图片通过 websocket 发送到浏览器,然后再 canvas 上渲染出来。

扩展

Robot 的功能远不止截屏那么简单,它还可以模拟鼠标和键盘的操作。 比如将鼠标移动到指定的位置,模拟按下鼠标(键盘)的键。甚至网上还用它来做仿真测试或者按键精灵。

实践

既然它可以截屏,何不做一个简单的录屏GIF小工具呢?

效果是这样

相应代码如下

package com.taia.spintboot.demo;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import com.madgag.gif.fmsware.AnimatedGifEncoder;

public class ScreenCatch {

public static void main(String[] args) throws Exception {

Robot robot = new Robot();

Rectangle rect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());

List images = new ArrayList<>();

for (int i = 0; i < 5; i++) {

images.add(robot.createScreenCapture(rect));

Thread.sleep(1000);

}

createGIF(images,"e:\\screen.gif",1000);

}

private static void createGIF(List images, String newPic, int playTime) {

try {

AnimatedGifEncoder e = new AnimatedGifEncoder();

e.setRepeat(0);

e.start(newPic);

for (BufferedImage img : images) {

e.setDelay(playTime); // 设置播放的延迟时间

e.addFrame(img); // 添加到帧中

}

e.finish();

} catch (Exception e) {

System.out.println("jpgToGif Failed:");

e.printStackTrace();

}

}

}

java屏幕共享实现原理_远程桌面共享技术实现相关推荐

  1. vnc远程linux命令,用VNC实现远程桌面共享(支持Windows, Linux, …) | 易水博客

    用VNC实现远程桌面共享(支持Windows, Linux, -) VNC,全称为Virtual Network Computing,它是一个桌面共享系统.它的功能,类似于windows中的远程桌面功 ...

  2. linux系统远程工具,分享|Remmina:一个 Linux 下功能丰富的远程桌面共享工具

    Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源.功能丰富.强大的远程桌面客户端,它用 GTK+ 3 编写而成.它适用于那些需要远程访问及使用许多计算机的系统管理员和在外出行 ...

  3. 计算机关闭远程桌面 共享功能,win7旗舰版系统优化禁止用远程桌面共享的解决方法...

    ‍ ‍windows7系统优化的时候,禁用远程桌面共享功能,一旦被禁用了用户就不能设置它或使用它来远程控制其计算机,遇上这种问题要怎么处理,那么接下来就一起看看win7旗舰版系统优化禁止用远程桌面共享 ...

  4. Remmina:一个 Linux 下功能丰富的远程桌面共享工具

    转自 https://linux.cn/article-8493-1.html Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源.功能丰富.强大的远程桌面客户端,它用 GTK ...

  5. php qq远程桌面共享,新手学堂:用VNC实现远程桌面共享的方法

    VNC,全称为Virtual Network Computing,它是一个桌面共享系统.它的功能,类似于windows中的远程桌面功能.VNC使用了RFB(Remote FrameBuffer,远程帧 ...

  6. usb禁止重定向_远程桌面中的USB重定向技术解析(功能篇)

    在运行远程和虚拟桌面的数据中心内,网络管理员可以对计算环境的各个方面进行控制.只有一点除外,就是本地外围设备. 本地外围设备包括所有连接到终端上的设备,例如USB驱动器.鼠标或打印机.它们逐渐成为终端 ...

  7. GNS3 cloud 连接错误_远程桌面连接服务器身份验证错误要求的函数不受支持

    问题描述: 在远程桌面连接服务器的时候,出现以下错误 发生身份验证错误.要求的函数不受支持 而有的客户端连接到服务器没有这个问题,就是这个台客户端连接出现问题 解决方法: 一.在远程桌面客户端修改 开 ...

  8. 手机mstsc远程工具_远程桌面连接,只需3步,轻松远程操控电脑!

    远程桌面的好处 远程桌面有很多好处的 1.对于运维技术人员来说,可以随时随地管理远程主机,查看系统信息和硬件信息等系统性能诊断,远程应用管理内存.CPU等敏感信息报警提醒,对远程主机的一切尽收眼 2. ...

  9. vm虚拟机win10无法复制文件_远程桌面无法复制粘贴传输文件解决办法

    分步阅读 今天小编远程服务器,复制粘贴文件到服务器的时候卡了一下,后来就无法复制粘贴了,小编今天查了一下资料终于找到原因了,特此给大家分享一下解决办法. 工具/原料 电脑.远程服务器 检查本机电脑 1 ...

  10. 【Windows10】远程桌面共享多个显示屏

    起因 平时时喜欢用自己的笔记本电脑远程桌面到公司的工作电脑主机进行工作,公司分配的工作机配置方面都挺好的,主要还是喜欢用自己的笔记本敲代码.然而,有时候觉得自己笔记一个显示屏不大够用,想做屏幕扩展投影 ...

最新文章

  1. c语言普通变量间接访问,C语言学习笔记-指针
  2. Impala与Hive的比较
  3. Java与iOS对话:Java对象与Apple plist序列化
  4. Oracle中exists与in的效率探讨
  5. Mysql count() 语句
  6. 韩顺平php视频笔记49 函数深入 php的值传递与引用传递 goto
  7. MYSQL:RELPACE用法
  8. 利用HtmlAgilityPack库进行HTML数据抓取
  9. 基于matlab的基带gmsk调制解调,基于MATLAB的GMSK调制解调实验
  10. 教育培训教师说课通用PPT模板
  11. 服务器阵列卡装系统蓝屏,电脑开raid做系统蓝屏-电脑开机就蓝屏怎么解决?
  12. js 数字转为罗马数字(互转换),I 、II 、 III 、IV、V
  13. 成绩管理系统(C语言)完整代码,纯C的练手程序
  14. 可可直播电视---开通官网
  15. 为什么说 Ubuntu 22.04 LTS 是史诗级的版本
  16. python课程设计,学了python后你可以做的案例(词云,折线图,饼图…)
  17. 付宇泽四则运算试题生成,结对
  18. oracle中授予connect权限,oracle授予权限
  19. 人工智能(AI)入门
  20. Go语言自学系列 | golang结构体作为函数参数

热门文章

  1. C语言方波转换正弦波,方波转换成正弦波电路
  2. MySQL数据表字段繁体转简体
  3. 如何在linux下玩lol_英雄联盟新手教程 教你怎么玩lol
  4. 带过期时间的积分系统表设计
  5. 龙贝格积分——matlab实现
  6. html调用网易云播放器无法自动播放,网页内嵌网易云插件全程(包括生成自己歌单的外链)...
  7. u盘复制文件第二台计算机无文件夹,u盘做成启动盘后拷贝进去的文件不见了怎么办...
  8. Silverlight载入动画(简易)
  9. 5000头奶牛的数字化之旅
  10. package.json配置简介