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

Electron 多显示器渲染

Electron打出的包,如果当前有俩个显示器,则可以配置当前显示倒哪个显示器上,或者可以配置不同的显示器,启动不同的项目,只在WindowsLinux下测试过,Mac没有真机,可以利用docker安装MacOS环境,按理说没问题,具体怎么配置,如下:

const { app, BrowserWindow, ipcMain, Menu, electron, screen } = require('electron')// 禁用沙盒渲染器
app.enableSandbox()
// 禁用硬件加速/GPU渲染
app.disableHardwareAcceleration()
// 不初始化菜单,使用默认菜单
Menu.setApplicationMenu(null)// 创建应用
function createWindow() {// 判断当前的窗口数量let displays = screen.getAllDisplays()// 判断是否副窗口let externalDisplay = displays.find((display) => {return display.bounds.x !== 0 || display.bounds.y !== 0})// 如果是副窗口if (externalDisplay) {// 创建应用_create({ x: externalDisplay.bounds.x + 500, y: externalDisplay.bounds.y + 50 })}// 创建应用_create()
}// Electron 结束初始化
app.whenReady().then(() => {// 400毫秒延迟,解决在Linux部分文件类型中,透明不生效的bugsetTimeout(_ => {// 创建应用createWindow()}, 400)// 通常在 macOS 上,当点击 dock 中的应用程序图标时,如果没有其他app.on('activate', function () {// 打开的窗口,那么程序会重新创建一个窗口。if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})

然后调用_create事件

/*** @description 创建应用实例* @param {Object} option: 附加参数*/
function _create(option = {}) {let programWindow // 主屏let baseConfig = {fullscreen: true, // 全屏webPreferences: {preload: path.join(__dirname, 'preload.js'),devTools: false, // 开发者工具sandbox: false // 禁用沙盒},frame: false, // 禁用frametitleBarStyle: 'hidden', // 隐藏bartitleBarStyle: 'customButtonsOnHover',transparent: true, // 窗口透明alwaysOnTop: true, // 是否置顶backgroundColor: 'rgba(0, 0, 0, 0)' // 背景颜色}// 创建浏览器窗口if (option.x) {programWindow = new BrowserWindow(Object.assign(option, baseConfig))} else {programWindow = new BrowserWindow(baseConfig)}// 判断当前的环境,如果是开发if (!app.isPackaged) {programWindow.loadURL("http://10.0.128.101/#/?from=socluster&clientServer=true") // 将该行改为下面这一行,加载url} else {// 加载 index.htmlprogramWindow.loadURL("http://127.0.0.1/#/?from=socluster&clientServer=true") // 将该行改为下面这一行,加载url}// 监听退出ipcMain.on('quit', (event, title) => {// 销毁应用程序programWindow.destroy()})// 打开开发工具// programWindow.webContents.openDevTools()
}

效果图:
在这里插入图片描述

相关文章:

  • 【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建
  • 【01】区块链科普100天-模块化区块链
  • Linux性能即时评估60秒秘籍
  • 掌握未来技术:一站式深度学习学习平台体验!
  • LabVIEW开发FPGA的高速并行视觉检测系统
  • 《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏
  • 云原生环境中的自动化测试成功案例分析
  • 重拾C++之菜鸟刷算法第7篇---二叉树(上)
  • 嵌入式面试常见问题(四)
  • Python执行 nohup 导致僵尸进程问题. /usr/bin/sh -> /usr/bin/bash
  • [蓝桥杯 2020 省 B2] 试题 E:七段码
  • 【AI Agent系列】【MetaGPT多智能体学习】4. 基于MetaGPT的Team组件开发你的第一个智能体团队
  • 谷歌seo推广秒收录怎么做?
  • 使用git的小笔记
  • 【ArcPy】游标访问几何数据
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Django 博客开发教程 8 - 博客文章详情页
  • Gradle 5.0 正式版发布
  • java小心机(3)| 浅析finalize()
  • magento2项目上线注意事项
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • vue 配置sass、scss全局变量
  • vue中实现单选
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 笨办法学C 练习34:动态数组
  • 从输入URL到页面加载发生了什么
  • - 概述 - 《设计模式(极简c++版)》
  • 理解在java “”i=i++;”所发生的事情
  • 前端攻城师
  • 前端性能优化--懒加载和预加载
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 突破自己的技术思维
  • C# - 为值类型重定义相等性
  • kubernetes资源对象--ingress
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #include
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Java数据结构)ArrayList
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)http协议
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .gitignore文件—git忽略文件
  • .NET CLR Hosting 简介
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • /etc/shadow字段详解
  • /proc/vmstat 详解
  • ??在JSP中,java和JavaScript如何交互?