在之前的文章我们介绍了一下Electron中的对话框 Dialog和消息通知 Notification,接下来我们继续说一下Electron中的系统快捷键及应用打包。

全局快捷键模块就是 globalShortcut,意思就是我们打开软件以后,按键盘上的快捷键,就可以实现用快捷键实现特定的功能,相当于用键盘快捷键触发某些事件。

globalShortcut 官方地址:https://www.electronjs.org/docs/api/global-shortcut

globalShortcut 模块可以在操作系统中注册/注销全局快捷键, 以便可以为操作定制各种快捷键。

注意: 快捷方式是全局的; 即使应用程序没有键盘焦点, 它也仍然在持续监听键盘事件。 在应用程序模块发出 ready  事件之前, 不应使用此模块。

我们的目录结构如下:

globalShortcut 模块存在于主进程中,我们先来通过代码来看一下 globalShortcut 的注册及调用,代码主要在 index.js 中,如下:

 const {app, BrowserWindow, globalShortcut, dialog} = require('electron')

 function createWindow() {
// 创建浏览器窗口
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
}) //引入 menu.js
require('./menu');
// 并且为你的应用加载index.html
win.loadFile('index.html'); // 打开开发者工具
win.webContents.openDevTools()
} // Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(createWindow); app.on('ready', () => {
// 注册一个 'CommandOrControl+X' 的全局快捷键
const ret = globalShortcut.register('Command+X', () => {
dialog.showMessageBox({
message: 'Command+X 快捷键调用成功!'
}).then(() => {
});
}); if (!ret) {
dialog.showMessageBox({
message: 'Command+X 快捷键调用失败!'
}).then(() => {});
} // 检查快捷键是否注册成功
dialog.showMessageBox({
message: 'Command+X 快捷键注册 ' + globalShortcut.isRegistered('Command+X')
}).then(() => {});
}); app.on('will-quit', () => {
// 注销快捷键
globalShortcut.unregister('Command+X'); // 注销所有快捷键
globalShortcut.unregisterAll()
});

在上面的代码中可以看出,我们注册了一个 Command+X 的快捷键,并且弹出一个 dialog 的对话框。

我们在注册系统快捷键的时候要先使用 globalShortcut.isRegistered() 方法,来检测快捷键是否注册成功,因为你可能同时打开很多软件,它们已经占用了一些快捷键的组合,所以并不是你100%可以注册成功的。

在关闭程序的时候要注销所有的快捷键,因为我们注册的是全局的快捷键,所以当我们关闭软件或者窗口时,记得一定要注销我们的快捷键。防止关闭后打开其他软件和他们的快捷键冲突。

当我们使用了Electron开发完应用后,一定想着如何打包成exe文件,打包的方式有很多,甚至根据你使用不同的前端框架,打包方式也会有所不同。这里我们用原汁原味的打包方式,用electron-package 打包。

首先我们先通过 npm 来下载 electron-package 包,

npm install electron-packager --save

然后在控制台输入

electron-packager <location of project> <name of project> <platform> <architecture> <electron version> <optional options>

其中我们需要输入6个参数,这6个参数意思分别是:

  • location of project : 项目所在路径
  • name of project : 打包的项目名称
  • platform : 确定了你要构建哪个平台的应用(Windows、Mac还是Liux)
  • architecture: 决定了使用x86还是x64还是两个架构都需要
  • electron version: electron 的版本
  • optional options: 可选选项

为了打包方便我们可以在 package.json 的 scripts 中添加如下代码,相当于快捷方式的作用:

"packager": "electron-packager ./ myElectron --all --out ./dist  --overwrite --icon=./img/icon/icon.ico"

在项目中新建 dist 文件夹。

使用 npm run packager 就可以进行打包了,打包的时间会非常长,而且如果你安装了一些安全软件,还要时刻看着安全软件的禁止操作,如果不小心被禁止掉了,可能会造成打包的失败。

最后我们来看一下运行打包的结果:

双击 myElectron 就可以运行我们打包的程序来。

从零开始学Electron笔记(七)的更多相关文章

  1. 从零开始学Electron笔记(四)

    在之前的文章我们介绍了一下Electron的这个remote模块,接下来我们继续说一下Electron的右键菜单的制作. 在我们日常我们使用的软件中都会存在右键菜单的情况,比如我们用到的浏览器,开发所 ...

  2. 从零开始学Electron笔记(一)

    前端技术在最近几年迅猛发展,在任何开发领域我们都能看到前端的身影,从PC端到手机端,从APP到小程序,似乎前端已经无所不能,这就要求我们需要不断地去学习来提升自己!前段时间尤大通过直播介绍了一下Vue ...

  3. 从零开始学Electron笔记(二)

    在之前的文章我们简单介绍了一下Electron可以用WEB语言开发桌面级应用,接下来我们继续说一下Electron的菜单创建和事件绑定. 我们接上一章的代码继续编写,上一章代码 https://www ...

  4. 从零开始学Electron笔记(三)

    在之前的文章我们介绍了一下Electron的菜单创建和事件绑定,其中提到了一个remote模块,接下来我们继续说一下Electron的这个remote模块. 官方关于remote模块的地址:https ...

  5. 从零开始学Electron笔记(五)

    在之前的文章我们介绍了一下Electron的右键菜单的制作,接下来我们继续说一下Electron如何通过链接打开浏览器和嵌入网页. 现在有这样一个需求,我们要在我们的软件中加一个链接,然后点击该链接打 ...

  6. 从零开始学Electron笔记(六)

    在之前的文章我们介绍了一下Electron如何通过链接打开浏览器和嵌入网页,接下来我们继续说一下Electron中的对话框 Dialog和消息通知 Notification. 在之前的文章中其实我们是 ...

  7. 从零开始学Python第七周:面向对象进阶(需修改)

    一,类的属性 (1)示例 通过属性获取已经创建对象的个数 class Plane: pCount = 0 #类属性 def __init__(self,name,category): self.nam ...

  8. 《Python 3.5从零开始学》笔记-第8章 面向对象编程

    前几章包括开启python之旅.列表和元组.字符串.字典.条件和循环等语句.函数等基本操作.主要对后面几章比较深入的内容记录笔记. 第8章 面向对象编程 8.3深入类 #!/usr/local/bin ...

  9. 从零开始学spring cloud(七) -------- Spring Cloud OpenFegin

    一.OpenFegin 介绍 Feign是一个声明性的Web服务客户端. 它使编写Web服务客户端变得更容易. 要使用Feign,请创建一个界面并对其进行注释. 它具有可插入的注释支持,包括Feign ...

随机推荐

  1. vipkid 面试经历

    今天下午去了位于钟鼓楼旁边的 vipkid 研发部进行了面试,面试过程中的回答只能说一般,面试官问的问题大概分为: 实际项目的设计问题 mysql的使用优化问题 多线程与锁的问题 JVM底层原理的问题 ...

  2. RabbitMQ:五、高阶

    存储机制 持久化的消息和非持久化的消息都可以被写入到磁盘. 持久化的消息一开始就会写入磁盘,如果可以,也会在内存中保存一部分以提高性能,当内存吃紧时会从内存中清楚. 非持久化的消息一般存储在内存中,内 ...

  3. typescript 展开操作符,对象属性值更新

  4. 初步了解JVM

    先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回 ...

  5. postcss.config.js not found

    https://github.com/ElemeFE/element/issues/10249

  6. 如何针对 iPhone X 设计网站?

    在全面屏的 iPhone X 上,不需要而外的代码,Safari 可以非常完美的展示现有的网站.整个网站的内容都会自动地展示在一个“安全区域”内,并不会被四周的圆角或者“小刘海”遮挡住. Safari ...

  7. 奇妙的 CSS MASK

    本文将介绍 CSS 中一个非常有意思的属性 mask . 顾名思义,mask 译为遮罩.在 CSS 中,mask 属性允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域 ...

  8. Hexo学习

    01.安装 Node.js 打开官方网站 https://nodejs.org 267b6d6d335cf62907c70321a1cbd3b 安装步骤非常简单,一直next,下一步就可以了,默认安装 ...

  9. 一篇夯实一个知识点系列--python生成

    写在前面 本系列目的:一篇文章,不求鞭辟入里,但使得心应手. 迭代是数据处理的基石,在扫描内存无法装载的数据集时,我们需要一种惰性获取数据的能力(即一次获取一部分数据到内存).在Python中,具有这 ...

  10. Mysql----左连接、右连接、内连接、全连接的区别

    最近,突然想起来数据库有好些时间没用到,所以,想把数据库有关的知识回顾一下,所以接下来这个月,基本上会以数据库的帖子来写为主,首先,很多同学都会有个错觉,觉得学习数据库会sql语句的增删改查就够了,其 ...