图4.1 我们的应用程序将在启动时触发“打开文件”对话框。到本章结束时,此功能将被从UI触发对话框的功能所取代。 您可以使用Electron dialog模块创建本机对话框。...在本例中,我们只激活openFile标志,它表示此对话框用于选择要打开的文件,而不是选择多个目录或多个文件。其他可用的标志是openDirectory和multiselection。...在图4.3中,我们可以在终端中显示的"Open File"对话框中看到选择的结果。注意dialog.showOpenDialog()返回一个数组。...通过在配置对象之前传递对BrowserWindow实例的引用(我们已经将其存储在mainWindow中)作为dialog.showOpenDialog()的第一个参数,我们可以轻松地在Electron中创建这个...打开对话框可以配置为允许一个文件或目录以及多个文件或目录。 打开对话框可以配置为只允许用户选择特定的文件类型。 打开对话框返回一个数组,该数组由用户选择的一个或多个文件或目录组成。
在 Electron 在实现渲染进程到主进程通信时,无论是单向通信还是双向通信都必须经过:编写处理函数(主进程)、注册事件监听(主进程)、暴露 API(预加载脚本)和执行 API(渲染进程)4 个步骤。...{ const { canceled, filePaths } = await dialog.showOpenDialog({}) if (!...: 将原 business.ts 文件中的业务处理函数,修改为约定业务服务规范,在 @ServiceHandler 装饰器定义时增加一个区分单向或双向通信的标识。...OpenFileService { @ServiceHandler() async handleFileOpen() { const { canceled, filePaths } = await dialog.showOpenDialog...: ', result) } 总结 通过对 Electron 进程通信代码利用 TypeScript 装饰器进行封装,实现注册事件监听和暴露 API 的操作自动化,在遇到新的进程通信功能时仅需要按约定实现业务部分的核心服务后即可在渲染进程中直接执行
当该窗口关闭时,应用程序退出。虽然这种行为完全可以接受,但我们通常希望能够打开多个独立的窗口。在本章中,我们将Fire Sale从一个单窗口应用程序转换为一个支持多个窗口的应用程序。...这是因为我们仍然在一些地方引用mainWindow。它在dialog.showOpenDialog()中引用,以在macOS中将对话框显示为工作表。...const files = dialog.showOpenDialog(targetWindow, { //showopendialog()获取对浏览器窗口对象的引用。...在本节中,我们只允许应用程序在macOS中保持打开状态。默认情况下,当Electron触发它的window-all-closed事件时,它将退出应用程序。...图5.12 在应用程序打开时创建一个窗口,但没有窗口: .
嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发...调用系统API实现文件保存或读取前的选择功能: 如上图所示的功能,我们在使用电脑时就经常会遇到,在Electron中我们可以通过调用dialog.showOpenDialogSync函数同步打开下面的对话框...示例: 我们在App.vue中新增了一个openFIle函数,设置了默认的左上角标题,默认打开的文件路径,确认按钮文案和文件类型的过滤: openFile...Electron给我们提供关于对话框的API如下: API名称 主要参数 showOpenDialogSync [browserWindow, ]options showOpenDialog...菜单栏菜单: Electron提供的默认菜单栏中的菜单都是一些为了演示和开发使用的,在实际的应用中我们还是需要进行配置来实现我们自己的功能。
打开cmd.exe,一路cd到H:\Electron。(也可以在Electron文件夹下,按住Shift键并右键单击空白处,选择在此处打开命令窗口来启动cmd.exe。)...将notepad文件夹整个拖到VS Code中打开(或者点菜单文件-打开文件夹选择notepad文件夹打开项目),可以看一下项目的目录结构:node_modules文件夹下是各种模块、类库,src下是app...主菜单:因为菜单只存在于主进程中,所以在执行某些涉及页面(渲染进程)的菜单命令时,比如Open(打开文件)命令,就需要与渲染进程进行通信,这可以使用ipcMain和ipcRenderer来实现。...比如,这里,当主进程发来new的消息后,渲染进程就开始着手新建一个文档,在新建前会使用askSaveIfNeed方法检测文档是否需要保存,并提示用户保存;对于open的消息就会调用remote.dialog.showOpenDialog...退出时保存检测的实现过程 正如前面在App功能细节中讨论的一样,在关闭程序前,友好的做法是检测文档是否需要保存,如果尚未保存,通知用户保存。
欢迎来到Electron入门教程的第三期教程,这一节非常重要!进程间通信(IPC)是在Electron中构建功能丰富的桌面应用程序的关键部分。...✧ 渲染进程向主进程的单向通信 在Electron中,进程通过开发人员定义的“通道”与ipcMain模块和ipcRenderer模块进行通信。...在下面的例子中,我们将从渲染进程中打开一个选择本地文件对话框,并返回所选文件的路径。 下面是案例涉及的所有代码: index.html dialog.showOpenDialog() if (canceled) { return "" } else { return filePaths...,并监听ICP接口的调用 在主进程中,我们将创建一个调用dialog模块的showOpenDialog方法的函数handleFileOpen(),用于返回用户选择的文件路径的值。
dialog 模块是主进程模块,它允许我们在 Electron 应用程序中创建各种类型的对话框,包括警告框、信息框、文件选择框等。这些对话框可用于与用户交互,获取输入、展示消息、选择文件等操作。...一般会在渲染进程中想主进程发送信息,然后弹出消息框,这里为了代码演示方便,直接写到主进程了 const { app, BrowserWindow, dialog } = require('electron...使用它时,代码的执行会继续进行,不会停止在对话框显示期间。 dialog.showMessageBoxSync: 这是一个同步方法,会阻塞主线程直到用户关闭对话框。...使用它时,代码的执行会在对话框关闭之前停止。...; 文件选择框 显示选择文件的对话框 dialog.showOpenDialog({ properties: ['openFile'] }).then(result => { console.log
通信 在 ElectronEgg 中为了安全问题,不可以直接在渲染进程中调用 Nodejs中的相关操作。...1、在主线程中通过 ipcMain.on 监听事件 index.ts 主进程中加载脚本,设置事件监听 import { app, dialog, ipcMain, shell } from 'electron...在您的预加载脚本中添加以下代码,向渲染器进程暴露一个全局的 window.electronAPI 变量。...const { canceled, filePaths } = await dialog.showOpenDialog() if (!...() // 获取打开的文件夹路径 } 例:主进程的错误信息发送给渲染进程,通过界面显示出来 主进程到渲染器进程 将消息从主进程发送到渲染器进程时,消息需要通过其 WebContents 实例发送到渲染器进程
Excel导入导出 下载 npm install node-xlsx 代码中引入node-xlsx包 const nodeXlsx = require("node-xlsx"); //引入模块 导入Excel...} = window.require("electron").remote; 弹窗选择 select_dir: function() { dialog .showOpenDialog...result.filePaths[0]; } }) .catch(err => { console.log(err); }); } 选择文件 dialog.showOpenDialog...this.table_data = this.table_data.concat(table_data) ; }) ipcRenderer.send('read_xls', this.outpath) 在主进程中...const { ipcMain } = require("electron") ipcMain.on("read_xls", (event, arg) => { console.log(arg
// 如果用户不是在 macOS(darwin) 上运行程序,则调用 app.quit()。// Quit when all windows are closed, except on macOS....dialog.showOpenDialog({ buttonLabel: 'Select a photo', defaultPath: app.getPath('desktop'),...dialog.showSaveDialog({}).then( result => { console.log(result) }) // 系统错误弹窗 dialog.showErrorBox...node程序中需要调用一些其他语言编写的 工具 甚至是dll,需要先编译一下,否则就会有跨平台的问题,例如在windows上运行的软件copy到mac上就不能用了,但是如果源码支持,编译一下,在mac上还是可以用的...node-gyp在较新的Node版本中都是自带的(平台相关),用来编译原生C++模块。使用node-gyp编写简单的node原生模块
Eclipse关联打开文件在计算机中的目录 Step1 - 安装插件 菜单栏Help -> Install New Software… 如图: Step2 - 指定插件URL 在弹出界面中点击...如图: Step5 - 在文件系统里面打开选定文件 重启生效后,点击文件可以看到Explore in File System的选项。...我们右键点击BubbleSortUtil.java文件可以看到该选项,点击后直接打开该java类文件在文件系统的位置。很方便吧。 如图:
印象很深的,去年迅雷在发布迅雷X10.1时的文案: 从迅雷X 10.1版本开始,我们采用Electron软件框架完全重写了迅雷主界面。...你可以同时在Electron的主进程和渲染进程使用Node.js API,)所有在Node.js可以使用的API,在Electron中同样可以使用。...我们在渲染进程中创建的 dialog 对象其实并不在我们的渲染进程中,它只是让主进程创建了一个 dialog 对象,并返回了这个相对应的远程对象给了渲染进程。...六、对话框 dialog 模块提供了api来展示原生的系统对话框,例如打开文件框,alert框,所以web应用可以给用户带来跟系统应用相同的体验。...` }) }) 6.3 文件框 dialog.showOpenDialog用于打开或选择系统目录。
目录 一、报错提示: 二、解决方案: ---- 一、报错提示: 尝试在目标目录创建文件时发生一个错误:拒绝访问 二、解决方案: 拒绝访问的原因就是权限不足导致。...1、找到上图报错提示的 VS Code 安装目录右键点击属性设置权限。 2、添加一个用户 Everyone 3、赋予 Everyone 用户完全控制权限。
/vue-cli-plugin-electron-builder/ Choose Electron Version选择默认即可 运行报错 INFO Launching Electron… Failed...来选择文件路径了 一定要先设置preload再打开页面,当然同时设置也是可以的 调用其中的方法获取返回数据 myfun: function() { var that = this; const...will-download中不能下载行为或者是取消弹窗,但是在主进程里是可以的。...也就是说渲染进程中可以获取下载进度但是没法设置下载位置, 所以在下载地址需要重定向获取的前提下可行的方案有 在主线程中设置文件保存的位置,渲染进程中获取文件的下载进度。...path.join( app.getPath("downloads"), item.getFilename() ); item.setSavePath(filePath); }); 在渲染进程中获取
在mian.ts中的doStartup方法里,创建了一个命名管道服务 (src\vs\code\electron-main\main.ts) server = await serve(environmentService.mainIPCHandle...,e代表失败时的回调(有点类似es6的Promise) 匿名函数内createServer就是nodejs里的原生接口, Server类绑定了连接和断开的事件,暂时不细说; 回头看看main.ts...\app.ts)的startup方法,还启动了Electron的IPCServer const electronIpcServer = new ElectronIPCServer(); vscode把electron...日志、菜单栏、工作台、升级.....等等 主要的通信还是用electronIpcServer 来干的,mainIpcServer只有一个launch信道; 下面我们看看消息是怎么传递的 我们随便打开一个信道的类型...': return this.service.showOpenDialog(arg[0], arg[1]); //......
D //安装electron cnpm i electron-builder -D // 用来打包客户端安装包 -- 需要下一步下一步安装来完成点击打开 cnpm i electron-packager...-D // 用来打包客户端可执行文件 -- 直接点击打包后的可执行文件即可运行 // 安装生产相关依赖 cnpm i electron-log // 用于调试时的log输出,dev环境会直接在终端打印日志同时会在项目跟目录的...electron程序中,大量的逻辑是写在renderer.js文件中的。...本文的测试环境:electron@13.0.1,win10。本文探讨preload.js在browserWindow中的应用,当然,preload.js在webview中也有使用到。...在本地和打包后的路径会有很大出入。使用app.isPackaged判断是否是打包后。如下来获取该目录正确地址来执行后端打包后的可执行文件。
三、Sketch Plugin 开发技术 在插件开发实现过程中,我们遇到许多交叉技术领域的问题,也因此进行了多次技术重构。...当我们不知道应该订阅哪个 Action 时,可以使用通配符。但运行时性能开销很大,建议仅在开发阶段使用。 示例:Terminal 打开通配符支持。...中运行插件命令 典型的插件开发工程的目录结构示例 ├── .gitignore├── README.md├── src // sources│ ├─...: import dialog from '@skpm/dialog'console.log( dialog.showOpenDialog({ properties: ['openFile',...例如,当我们需要扩展 “创建组件“ 对话框,该对话框在 “创建组件” 事件发生时才会出现,因此在 Actions API 中搜索与 symbol 有关的事件,找到名为 Create Symbol 的 Action
启动 执行npm start即可启动这个项目,可以看到打开了一个窗口,显示index.html的内容。 本地应用网络请求失败 上面可以看到在main.js中是通过loadFile来加载文件的。...开发者工具 在浏览器中,我们可以通过右键->检查来打开开发者工具,可以看到控制台输出、文件、代码、报错等信息。...但是注意:因为之前是在createWindow中创建const win,所以如果使用快捷键后再关闭重新打开应用,再使用快捷键时,这时候win.webContents的win还是之前的对象,已经销毁了,就会报错...mac安装包 安装forge后打包时默认的是压缩包,make目录下是一个名为zip的文件夹,文件夹里最终是一个zip文件,解压后是app格式的mac执行文件,可以直接打开。 那么如果打一个安装包?...打包完成在/out/make/目录下看到除了之前的zip目录,多生成了一个dmg文件,这样安装包就打好了。
下载资源并存到本地 立即重启:替换 本地asar资源包 重启应用 稍后重启:关闭应用时 替换资源包 再次打开为新的 安装包模式 为下载安装包并弹出资源管理器标记安装包 资源替换效果如下 原本react-ts...为安装包所在目录 搭建uni-admin环境和开发云函数 搭建uni-admin环境 hbuilder x 新建uni-admin模板项目 新建一个官方模板数据表 可以去uniCloud web控制台创建...需要去控制台创建 如果创建了 需要下载的本地 选择 uni-admin模式的项目模式 一路确定即可 然后 在pages.json可以找到 页面路径 一般为 复制 pages/opendb-app-versions...(mainWindow, { title: '资源保存中', message: '资源保存中', }); fs.writeFile...(mainWindow, { title: '资源保存中', message: '资源保存中', }); fs.writeFile
true;设置对话框是否记忆上次打开的目录 ofd.Multiselect = true;//设置多选 if (ofd.ShowDialog() ==...设置默认文件名 sfd.DefaultExt = "txt";//设置默认格式(可以不设) sfd.AddExtension = true;//设置自动在文件名中添加扩展名...= new FolderBrowserDialog(); //打开的文件夹浏览对话框上的描述 dialog.Description = "请选择一个文件夹"; //是否显示对话框左下角 新建文件夹 按钮...= "") { //设置此次默认目录为上一次选中目录 dialog.SelectedPath = defaultPath; } //按下确定选择的按钮 if (dialog.ShowDialog...() == DialogResult.OK) { //记录选中的目录 defaultPath = dialog.SelectedPath; } MessageBox.show(defaultPath
领取专属 10元无门槛券
手把手带您无忧上云