electron的常用api

官方文档
https://www.electronjs.org/zh/docs/latest/api/app

Electron API 详细文档

目录

  1. app 模块
  2. BrowserWindow 模块
  3. ipcMainipcRenderer 模块
  4. 系统资源 模块
  5. dialog 模块
  6. menuMenuItem 模块
  7. shell 模块
  8. clipboard 模块
  9. powerMonitor 模块
  10. systemPreferences 模块
  11. globalShortcut 模块
  12. 其他常用模块
  13. 最佳实践和注意事项

app 模块

app 模块用于控制应用的生命周期,是整个应用的入口模块。一般在 Electron 项目的 main.js 文件中引用并初始化 app

  • 基本配置和生命周期事件

    • app.on('ready'):表示 Electron 已经初始化完毕,可以创建浏览器窗口。
    • app.on('window-all-closed'):监听所有窗口关闭,通常用于在非 macOS 系统中退出应用。
    • app.on('before-quit'):在应用退出前执行一些清理操作,比如保存状态、释放资源。
    • app.on('activate'):macOS 专用,用户点击 dock 图标时重新打开窗口。
  • 常用方法

    • app.quit():退出应用。
    • app.relaunch():重新启动应用,用于应用更新等场景。
    • app.getAppPath():返回应用的根目录路径。
    • app.getPath(name):获取应用特定目录的路径(如缓存、临时文件、用户数据等)。
    • app.setAppUserModelId():设置应用的用户模型 ID,提升在 Windows 上的通知能力。
  • 示例

    const { app } = require('electron');app.on('ready', () => {createMainWindow(); // 创建主窗口
    });app.on('window-all-closed', () => {if (process.platform !== 'darwin') {app.quit();}
    });app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) {createMainWindow();}
    });
    

BrowserWindow 模块

BrowserWindow 模块用于创建和管理应用中的窗口,是 Electron 的核心组件。

  • 创建窗口的配置项

    • widthheight:窗口宽度和高度。
    • fullscreen:是否全屏显示。
    • resizable:窗口是否可以调整大小。
    • transparent:设置透明窗口。
    • frame:设置无边框窗口(通常用于自定义窗口界面)。
  • webPreferences 选项

    • nodeIntegration:是否在渲染进程中启用 Node.js(通常为 false,以提高安全性)。
    • contextIsolation:启用上下文隔离,提升安全性。
    • preload:指定预加载脚本的路径,常用于安全地与渲染进程通信。
  • 示例

    const { BrowserWindow } = require('electron');
    let win = new BrowserWindow({width: 800,height: 600,webPreferences: {nodeIntegration: false,contextIsolation: true,preload: path.join(__dirname, 'preload.js')}
    });win.loadURL('https://example.com');
    
  • 窗口事件

    • closed:窗口关闭时触发。
    • focusblur:窗口获得或失去焦点时触发。

ipcMainipcRenderer 模块

ipcMainipcRenderer 模块是主进程和渲染进程之间的通信桥梁。

  • ipcMain 用法

    const { ipcMain } = require('electron');ipcMain.on('message-from-renderer', (event, arg) => {console.log('Received:', arg);event.reply('message-from-main', 'Hello from main process');
    });
    
  • ipcRenderer 用法

    const { ipcRenderer } = require('electron');
    ipcRenderer.send('message-from-renderer', 'Hello from renderer process');ipcRenderer.on('message-from-main', (event, response) => {console.log('Main said:', response);
    });
    
  • 异步通信示例

    // main.js
    ipcMain.handle('async-message', async (event, data) => {return await someAsyncFunction(data);
    });// renderer.js
    const response = await ipcRenderer.invoke('async-message', 'Hello');
    

Electron 系统资源相关模块

os 模块

os 模块来自 Node.js,可以直接在 Electron 中使用,用于获取操作系统的信息,如 CPU、内存、网络接口等。

常用方法

  • os.platform():返回操作系统平台(如 win32、linux、darwin)。
  • os.type():返回操作系统类型(如 Windows_NT、Linux、Darwin)。
  • os.arch():返回 CPU 架构(如 x64、arm)。
  • os.cpus():返回一个对象数组,包含每个逻辑 CPU 内核的信息。
  • os.totalmem():返回系统的总内存,以字节为单位。
  • os.freemem():返回空闲的系统内存,以字节为单位。
  • os.networkInterfaces():返回网络接口的详细信息。
  • os.uptime():返回系统已启动时间,以秒为单位。
    示例

const os = require('os');console.log('操作系统平台:', os.platform());
console.log('操作系统类型:', os.type());
console.log('CPU 架构:', os.arch());
console.log('CPU 信息:', os.cpus());
console.log('总内存:', os.totalmem() / (1024 ** 3), 'GB');
console.log('空闲内存:', os.freemem() / (1024 ** 3), 'GB');
console.log('网络接口:', os.networkInterfaces());
console.log('系统已启动时间:', os.uptime(), '秒');

process 模块

process 模块用于访问应用和系统的进程信息,包括内存使用、Node.js 版本等。

常用属性和方法

  • process.platform:当前平台,和 os.platform() 类似。
  • process.arch:当前 CPU 架构。
  • process.memoryUsage():返回一个对象,包含当前应用的内存使用情况。
  • process.uptime():返回当前应用的运行时间。
  • process.getCPUUsage():返回 CPU 使用信息(Electron 特有)。
  • process.versions:返回一个对象,包含 Node.js、V8 引擎等版本信息。
  • process.env:系统环境变量。
    示例

console.log('平台:', process.platform);
console.log('架构:', process.arch);
console.log('内存使用情况:', process.memoryUsage());
console.log('应用运行时间:', process.uptime(), '秒');
console.log('CPU 使用情况:', process.getCPUUsage());
console.log('Node.js 版本:', process.versions.node);
console.log('V8 引擎版本:', process.versions.v8);
powerMonitor 模块

powerMonitor 是 Electron 专有模块,用于监控系统的电源状态。它可以监听系统的睡眠、唤醒等状态,非常适合用于节能、恢复操作等场景。

常用事件
suspend:系统进入睡眠模式时触发。
resume:系统从睡眠模式恢复时触发。
on-ac:设备切换到交流电源时触发。
on-battery:设备切换到电池供电时触发。
示例


const { powerMonitor } = require('electron');powerMonitor.on('suspend', () => {console.log('系统进入睡眠模式');
});powerMonitor.on('resume', () => {console.log('系统恢复');
});powerMonitor.on('on-ac', () => {console.log('系统已切换到交流电源');
});powerMonitor.on('on-battery', () => {console.log('系统已切换到电池供电');
});
systemPreferences 模块(macOS 和 Windows)

systemPreferences 模块主要用于访问系统的一些偏好设置和配置信息,特别是用户界面的外观设置,比如暗黑模式、通知权限等。

常用方法

  • systemPreferences.isDarkMode():判断当前系统是否为暗黑模式。
  • systemPreferences.isInvertedColorScheme():判断系统是否使用反转颜色方案。
  • systemPreferences.getUserDefault(key, type):获取系统配置项(仅 macOS 支持)。
    systemPreferences.askForMediaAccess():请求应用的媒体设备访问权限(macOS)。
    示例

const { systemPreferences } = require('electron');if (systemPreferences.isDarkMode()) {console.log('当前系统为暗黑模式');
}systemPreferences.getUserDefault('AppleInterfaceStyle', 'string');
os-utils 第三方库

os-utils 是一个 Node.js 库,专门用于实时获取系统资源使用情况,比如 CPU 使用率、空闲率等。虽然不是 Electron 自带模块,但可安装并在 Electron 中使用。

安装

npm install os-utils

使用示例

const os = require('os-utils');os.cpuUsage(function(v){console.log('CPU 使用率 (%): ' + v * 100);
});os.freememPercentage(function(v){console.log('空闲内存比例 (%): ' + v * 100);
});

dialog 模块

dialog 模块提供了系统的对话框,可以显示消息、警告、错误提示等。

  • 文件对话框示例

    const { dialog } = require('electron');
    dialog.showOpenDialog({properties: ['openFile', 'multiSelections']
    }).then(result => {console.log('Selected files:', result.filePaths);
    });
    
  • 消息框示例

    dialog.showMessageBox({type: 'info',title: 'Information',message: 'Operation Successful',buttons: ['OK', 'Cancel']
    }).then(result => {console.log('User selected button:', result.response);
    });
    

menuMenuItem 模块

通过 menuMenuItem 可以创建自定义的菜单项,如文件菜单、上下文菜单。

  • 创建菜单并应用
    const { Menu, MenuItem } = require('electron');const menu = new Menu();
    menu.append(new MenuItem({ label: 'Copy', role: 'copy' }));
    menu.append(new MenuItem({ label: 'Paste', role: 'paste' }));Menu.setApplicationMenu(menu); // 设置为应用全局菜单
    

shell 模块

shell 模块允许在系统中打开外部链接、文件管理器、启动外部程序等。

  • 打开文件管理器

    const { shell } = require('electron');
    shell.showItemInFolder('/path/to/file');
    
  • 在默认浏览器中打开链接

    shell.openExternal('https://example.com');
    

clipboard 模块

clipboard 模块用于读写系统剪贴板的内容,支持文本、HTML 等多种数据格式。

  • 读写剪贴板
    const { clipboard } = require('electron');
    clipboard.writeText('Hello, Electron!');
    console.log(clipboard.readText()); // 输出 "Hello, Electron!"
    

powerMonitor 模块

powerMonitor 模块监控系统电源状态,如系统唤醒、待机。

  • 监听电源事件
    const { powerMonitor } = require('electron');
    powerMonitor.on('suspend', () => {console.log('系统进入待机状态');
    });powerMonitor.on('resume', () => {console.log('系统恢复');
    });
    

systemPreferences 模块

systemPreferences 模块用于访问系统的一些偏好设置,支持获取颜色模式、通知权限等。

  • 常用操作
    const { systemPreferences } = require('electron');
    if (systemPreferences.isDarkMode()) {console.log('当前为暗色模式');
    }
    

globalShortcut 模块

globalShortcut 模块用于注册全局快捷键,可以在应用不活跃时捕获键盘输入。

  • 注册和注销快捷键
    const { app, globalShortcut } = require('electron');app.whenReady().then(() => {globalShortcut.register('CommandOrControl+X', () => {console.log('全局快捷键按下');});
    });app.on('will-quit', () => {globalShortcut.unregisterAll();
    });
    

其他常用模块

  • screen 模块:可以获取系统显示器信息,用于多显示器支持。

nativeTheme 模块:可以获取或设置应用的主题模式。

最佳实践和注意事项

  • 安全性

    • 禁用 nodeIntegration 和启用 contextIsolation 以减少安全风险。
    • 使用 preload 脚本进行主、渲染进程通信,避免直接暴露 Node.js API。
  • 性能优化

    • 延迟加载窗口或使用懒加载方式。
    • 避免过多的渲染进程间通信。
  • 打包和发布

    • 使用 electron-builderelectron-packager 打包应用,支持跨平台打包配置。
    • 为应用设置自动更新,Electron 支持集成自动更新功能,如 Squirrel、electron-updater 等。

以上是 Electron 的核心 API 详细说明。通过这些模块的组合,你可以构建具有丰富交互功能的桌面应用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

yarn的安装与使用以及与npm的区别(安装过程中可能会遇到的问题)

一、yarn的安装 使用npm就可以进行安装 但是需要注意的一点是yarn的使用和node版本是有关系的必须是16.0以上的版本。 输入以下代码就可以实现yarn的安装 npm install -g yarn 再通过版本号的检查来确定,yarn是否安装成功 yarn -v二、遇到的问题 1、问题描述…

【Qt】控件——Qt控件的介绍、QWidget的介绍、QWidget的属性、QWidget的函数

文章目录 Qt1. 控件的概念2. QWidgetenabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTiptoolTipDuringstyleSheet Qt 1. 控件的概念 Widget 是 Qt 中的核心概念。英文原义是 “小部件”,我们此处也把它翻译为 “控件”。控件是构成一个图形化界面…

算法剖析:二分查找

文章目录 前言二分查找模板朴素模板左右查找模板 一、二分查找二、 在排序数组中查找元素的第一个和最后一个位置三、搜索插入位置四、x 的平方根五、山脉数组的峰顶索引六、寻找峰值七、寻找旋转排序数组中的最小值八、 点名总结 前言 二分查找是一种高效的查找算法&#xff…

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页功能界面图 用户注册、登录界面图 我…

时间序列预测(十)——长短期记忆网络(LSTM)

目录 一、LSTM结构 二、LSTM 核心思想 三、LSTM分步演练 (一)初始化 1、权重和偏置初始化 2、初始细胞状态和隐藏状态初始化 (二)前向传播 1、遗忘门计算(决定从上一时刻隐状态中丢弃多少信息) 2、…

基于.NET 8.0,C#中Microsoft.Office.Interop.Excel来操作office365的excel

开发环境: Visual Studio 2022 office365 项目模板:WPF应用程序 框架:.NET 8.0 依赖:Microsoft.Office.Interop.Excel 注意: 1.使用Microsoft.Office.Interop.Excel库时,服务器或电脑里面必须安装得…

qt QLineEdit详解

一、概述 QLineEdit 是 Qt 框架中用于创建单行文本输入框的类。它非常适合用于接收用户输入,例如用户名、密码或其他简单的文本信息。它提供了许多有用的编辑功能,支持多种输入模式和文本限制,并支持撤销、重做、剪切、粘贴以及拖放等功能。…

【AI服务器】全国产PCIe 5.0 Switch SerDes 测试和分析,以11槽PCIe GPU底板(PCIe 4.0/5.0)为例(二)

3 PCIe 4.0 SerDes 和 5.0 SerDes 要求比较 表 2 总结 PCIe 4.0 和 5.0 SerDes 要求之间的差 异。PCIe 标准包含三个相互依赖的规范,这些规范 旨在确保不同供应商的 SerDes 和通道的互操作性: ● PCIe BASE 规范定义了整个协议栈的芯片 级性能,是一…

使用QT绘图控件QCustomPlot绘制波形图

使用QT绘图控件QCustomPlot绘制波形图 下载QCustomPlot 下载QCustomPlot,链接路径 解压之后就能看到源代码了 在Qt中添加QCustomPlot的帮助文档 在Qt Creator的菜单:工具–>选项–>帮助–>文档–>添加qcustomplot\documentation\qcustomplot.qch文件。

Elasticsearch基本使用及介绍

Elasticsearch 1. 关于各种数据库的使用 关于MySQL:是关系型数据库,能清楚的表示数据之间的关系,并且,是基于磁盘存储的,可以使用相对较低的成本存储大量的数据 关于Redis:是基于K-V结构的在内存中读写数…

同世界,共北斗|遨游通讯亮相第三届北斗规模应用国际峰会!

10月24日,第三届北斗规模应用国际峰会在湖南省株洲市隆重开幕,此次峰会以“同世界,共北斗”为主题,旨在加速北斗系统的市场化进程、促进其产业化布局及国际化拓展。全国政协副主席、农工党中央常务副主席杨震讲话并宣布开幕&#…

【赵渝强老师】Oracle的联机重做日志文件与数据写入过程

在Oracle数据库中,一个数据库可以有多个联机重做日志文件,它记录了数据库的变化。例如,当Oracle数据库产生异常时,导致对数据的改变没有及时写入到数据文件中。这时Oracle数据库就会根据联机重做日志文件中的信息来获得数据库的变…

上传Gitee仓库流程图

推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台,为用户提供强大、易用的作图工具!支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…

立志最细,FreeRtos中 中断、 调度器、的屏蔽/恢复,详解!!!

#1024程序员节征文|征文# 前言:本文参考,韦东山开发文档,连接最后 任务调度器 任务调度器(scheduler),在FreeRtos操作系统中,主要负责多任务之间的切换,确保系统按照优先级和多任务的并发的方式去运行&…

为Windows Terminal 配置zsh + Oh-My-Zsh!

参考: 为Windows Terminal 配置zsh Oh-My-Zsh! [非WSL] https://zhuanlan.zhihu.com/p/625583037 Package: zsh - MSYS2 Packages 安装配置 1、安装 Windows Terminal(必须) Method 1: 打开 Microsoft Store,搜索 “Windows Terminal”。点击 “…

K最近邻算法

一、近朱者赤,近墨者黑 通常称对门、楼上、楼下和隔壁均是我们的邻居。为什么呢?离得近呗。 “近朱者赤近墨者黑”“昔孟母,择邻处”等充分说明了邻居对我们的重要性。基本上你的邻居是什么人,你也是什么人。假如你楼上是马云&am…

操作系统期末|考研复习知识点汇总 - 持续更新

本文将根据个人学习进度对b站王道408课程以及题目考察的知识点进行整合,视频中详细的导图将会直接复用,并且将会对一些重点知识进行扩展以及一些思维导图的补充,目前第三章内容正在整理中…… 一:计算机系统概述 1.1操作系统概念…

DockerCompose快速部署Java项目、nginx前端和mysql数据库到centos虚拟机

简介:整理自:SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)课程的飞书文档。 DockerCompose介绍 大家可以看到,我们部署一个简单的java项…

实现可扩展人工智能的便捷之路:英特尔 Tiber 开发者云 + MinIO 对象存储

当今组织在 AI 和数据管理方面面临的最大挑战之一是获得可靠的基础设施和计算资源。英特尔 Tiber 开发人员云专为需要概念验证、实验、模型训练和服务部署环境的工程师而构建。与其他难以接近且复杂的云不同,英特尔 Tiber 开发人员云简单易用。该平台对于开发各种类…