当前位置: 首页 > news >正文

[Electron]中IPC进程间通信

Electron中IPC

进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。在 Electron 中,进程使用 ipcMain 和 ipcRenderer 模块,通过开发人员定义的“通道”传递消息来进行通信。

本文介绍以下几个方面:

  • 1-渲染进程到主进程(单项)

ipcRender.send()
  • 2-主进程到渲染进程(单项)

WebContents.send()
  • 3-渲染进程到到主进程(双向)

ipcRender.invoke(渲染进程)
ipcMain.handle(主进程)

1.渲染进程到主进程

  • 渲染进程通过ipcRender.send()API发送消息

  • 主进程通过ipcMain.on()API接受信息

2.主进程到渲染进程

  • 主进程通过WebContents.send()发送数据

  • 渲染进程通过ipcRender.on()获取数据

3.渲染进程到主进程(双向)

  • 渲染进程通过invoke调用API

  • 主进程通过handle处理API

示例

功能:

  • 渲染进程发送111到主进程

  • 主进程发送222到渲染进程

  • 渲染进程invoke主进程

// main.js
const { app, BrowserWindow,ipcMain } = require("electron")
const path = require("path")
var id = "";
const createWindow = () => {const win = new BrowserWindow({width: 800,height: 600,show: false,webPreferences:{preload:path.join(__dirname,"./preload.js")}})win.loadFile("./index.html")win.show()id = win.id
}
​
app.whenReady().then(() => {createWindow()
})
​
ipcMain.on("messageToMain",(event,text)=>{// ipcMain.on 来接收渲染进程发送的数据console.log("主进程从渲染进程接收到的数据:"+text);// 获取当前窗口// BrowserWindow.webContents.send 发送数据BrowserWindow.fromId(id).webContents.send("messageFromMain","222")
})
​
// ipcMain.handle 返回invoke调用
ipcMain.handle("getData",()=>{return "333"
})
​
​
app.on("window-all-closed", () => {app.quit()
})
// preload.js
const { contextBridge, ipcRenderer } = require("electron")
contextBridge.exposeInMainWorld("electronIpc", {// 预加载脚本暴露 ipcRenderer.sendsend: (text) => { ipcRenderer.send('messageToMain', text) },// 预加载脚本暴露 ipcRenderer.ononGet: (callback) => {ipcRenderer.on("messageFromMain", (event, text) => {callback(text)})},// 预加载脚本暴露 ipcRenderer.invokegetData: () => { return ipcRenderer.invoke("getData") }
})
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Electron的ipc通讯</title>
</head>
<body><h2>渲染进程到主进程(单向)</h2><div><button id="btnToMain">渲染进程发送到主进程</button></div><div><input type="text" id="sendText"></div><br><br><div>收到主进程发送到渲染进程的消息:</div><div><input type="text" id="messageFromMain" style="width: 300px;"></div><br><div><button id="btnInvoke">渲染进程invoke主进程</button></div><div><input type="text" id="messageInvokeMain" style="width: 300px;"></div><script src="./index.js"></script>
</body>
</html>
// index.js
window.onload = () => {var btnToMain = document.getElementById("btnToMain");btnToMain.addEventListener("click", () => {var sendText = document.getElementById("sendText").value;window.electronIpc.send(sendText)})
​window.electronIpc.onGet((text) => {var messageFromMain = document.getElementById("messageFromMain");messageFromMain.value = text;})
​var btnInvoke = document.getElementById("btnInvoke");btnInvoke.addEventListener("click",async ()=>{var getData = await window.electronIpc.getData();var messageInvokeMain = document.getElementById("messageInvokeMain");messageInvokeMain.value = getData;})
}

效果

相关文章:

[Electron]中IPC进程间通信

Electron中IPC 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。在 Electron 中&#xff0c;进程使用 ipcMain 和 ipcRenderer 模块&#xff0c;通过开发人员定义的“通道”传递消息来进行通信。 本文介绍以下几个方面&#xff1a; 1-渲染进程到…...

数学建模-动态规划(美赛运用)

动态规划模型的要素是对问题解决的抽象&#xff0c;其可分为&#xff1a; 阶段。指对问题进行解决的自然划分。例如&#xff1a;在最短线路问题中&#xff0c;每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如&#xff1a;在最短线路问题中&#xff…...

bat文件给多个Android设备安装apk

本文是安装一个apk 1、确保以下3个文件在同一个目录下 1>要安装的apk&#xff0c;这里是mmb.apk 2>设备名单&#xff0c;保存在.txt文件中&#xff0c;一行一个设备名&#xff0c;设备名通过adb devices获取&#xff0c;截图中是两个设备 txt文件中的样式 3>要运行…...

[数据集][目标检测]光伏板太阳能板缺陷检测数据集VOC+YOLO格式2400张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2400 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注…...

深入浅出计算机网络 day.1 概论④ 计算机网络的定义和分类

不要退却&#xff0c;要绽放魅力 我的心会共鸣 和你 —— 24.3.9 一、计算机网络的定义 计算机网络早期的一个最简单定义 现阶段计算机网络的一个较好的定义 二、计算机网络的分类 按交换方式分类 按使用者分类 按传输介质分类 按覆盖范围分类 按拓扑结构分类&#xff0c;可…...

rust引用-借用机制扩展

rust引用-借用机制还是有限制的&#xff0c;比如我们要在多次函数调用中修改参数、跨线程传递参数并发修改的场景&#xff0c;单纯使用引用-借用机制就不灵了&#xff08;这种场景和引用-借用设计思想是冲突的&#xff09;。这时需要借助rust提供的Rc、Arc、Cell、RefCell对机制…...

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.3 本地方法栈&#xff08;线程私有&#xff09; 3.4 程序计数器&#xff08;线程私有&#xff09; 3.5 方法区&#xff08;线程共享&#xff09; 4.JVM 类加载 ① 类…...

kibana配置 dashbord,做可视化展示

一、环境介绍 这里我使用的kibana版本为7.17版本。 语言选择为中文。 需要已经有es&#xff0c;已经有kibana&#xff0c;并且都能正常访问。 二、背景介绍 kibana的可视化界面&#xff0c;可以配置很多监控统计界面。非常方便&#xff0c;做数据的可视化展示。 这篇文章&…...

前后端分离项目Docker部署指南(下)

目录 前言&#xff1a; 一.安装nginx 创建目录 上传nginx.conf至/data/nginx/conf文件夹中 运行启动容器 上传静态资源文件 ​编辑 访问结果 前言&#xff1a; 在上一篇博客中&#xff0c;我们深入探讨了如何使用Docker部署一个前后端分离的项目中的后端部分。我们构建…...

算法->位运算

有关位运算的操作符 >> <<&|^~ 常见位运算操作 给定一个数&#xff0c;确定它的二进制中第x位是0还是1 (n >> x) & 1; 将一个数n的二进制中第x位修改为1 n | (1 << x) 将一个数n的二进制中第x位修改为0 n & (~(1 << x)) 提…...

【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib‘

【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448…...

centos7中python3.10找不到openssl解决方案

如果有用其他方法安装了其他版本openssl&#xff0c;记得卸载其他的openssl&#xff0c;删除其他的openssl相关文件。 yum remove openssl* rm -rf ***下载最新版的openssl文件 按照官网安装方法安装openssl 官方安装地址https://docs.python.org/3/using/unix.html#on-linu…...

【Spring Boot `@Autowired` Annotation】

文章目录 1. 使用Qualifier注解2. 使用Primary注解3. 手动注入&#xff08;较少推荐&#xff09; 在Spring Boot中&#xff0c;Autowired注解用于自动装配bean。默认情况下&#xff0c;它按照类型进行装配。当存在多个相同类型的bean时&#xff0c;就会出现以下错误&#xff1a…...

03.axios数据提交和错误处理

一.axios常用请求方法和数据提交 1. 想要提交数据&#xff0c;先来了解什么是请求方法 请求方法是一些固定单词的英文&#xff0c;例如&#xff1a;GET&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE&#xff0c;PATCH&#xff08;这些都是http协议规定的&#xff09;&am…...

无人机生态环境监测、图像处理与GIS数据分析

构建“天空地”一体化监测体系是新形势下生态、环境、水文、农业、林业、气象等资源环境领域的重大需求&#xff0c;无人机生态环境监测在一体化监测体系中扮演着极其重要的角色。通过无人机航空遥感技术可以实现对地表空间要素的立体观测&#xff0c;获取丰富多样的地理空间数…...

centos7.9升级ssh和openssl

一、环境 [roottmp179 package]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 [roottmp179 package]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 二、 升级前准备 mkdir /opt/package cd /opt/package wget https://www.openssl.org/source…...

HttpURLConnection详解及使用

HttpURLConnection 请求响应流程 设置连接参数的方法 setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches 发送URL请求 建立实际连接之后&#xff0c;就是发送请求&#xff0c;把请求参数传到…...

npm下载时下载失败解决方法

1.清楚缓存 npm cache clean --force2.切换下载镜像 1.查看当前使用的镜像地址命令 npm config get registry切换为淘宝镜像命令&#xff08;安装一些package容易报错&#xff09; npm config set registry https://registry.npm.taobao.org或官方&#xff1a; npm config…...

Python实战:浅析Python输入输出理解数据交换的基本原理

在Python编程中&#xff0c;输入输出是数据交换的基础。本文将深入探讨Python中的输入输出功能&#xff0c;包括标准输入输出、文件输入输出、格式化输出等。我们将通过具体的代码示例来展示如何使用Python进行数据输入和输出&#xff0c;并理解其背后的工作原理。 1. 标准输入…...

MySQL--explain执行计划详解

什么是执行计划&#xff1f; SQL的执行计划&#xff0c;通俗来说就是SQL的执行情况&#xff0c;一条SQL语句扫描哪些表&#xff0c;那个子查询先执行&#xff0c;是否用到了索引等等&#xff0c;只有当我们知道了这些情况之后才知道&#xff0c;才可以更好的去优化SQL&#xf…...

iOS开发者必看:3分钟搞定Provision Profile设备UDID添加(2024最新版)

iOS开发者高效管理Provision Profile&#xff1a;2024年UDID添加全指南 每次团队加入新测试设备时&#xff0c;Provision Profile的更新就像一场与Xcode的捉迷藏游戏。上周刚帮新同事添加设备UDID时&#xff0c;发现Apple Developer后台又悄悄更新了界面布局&#xff0c;这已经…...

TI C2000 DSP2837xD双核开发避坑指南:手把手配置IPC通信与共享内存

DSP2837xD双核开发实战&#xff1a;从零构建稳定IPC通信系统的关键技巧 第一次接触TI C2000双核DSP时&#xff0c;面对2837xD芯片的IPC通信配置&#xff0c;大多数工程师都会经历从兴奋到困惑再到豁然开朗的过程。作为实时控制领域的核心处理器&#xff0c;DSP2837xD凭借其双C…...

Spring Boot 3 整合 GraalVM 原生镜像:启动快 10 倍,内存省一半

本文基于一个真实电商订单查询服务的 Native Image 改造过程&#xff0c;从环境搭建到生产部署&#xff0c;包含所有踩坑细节与最终性能数据。版本环境&#xff1a; Spring Boot 3.2.4 GraalVM CE 21.0.2 Maven 3.9.6 Docker 24 CentOS 7背景&#xff1a;一个启动 12 秒的微…...

用于街头拍摄的摄像头

1 充电宝2 太阳能板我觉得用充电宝&#xff0c;物联网低功耗摄像头就可以了&#xff0c;因为录制的视频是等到拿回去以后再分析的&#xff0c;不用联网&#xff0c;联网是为了确保摄像头的安全&#xff0c;不被别人拿走。但是这个安装的过程&#xff1a;1 如果晚上12点去安装&a…...

如何快速通过手机号找回QQ账号:Python工具终极指南

如何快速通过手机号找回QQ账号&#xff1a;Python工具终极指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾经因为忘记QQ号而无法登录工作群聊&#xff0c;或者因为更换手机导致重要账号无法找回&#xff1f;现在&#x…...

论文过审双保险:降重 + 消 AI 痕迹一步到位|虎贲等考 AI 改写不踩雷、更安全

每到论文定稿、盲审、答辩阶段&#xff0c;重复率超标和AIGC 痕迹被检出已经成为两大 “致命卡点”。不管是自己写的、AI 辅助的、还是整合文献整理的&#xff0c;只要系统标红、提示 AI 生成&#xff0c;轻则反复修改&#xff0c;重则影响答辩资格。市面上普通改写工具只会同义…...

别再手动画圈了!用高德猎鹰服务API+Postman,5分钟搞定电子围栏(附完整请求参数)

高德猎鹰服务API实战&#xff1a;5分钟构建智能电子围栏系统 在物流追踪、共享设备管理和人员定位等场景中&#xff0c;电子围栏技术正成为空间智能化的核心组件。传统管理后台的手动绘制方式不仅效率低下&#xff0c;更难以应对批量操作需求。本文将展示如何通过高德猎鹰服务…...

UniApp打包小程序,从‘巨无霸’到‘苗条身材’的完整瘦身方案(HBuilderX CLI双版本指南)

UniApp打包小程序&#xff0c;从‘巨无霸’到‘苗条身材’的完整瘦身方案&#xff08;HBuilderX & CLI双版本指南&#xff09; 在移动互联网时代&#xff0c;小程序因其轻量级特性而广受欢迎&#xff0c;但这也意味着对包大小的严格限制。当UniApp项目逐渐壮大&#xff0c…...

RePaint: 基于去噪扩散概率模型的图像修复技术解析与实践

1. RePaint技术为什么让人眼前一亮&#xff1f; 第一次看到RePaint论文时&#xff0c;最让我惊讶的是它完全跳出了传统图像修复的思维框架。以往我们做老照片修复或者去除图片中的水印&#xff0c;都需要先训练一个针对特定任务的模型。比如要修复人脸&#xff0c;就得准备大量…...

电子工程师必看:深度负反馈电路的5个实战应用技巧(附电路图)

电子工程师必看&#xff1a;深度负反馈电路的5个实战应用技巧&#xff08;附电路图&#xff09; 在电子工程领域&#xff0c;负反馈电路就像是一位隐形的调音师&#xff0c;默默修正着放大器的每一个音符。但真正让工程师们又爱又恨的&#xff0c;是那些需要深度负反馈的特殊场…...