Nodejs 第六十八章(远程桌面)

远程桌面

远程桌面(Remote Desktop)是一种技术,允许用户通过网络远程连接到另一台计算机,并在本地计算机上控制远程计算机的操作。通过远程桌面,用户可以在不同地点的计算机之间共享屏幕、键盘和鼠标,就像他们坐在远程计算机前一样。

应用场景

  1. 远程桌面
  2. 远程服务器操作
  3. 云游戏

环境准备

python环境安装

https://www.python.org/downloads/

image.png

c++ 环境安装

https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=BuildTools

image.png

全局依赖

npm install node-gyp -g

因为robotjs 需要依赖于c++ node-gyp依赖python 需要通过node-gyp编译 robotjs

项目依赖

  1. screenshot-desktop 截屏
  2. ws 实时传输
  3. get-pixels 获取图片大小
  4. robotjs 操作受控设备

代码编写

nodejs端

核心思想就是截图通过ws传输,具体传输的速率可以自己控制我这里设置的一秒钟,前端收到后展示到图片上,前端点击图片的XY轴,传输给服务器服务器通过robotjs模拟操作

import screenshot from 'screenshot-desktop'
import { WebSocketServer } from 'ws'
import http from 'http'
import getPixels from 'get-pixels'
import fs from 'fs'
import path from 'path'
import robot from 'robotjs'
const createScreenshot = async () => {
    const image = await screenshot({ format: 'png' })
    return {
        base64: image.toString('base64'), //截图受控设备返回base64
        imageBuffer: image //返回buffer流
    }
}

const server = http.createServer()
const wss = new WebSocketServer({ server }) //创建webSocket服务

const getScreenSize = async () => {
    const { imageBuffer, base64 } = await createScreenshot()
    const filePath = path.join(process.cwd(), '/screenshot.png')
    fs.writeFileSync(filePath, imageBuffer) //将图片存入本地 一直替换
    return new Promise((resolve, reject) => {
        getPixels(filePath, (err, pixels) => {
            if (err) reject(err)
            resolve({
                width: pixels.shape[0], //获取图片宽高
                height: pixels.shape[1], //获取图片宽高
                base64 //返回图片base64
            })
        })
    })
}

wss.on('connection', async (ws) => {
    ws.on('message',(message)=>{
        const data = JSON.parse(message)
        if(data.type === 'click'){ //监听事件
            const x = data.x
            const y = data.y
            robot.moveMouse(x,y) //点击的位置
            robot.mouseClick() //模拟点击事件
        }
    })
    setInterval(async () => {
        const data = await getScreenSize()
        ws.send(JSON.stringify(data))
    },1000) //一秒钟发送一次截图
})
server.listen(3000)

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        img {
            width: 100%;
            height: 100%;
        }

        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<img id="img" src="" alt="">

<body>
    <script>
        //如果你部署到服务器可以使用服务器的地址 我这里使用的windows 沙箱的ip
        const ws = new WebSocket('ws://172.29.65.216:3000')
        const image = document.getElementById('img')
        ws.onmessage = (event) => {
            const data = JSON.parse(event.data)
            image.src = `data:image/png;base64,${data.base64}`
            image.style.width = `${data.width}px`
            image.style.height = `${data.height}px`
        }
        //传递事件 当然你也再加键盘什么的 我这儿举个例子
        const hendler = (e) => {
            e.preventDefault()
            ws.send(JSON.stringify({
                type:e.type,
                x: e.clientX, 
                y: e.clientY
            }))
        }
        image.onclick = hendler
        image.ondblclick = hendler
    </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

购买 DDoS 高防 IP 防护哪家好?

DDoS 高防 IP 哪里买会比较好?在这场攻与守的游戏里&#xff0c;DDoS 高防 IP 是一种针对 DDoS 攻击的防护措施&#xff0c;通过将网站或应用的 IP 地址映射到高防 IP 上&#xff0c;实现对流量的清洗和过滤&#xff0c;从而有效抵御 DDoS 攻击。在选择 DDoS 高防 IP 服务提供…

应急学院物联网应急安全产教融合基地解决方案

第一章 背景 1.1物联网应急安全产教融合发展概况 物联网应急安全产教融合发展是当前社会发展的重要趋势。随着物联网技术的广泛应用&#xff0c;应急安全领域对人才的需求日益迫切。因此&#xff0c;产教融合成为培养高素质、专业化人才的关键途径。在这一背景下&#xff0c;…

嘉楠堪智 CanMV K230 的 CanMV-IDE 环境与 MicroPython 编程

嘉楠推出了 CanMV IDE 开发环境&#xff0c;可以使用 MicroPython 开发针对 CanMV K230 的各种程序&#xff0c;同时也提供了大量的例子程序&#xff0c;方便使用者学习。 嘉楠开发者社区&#xff0c;给出了详细的 CanMV K230 教程&#xff0c;可以借以快速上手。 目录 固件…

word中取消分页符或分段符前后的空格

在Word中&#xff0c;有时候&#xff0c;我们添加分页符后&#xff0c;从分页符后面的文字就全部掉到了下一页&#xff0c;那么如何避免呢&#xff1f; 选择word选项--高级&#xff0c;然后下滑到下面&#xff0c;将“取消分页符或分段符前后的空格”选中&#xff0c;如下图所…

IDEA上文件换行符、分隔符(Line Separator)LF,CR,CRLF错乱影响Git上传Github或Gitee代码

IDEA上文件换行符、分隔符(Line Separator)LF&#xff0c;CR&#xff0c;CRLF错乱影响Git上传Github或Gitee代码 指定目录 然后就可以上传了 OK 一定注意更改Line Separator的文件目录 如果是target目录下的文件,是不能修改为LF的,把target文件删除,再重载一次main文件,就…

手机空号过滤,提高工作效率

手机空号过滤在多个方面都具有重要的作用。 首先&#xff0c;它对于短信群发商和电话营销商来说至关重要。通过空号过滤&#xff0c;他们可以确保手机号码数据库的准确性和有效性。由于每天都有大量人群因各种原因更换手机号码&#xff0c;导致每个号段中的空号率和手机状态都…

详解进程控制

目录 一、进程创建 fork() 写时拷贝 fork的应用场景 二、进程退出 什么是进程退出码&#xff1f; 退出码的含义 进程退出方法 三、进程等待 进程等待的必要性 进程等待的方法 wait waitpid status 阻塞与非阻塞 四、进程替换 替换原理 替换函数 命名理解 简…

CMake使用

一、CMake 是什么 CMake 是一个跨平台的自动化构建系统&#xff0c;它使用配置文件 CMakeLists.txt 来管理软件构建过程。CMake 基于 Makefile 做了二次开发。 二、单个文件目录 # CMake 最低版本号要求 cmake_minimum_required(VERSION 3.16.3)# 工程名 project(CMakeSingle)…

Spring Boot整合Redisson的两种方式

项目场景 Spring Boot整合Redisson的两种方式&#xff0c;方式一直接使用yml配置&#xff0c;方式二创建RedissonConfig配置类。 前言 redisson和redis区别&#xff1a; Redis是一个开源的内存数据库&#xff0c;支持多种数据类型&#xff0c;如字符串、哈希、列表、集合和有序…

ZooKeeper 环境搭建详细教程之三(真集群)

ZooKeeper 搭建详细步骤之三(真集群) ZooKeeper 搭建详细步骤之二(伪集群模式) ZooKeeper 搭建详细步骤之一(单机模式) ZooKeeper 及相关概念简介 真集群搭建 搭建 ZooKeeper 真集群涉及多个步骤,包括准备环境、配置文件设置、启动服务以及验证集群状态。 以下是一个简…

java实现模板填充word,word转pdf,pdf转图片

Java实现Word转PDF及PDF转图片 在日常开发中&#xff0c;我们经常需要将文件操作&#xff0c;比如&#xff1a; 根据模板填充wordword文档中插入图片Word文档转换为PDF格式将PDF文件转换为图片。 这些转换可以帮助我们在不同的场景下展示或处理文档内容。下面&#xff0c;我将…

大型零售企业,适合什么样的企业邮箱大文件解决方案?

大型零售企业通常指的是在全球或特定地区内具有显著市场影响力和知名度的零售商。这些企业不仅在零售业务收入上达到了惊人的规模&#xff0c;而且在全球范围内拥有广泛的销售网络和实体店铺。它们在快速变化的零售行业中持续创新&#xff0c;通过实体店、电商平台等多种渠道吸…

JavaScript全套检验系统(LIS)源码C# + MVC + SQLserver + Redis 云LIS系统源码 区域医疗云LIS系统源码

JavaScript全套检验系统&#xff08;LIS&#xff09;源码C# MVC SQLserver Redis 云LIS系统源码 区域医疗云LIS系统源码 实验室信息系统&#xff08;Laboratory Information System&#xff0c;缩写LIS&#xff09;是一类用来处理实验室过程信息的软件。这套系统通常与其他信…

Dockerfile 镜像创建扩展

一、构建SSH镜像 创建dockerfile步骤&#xff1a; 1. 建立工作目录 mkdir /opt/sshd cd /opt/sshd/2.编辑Dockerfile vim Dockerfile #第一行必须指明基于的基础镜像 FROM centos:7 #作者信息 MAINTAINER this is ssh image <wwk> #镜像的操作指令 RUN yum -y update R…

微软如何打造数字零售力航母系列科普03 - Mendix是谁?作为致力于企业低代码服务平台的领头羊,它解决了哪些问题?

一、Mendix 成立的背景 Mendix的成立是为了解决软件开发中最大的问题&#xff1a;业务和IT之间的脱节。这一挑战在各个行业和地区都很普遍&#xff0c;很简单&#xff1a;业务需求通常被描述为IT无法正确解释并转化为软件。业务和IT之间缺乏协作的原因是传统的代码将开发过程限…

2路模拟音频光端机 JR-CA02

概述 JR-CA02光端机由发送机JR-CA02 Tansmitter和接收机JR-CA02 Receiver组成&#xff0c;通过一定距离长度的光纤相连接&#xff0c;传输2路Audio模拟音频&#xff08;即1路立体声&#xff09;。且每路音频分配输出。 JR-CA02光端机具有运行主要技术参数的监测功能&#xff…

最大连续1的个数 ||| ---- 滑动窗口

题目链接 题目: 分析: 题目中说可以将最多k个0翻转成1, 如果我们真的这样算就会十分麻烦, 所以我们可以换一种思路: 找到一个最长的子数组, 最多有k个0解法一: 暴力解法: 找到所有的最多有k个0的子字符串, 返回最长的解法二: 找到最长的子数组, 我们可以想到"滑动窗口算…

怎么给字符串字段加索引?

怎么给字符串字段加索引&#xff1f; 现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引&#xff0c;是我们今天要讨论的问题。 假设&#xff0c;你现在维护一个支持邮箱登录的系统&#xff0c;用户表是这么定义的&#xff1a; …

word 表格 文字 上下居中

问题 word 表格 文字 上下居中 详细问题 笔者进行word 文档编辑&#xff0c;对于表格中的文本内容&#xff0c;如何进行上下居中&#xff1f; 解决方案 步骤1、选中需要进行操作的单元格 步骤2、右键 → \rightarrow →点击表格属性 步骤3、依次点击单元格 → \rightar…

回溯算法解决组合问题

文章目录 回溯算法组合问题回溯算法在组合问题上的运用例题Leetcode 77. 组合Leetcode 216. 组合总和 IIILeetcode 17. 电话号码的字母组合 回溯算法 回溯算法是一种搜索方式&#xff0c;本质上其实就是穷举出所有可能&#xff0c;然后筛选出我们想要的答案。 回溯算法的效率…
最新文章