课程亮点

  • 剖析 Electron 从安装到发布的整个流程
  • 使用 Git 管理 Electron 应用源代码
  • 使用 C++ 开发 Electron 本地模块
  • 知识点 + 示例 + Electron 3.0 源代码

课程背景

Electron 允许使用 Web 技术(HTML5、CSS3、JavaScript)开发跨平台桌面应用,这对 Web 前端和 Node.js 开发者是一大福音,因为从此又多了一项技能。目前已经有很多著名的应用在使用 Electron 开发了,比如微软的 Visual Studio Code、快应用 IDE、支付宝小程序 IDE 等,但关于 Electron 完整的项目实战教程非常少,这对新手的学习非常不便,基于此,作者写了本课程内容,希望读者通过学习,能有所收获。

作者介绍

李宁,欧瑞科技创始人 & CEO,技术狂热分子,IT 图书作者,CSDN 特约讲师、CSDN 博客专家,拥有近 20 年软件开发和培训经验。主要研究领域包括 Python、深度学习、数据分析、区块链、Android、Java 等。曾出版超过 30 本 IT 图书,主要包括《Python 从菜鸟到高手》《Swift 权威指南》《Android 开发指南》等。

课程大纲

enter image description here

* 实际更新文章题目可能与框架略有出入

课程内容

开篇词:“桌面应用”是一顶璀璨的王冠

      • 课程背景
      • 有哪些著名应用使用 Electron 开发的
      • 学习 Electron,成为更优秀的开发者
      • 课程结构
      • 课程寄语

大家好,我是李宁,网名“银河使者”,IT 图书作者(代表作《Python 从菜鸟到高手》,欧瑞科技创始人,领导和参与了欧瑞科技公众号,小程序(极客题库)的开发。现在正带领团队研发高效全平台开发工具 OriUnity,主要使用的技术包括 Electron 和 Go 语言。

课程背景

可能有很多读者会有这样的疑问:为什么用 JavaScript 来开发桌面应用?

曾经的 JavaScript 脆弱、简陋、甚至有被边缘化的危险,不过 JavaScript 在经过了两次飞跃后(以 V8 为首的 JavaScript 引擎和 Node.js 的问世),不再受人欺负,早已升级为绿博士(复仇者联盟 4 中班纳博士和绿巨人的合体,强大而充满智慧)。 V8 引擎让 JavaScript 的运行速度飞快,Node.js 让 JavaScript 不仅仅能做 Web 前端页面,还能开发后端应用。

尽管有了 Node.js,JavaScript 可以开发服务端应用,但有一类重要的应用它还是无法胜任——桌面应用。目前 Web 应用和移动应用看似成为主流,但如果没有桌面应用,Web 应用和移动应用甚至都不会存在。所有的 Web 浏览器(IE、Chrome、Firefox、Safari 等)都是桌面应用,如果没有桌面应用,Web 页面根本没地方运行;用于开发移动应用的开发工具(IDE)也是桌面应用。而且 Windows 的开始菜单和 Mac OS X 的 Docker 中的每一个图标都对应一个桌面应用,可以说,桌面应用无处不在。

如果将 Web 应用和移动应用比作国王,那么桌面应用就是国王头上的那顶王冠,没有了王冠,国王什么都不是,而赐予 JavaScript 制作王冠之神力的正是 Electron。这是一个基于 V8 引擎和 Node.js 的开发框架,允许用 JavaScript 开发跨平台(Windows、Mac OS X 和 Linux)桌面应用。

avatar

有哪些著名应用使用 Electron 开发的

目前有相当多的桌面应用是使用 Electron 开发的,例如,著名的 Visual Studio Code(微软推出的一个跨平台源代码编辑器)就是用 Electron 开发的;还有蚂蚁小程序(在支付宝中运行的小程序)的开发工具也是用 Electron 来开发的;以小米、华为为主的众多手机厂商推出的快应用(类似于微信小程序)的 IDE 也是用 Electron 开发的。

蚂蚁小程序 IDE:

avatar

此外,大家熟悉的 Slack、Atom、XMind ZEN、WebTorrent、Hyper 等都是基于 Electron 的应用。

从 Electron 的主要用户来看,很多都是大厂,如蚂蚁金服、小米、华为、GitHub(Electron 就是 GitHub 推出的)、微软等,由于现在 GitHub 被微软收购了,因而目前 Electron 的后台是微软。因此学习 Electron 不用担心以后没市场,毕竟,各大厂都在用 Electron。

可能有很多读者以前开发过桌面应用,认为桌面应用也有缺点。比如,桌面应用很难做到实时更新,维护相对于 Web 应用费时费力,不过这个缺点是针对传统桌面应用的,而基于 Electron 的应用没有这个缺点。

Electron 之所以这么多人用,并不仅仅是因为它基于 Web 技术,而且它还能调用很多本地 API,在实现很多功能时与本地应用非常接近。

学习 Electron,成为更优秀的开发者

作为一名开发者,学会开发桌面应用,会非常显著地提升自己的核心竞争力,而且 Electron 开发桌面应用使用的是 Web 技术,可以考虑将 Web 应用与桌面应用作为一个应用来开发,这样会大大提升开发效率。

本课程笔者团队也正在使用 Electron 开发一款跨平台的开发工具 OriUnity,可以使用 JavaScript 同时开发桌面应用、Web 应用、移动 App 和小程序,而且可以将客户端与服务端融为一体。

这个项目具有大量的创新技术点,以及大量的发明专利,包括改进的增强版 JavaScript,JS 与 SQL 融合、客户端和服务端一体化、虚拟组件、异构组件嫁接等,通过这些创新的技术,可以将开发效率提高 10 倍以上。

在开发产品的过程中,我们也积累了很多 Electron 的实践经验。因此正好借着达人课的机会,将 Electron 的一些开发经验总结出来,希望对想入门 Electron 的读者有一定的借鉴作用。

课程结构

Electron 功能众多,但这些功能基本上可分为基础知识(开发环境安装、开发步骤、IDE 的选择等)、窗口、菜单、高级 API(数据库、托盘、摄像头、拖拽、剪贴板等)以及发布应用程序,本课程将会结合这些知识点详细讲解如何用 Electron 开发桌面应用。

课程目的是培养大家解决实际问题的能力,每一课的知识点既相互独立、又有联系,比如,在创建托盘时需要用到上下文菜单的知识。大多数文章(除了配置开发环境和简介外)都配有完整的实现代码,并且在最后还提供了两个实战案例:基于 Electron 的云笔记和数据库管理系统,把离散的知识点结合起来完成非常复杂的桌面应用项目。

本课程分为七大部分,共 29 篇(含开篇词)。

第一部分(第 01 ~ 04 课):Electron 基础知识

这部分主要介绍了用 Electron 开发跨平台桌面应用的原因、桌面应用的优势、Electron 应用的基本开发步骤、如何搭建集成开发环境、用 Git 管理 Electron 应用等内容,这一部分是 Electron 学习的开胃菜,大餐请继续往后看。

第二部分(第 05 ~ 09 课):用 Electron 创建窗口

这部分详细介绍了用 Electron 创建各种类型窗口的方式,主要内容包括只针对 Mac OS X 系统的文件展示窗口、打开对话框窗口、保存对话框窗口、显示消息对话框窗口、使用 HTML 5 API 创建子窗口、用 open 方法打开的子窗口交互、在窗口中嵌入 Web 页面等。

第三部分(第 10 ~ 12 课):创建各种类型菜单

菜单是桌面应用程序的重要部分,这一部分详细介绍了在 Electron 中如何创建各种类型的菜单,主要内容包括使用模板创建窗口菜单、如何设置菜单项的角色、菜单项的类型、为菜单添加图标、创建动态菜单、上下文菜单。

第四部分(第 13 ~ 21 课):常用的核心 API

这一部分是本系列课程的核心内容,讲解了 Electron 中常用的核心 API,主要包括创建托盘应用、拖拽操作、使用摄像头、根据操作系统定制样式、用纯 JavaScript API 操作 SQLite 数据库、用 Node.js 模块操作 SQLite 数据库、访问 MySQL 数据库、使用剪贴板、注册全局键、测试等。

第五部分(第 22 ~ 23 课):发布应用程序

由于基于 Electron 的桌面应用需要依赖 Node.js、Electron 以及众多的模块才能运行,这些东西肯定不能让用户自己一个个安装,最好的解决方案就是把这些东西与开发的桌面应用一起打包,然后将一个安装包发放给用户,用户只需要双击安装包就可以搞定,因而学会发布 Electron 桌面应用非常必要。

因此,这部分内容主要介绍了如何用各种工具发布基于 Electron 的应用,主要包括使用 electron-packager 和 electron-builder 创建安装包及制作安装程序(dmg、exe 等)。

第六部分(第 24 ~ 26 课):项目实战

这一部分是本系列课程的画龙点睛之笔,需要把前面五部分介绍的知识点连接起来完成复杂的桌面应用,这里提供了两个完整的案例,一个是云笔记系统,该系统可以将本地的笔记保存到服务端,只是这里的服务端是以太坊,而不是传统的数据库;第二个项目是基于 Electron 的 MySQL 数据库管理系统,可以做本地管理 MySQL 数据库,而且还可以将数据上传到以太坊进行备份。

第七部分(第 27 ~ 28 课):模块分析

这一部分主要介绍了 Node.js 和 Electron 模块的相关知识,包括使用 JavaScript 开发 Node.js 和 Electron 模块以及使用 C++ 开发 Node.js 和 Electron 的本地模块。通过这一部分的内容,可以让 C++ 与 Electron 完美融合在一起,让 Electron 拥有无限扩展性。

课程寄语

Node.js 和 Electron 堪称 JavaScript 的左右护法,前者让 JavaScript 可以轻而易举地跨越不同类型应用的界限,后者让 JavaScript 可以进入服务端和桌面应用领域。有了这两个护法,JavaScript 可以真正成为唯一的全栈开发语言,从 Web 到移动,再到服务端,再到桌面应用,甚至是终端程序,无所不能。

本课程并不是单纯讲解 Electron 的知识,而是想要教会大家开发 Electron 桌面应用的思想,提高动手能力,今后无论遇到多复杂的桌面应用需求都能得心应手,轻松应对。

最后,预祝大家学习愉快,Good Luck!

点击了解更多《Electron 开发入门》

第01课:Electron 开发的优势

      • 1.1 Node.js,一个让 JavaScript 从丑小鸭变成白天鹅的框架
      • 1.2 从桌面应用到 Web 应用,再回到桌面应用
      • 1.3 Web 应用为什么会火
      • 1.4 Web 应用的挑战
      • 1.5 桌面应用的优点

1.1 Node.js,一个让 JavaScript 从丑小鸭变成白天鹅的框架

可能很多读者会感到奇怪,本系列课程主要介绍的是 Electron,为什么一开始要提到 Node.js 和 JavaScript 呢?它们是什么关系呢?别急,听我慢慢道来。

相信做 JavaScript 开发的读者对 Node.js 不陌生,Node.js 诞生于 2009 年,类似于 ASP.NET,是用来开发服务端程序的框架,使用的编程语言是 JavaScript。基于 Node.js 的 Web 框架非常多,比较常用的有 Express,还有 hapi.js,可能有些读者对 hapi.js 感到陌生,这个框架在国内用的比较少,不过在国外比较流行,hapi.js 是沃尔玛技术团队开发的框架,比较适合做 API 服务。

Node.js 给许多开发者的第一印象是用来开发 Web 应用的,然而事实上,正是由于 Node.js 的存在,JavaScript 才摘下了“只能开发 Web 应用”的帽子。Node.js 使得 JavaScript 可以像 Python、Java 一样在终端(或 Windows 命令行)执行,它还提供了大量的 API,利用这些 API,JavaScript 几乎可以做任何事情。从这个角度看,Node.js 算是成就了 JavaScript,帮助 JavaScript 从一个只能开发 Web 前端应用的编程语言一跃成为全栈开发的超一流语言。

Node.js 支持扩展功能,这些扩展成为模块,模块可以直接使用 JavaScript 编写,也可以使用 C++、Go 等语言在本地编写。目前已经有很多依赖 Node.js 的第三方模块和框架,形成了一个以 Node.js 为核心的庞大生态系统。在这个生态系统中,有一个分类就是用来开发桌面应用,成为了桌面 GUI,比较著名的包括 NW.js 和 Electron,其中,Electron 更有名气,连微软都使用 Electron 开发自己的 IDE——著名的 Visual Studio Code。此外,用 Electron 开发的应用还有很多,如 Atom、支付宝小程序 IDE(蚂蚁开发者工具)等。Electron 最初是由 GitHub 开发并负责维护的,后来 GitHub 被微软收购了,因此 Electron 现在背后的大树是微软。

下图是 Visual Studio Code:

19717b10-a3ac-11e8-99c1-bd24c427c523

下图是蚂蚁开发者工具:

b7f21c40-a3ac-11e8-99c1-bd24c427c523

至此,也许很多读者会有新的疑问,为什么要开发跨平台的桌面应用?为什么用 Node.js 和 Electron 来开发呢?现在已经有很多流行的桌面应用开发工具,如微软的 Visual Studio、跨平台的 QT、Mac 平台 XCode。其实在使用 Node.js 和 Electron 之前,我也有这个疑问,下面就来回答一下。

1.2 从桌面应用到 Web 应用,再回到桌面应用

20 年前(大约 2000 年前后),绝大多数软件都以桌面应用的形式存在,像 Word、Excel 就属于典型的桌面应用,双击桌面的图标就可以运行。这些桌面应用在发售时一般会使用光盘(CD 或 DVD),将光盘放在精美的包装盒里,然后通过各大软件商店(有线下实体店)销售,因为那时互联网还不发达,而且网速极慢,所以只能通过线下方式销售软件。在购买软件时,要确保软件可以兼容自己的操作系统(那时候大多数人使用的是 Windows 操作系统),然后从包装盒中取出光盘,将光盘中的软件安装到自己的计算机中。

随着时代的发展,改变也渐渐开始了。互联网的逐渐普及、网速的不断提高、网络访问越来越便捷、Web 浏览器的崛起,这些改变都在不断释放一个信号:传统的靠光盘分发软件的方式已经不再符合时代的要求,人们需要更快捷、更方便、成本更低、更容易升级和维护的方式分发软件。依现在的眼光看,毫无疑问,Web 应用满足所有的要求,幸运的是,十多年前的 IT 从业者也是这么想的,于是 Web 应用也逐渐火爆起来。

Web 应用看似获胜,然而随着移动设备的兴起,又一轮变革开始了。开发者们发现,需要让他们的产品也支持这样的设备,以 iOS 和 Android 原生应用为代表的潮流开始引领世界。

纵观十多年的软件开发进程,业界发生了巨变,多平台的时代正在慢慢来临:桌面应用、Web 浏览器、移动端以及其他平台,作为开发者,我们渐渐觉得,有必要支持多平台计算。

那么桌面应用呢?桌面应用已经成为我们在日常生活中使用的计算平台之一,自从二十一世纪以来,发生了很多变化。在很多年前,微软的 Windows 系统是 PC 操作系统领域绝对的霸主,后来苹果公司的操作系统(Mac OS X),以它的创新性和专业性,削弱了 Windows 的统治地位。不仅如此,在 2016 年第一季度,谷歌的 Chromebook 成为全美最畅销的笔记本电脑,或许属于 Linux 系统的时代也将会来到。关键是现在你已经不能只开发支持 Windows 系统的应用了,还要开发支持苹果系统和 Linux 的应用。

跨平台的桌面应用并不是什么新鲜的东西,像 Mono、QT、Java 等早就可以开发出支持多个主流操作系统的桌面应用了。通常,有 C++、C#、Java 开发经验的开发者会选择这样的技术来开发跨平台应用,但对于 Web 开发者,面对这些技术需要重新学一门语言,因此开发跨平台桌面应用对于 Web 开发者是有一定门槛的。

自从 Electron 出来后,这种情况有了很大的改观。Electron 可以让你重用 Web 应用的代码来构建桌面应用,不仅如此,构建出来的应用可以同时在 Windows、Mac OS X 和 Linux 上运行,这有一个非常大的好处:代码和技能都可以复用,并且释放了一拨新的应用。

除此之外,Node.js 的流行也意味着开发者们在构建他们的桌面应用时也可以受益于 Node.js 巨大的开源生态系统。Node.js 和 Web 开发者们都可以快速构建桌面应用,而且有些应用还真的很不错,比如,我现在经常用的 VS Code 就是一款非常不错的桌面应用。

支持多种操作系统,而软件本身可以使用 JavaScript 编写,这个能力可以带来非常多的好处。正如前面提到的,尽管新的移动计算平台正在崛起,但是 PC 至今仍然是人们常用的,这也是为什么使用 Node.js 构建桌面应用正变为一种有意思的分发软件的方式。

Electron 桌面应用相对于 Web 应用的优势有哪些呢?

1.3 Web 应用为什么会火

在讨论 Electron 桌面应用相对 Web 应用的优势之前,先来看一下 Web 应用为什么会火?

Web 应用之所以会火,主要有如下几个原因:

  • 网速的提升,以及使用互联网的成本越来越低,使得相比其他通信渠道,互联网的使用人口基数正在大规模增加;
  • Web 浏览器受益于不断加剧的竞争, IE 之外的浏览器不断出现,这些浏览器拥有的新特性,继而让 Web 应用也可以利用这些新特性做出一些新的东西出来;
  • 相比像 C 和 C++ 这样的底层语言,简单易学的 HTML、CSS 和 JavaScript 降低了开发者制作 Web 应用的准入门槛
  • 开源软件的崛起意味着分发和获取软件的成本大大降低,这就使得开发者哪怕只有有限的经验和经历,只要拥有对应的开发技能都可以构建他们自己的 Web 应用。

1.4 Web 应用的挑战

上面的几点原因不难理解,对于开发者而言 Web 是一个非常重要的平台,不过现在还是存在一些因素对 Web 应用产生了一定制约和挑战。

这些挑战主要集中在以下几点:

  • 网络不是一直可用,比如在飞机上或隧道里时,可能信号差或没有网络,这时 Web 应用就无法访问了;
  • 如果 Web 应用需要使用大量的数据,那么意味着访问 Web 应用需要向客户端传输大量的数据,这会导致 Web 页面加载速度缓慢;
  • 如果 Web 应用需要处理大文件(如大的图片或视频),先将文件上传到服务端,处理完再返回结果的做法并不是一种好的解决方案;
  • 由于 Web 浏览器有安全策略,因而 Web 应用在访问本机硬件时(如摄像头、蓝牙设备等),很有可能会受到限制;
  • 由于目前 Web 浏览器的种类非常多,无法控制用户使用哪个 Web 浏览器访问 Web 应用,因而在开发 Web 应用时就需要尽可能考虑到更多的浏览器,只要有的地方没考虑周全,就有可能会造成 Web 应用对某些浏览器不兼容的情况。

1.5 桌面应用的优点

Web 应用受限于网络和浏览器特性,在这些方面,桌面应用要优于 Web 应用,下面列出桌面应用的一些优点:

  • 启动和运行不依赖于网络;
  • 桌面应用可以即时启动,不需要等待资源从网络上下载完再启动;
  • 桌面应用可以访问计算机的操作系统和硬件资源,包括连接在计算机上的硬件设备;
  • 桌面应用可以更好地控制软件的用户体验,不需要担心不同浏览器处理 CSS 的规则以及哪些 JavaScript 特性是被支持的;
  • 一旦桌面应用安装到用户计算机上,就会永远在那里,它不像 Web 应用那样需要一台 Web 服务器,还需要提供一天 24 小时支持,以防 Web 服务器宕机,当然,如果 Web 服务托管商遇到问题就更糟糕了。

通常,开发桌面应用要求开发者精通像 C++、Objective-C 或者 C# 这样的语言以及像 .NET、QT、Cocoa 这样的框架。这对于很多开发者来说,准入门槛有点高,他们很可能会放弃使用这些技术来构建桌面应用。

而 Electron 就不一样,Electron 使用 JavaScript 开发桌面应用,任何 Web 开发者都很容易上手,就算不是 Web 开发者,学习 JavaScript 相对于 C++、C# 这些语言也非常容易,因此,Electron 的准入门槛非常低

到现在为止,我们已经了解了 Electron 到底是做什么的,以及为什么要用 Electron 来构建桌面应用,后面的内容将会全面介绍 Electron 的各种技术,并提供一个完整的实战案例,让读者结合项目来学习用 Electron 开发桌面应用。

点击了解更多《Electron 开发入门》

第02课:Electron 开发的准备工作

2.1 搭建 Electron 开发环境

在使用 Electron 开发应用之前,要先安装 Electron,而 Electron 需要依赖 Node.js,因此在安装之前,要先安装 Node.js。Node.js 允许使用 JavaScript 开发服务端以及命令行程序,读者可以到 Node.js 的官网下载最新版本的安装程序。

Node.js 是跨平台的,建议读者下载长期维护版本(LTS),然后双击安装程序开始安装即可。

安装完 Node.js 后,进入终端(Windows 下是命令提示符窗口),运行如下命令安装 Electron。

npm install electron -g

如果安装成功,会显示如下图所示的信息(Windows)。

b650e220-ac2d-11e8-8c28-1fcd9a8f1993

安装完 Electron 后,可以输入下面的命令查看 Electron 版本。

electron -v

如果想删除 Electron,可以使用下面的命令。

npm uninstall electron

如果想升级 Electron,则可以使用这个命令。

npm update electron -g

直接执行 electron 命令,会显示如下图所示的窗口,该窗口包含了与 Electron 相关的信息,如 Electron 的版本号、Node.js 的版本号、API Demo 的下载链接等。

f09a4680-ace9-11e8-9c45-adc0fa12a28f

2.2 开发第一个 Electron 应用

在开发 Electron 应用之前,需要创建一个 Electron 工程。Electron 工程必须要有一个 package.json 文件,创建 package.json 文件最简单的方式就是使用下面的命令。

npm init

在执行上面命令之前,最好先建立一个工程目录,在执行命令的过程中,会要求输入一些信息,输入过程如下图所示,如果不想输入,一路回车即可。本例输入了 package name(first)、entry point:(first.js),前者是包名,也可以认为是工程名,默认是 electron;后者是入口点,也就是运行 Electron 应用第一个要运行的 JavaScript 文件名,默认是 index.js。

97942c60-ac33-11e8-afe5-6ba901a27e1b

通过上面的命令自动创建 package.json 文件的内容如下:

{  "name": "first",  "version": "1.0.0",  "description": "",  "main": "first.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "author": "",  "license": "ISC"}

其实 package.json 文件中大多数内容都不是必须的,可以将 package.json 文件的内容精简为如下形式:

{  "name": "first",  "version": "1.0.0",  "main": "first.js"}

接下来编写一个最简单的 Electron 程序,该程序除了 package.json 文件是必须的,还有另外两个文件也是必须的,一个就是在 package.json 文件中定义的入口点文件,本例是 first.js;另外一个就是要显示在主窗口中的页面文件。由于 Electron 应用与 Web 应用使用同样的技术,因而这个页面文件就是 HTML 文件,本例是 index.html。因此,一个最基本的 Electron 应用由下面 3 个文件组成:

  • package.json
  • first.js
  • index.html

这里的 index.html 文件就是普通的网页文件,下面给出简单的文件内容。

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>Hello World!</title></head><body><h1>这是第一个Electron应用</h1></body></html>

first.js 文件的基本任务就是创建一个窗口,并将 index.html 文件显示在这个窗口上,现在先给出 first.js 文件的代码。

const {app, BrowserWindow} = require('electron') function createWindow () {       // 创建浏览器窗口    win = new BrowserWindow({width: 800, height: 600})    // 然后加载应用的 index.html    win.loadFile('index.html')  }app.on('ready', createWindow)

其中,electron 是 Electron 的模块,必须引用,该模块导出了一个 app 对象和一个 BrowserWindow 类,app 对象包含一些方法,如 on 方法用于将事件绑定到事件函数中。在代码的最后,将 createWindow() 函数绑定在 ready 事件上,该事件会在 Electron 应用运行时执行,通常在 ready 事件中创建主窗口,以及完成一些初始化工作。

在 createWindow() 函数中创建了 BrowserWindow 对象,一个 BrowserWindows 对象表示一个窗口,通过 BrowserWindow 类构造方法参数指定窗口的尺寸(800 × 600),然后通过 loadFile 方法装载 index.html 文件。

最后使用下面的命令运行 Electron 应用。

electron .

注意:运行上面命令时,终端(或命令提示符)应该在 Electron 工程目录下。

程序运行效果如下图所示。

ee56d250-ac3d-11e8-91e0-0f47f5fddd18

2.3 响应事件

编写 GUI 应用要做的最重要的事情就是响应事件,如单击按钮事件、窗口关闭事件等。对于 Electron 应用来说,事件分为如下两类:

  • 原生事件
  • Web 事件

由于 Electron 在创建窗口时需要依赖本地 API,因而有一部分事件属于本地 API 原生的事件。但 Electron 主要使用 Web 技术开发应用,因而用的最多的还是 Web 事件,这些事件的使用方法与传统的 Web 技术完全相同。

Electron 的原生事件有很多,比如窗口关闭事件 close、Electron 初始化完成后的事件 ready(这个在前面已经讲过了)、当全部窗口关闭后触发的事件 window-all-closed(通常在这个事件中完成最后的资源释放工作)、Electron 应用激活后触发的事件(activate,在 macOS 上,当单击 dock 图标并且没有其他窗口打开时,通常在应用程序中重新创建一个窗口,因此,一般在该事件中判断窗口对象是否为 null,如果是,则再次创建窗口)。

下面完善 first.js 文件的代码,添加了监听上述窗口事件的代码。

const {app, BrowserWindow} = require('electron'); function createWindow () {       //创建浏览器窗口    win = new BrowserWindow({width: 800, height: 600});    //然后加载应用的 index.html    win.loadFile('index.html');    //关闭当前窗口后触发 closed 事件    win.on('closed', () => {      console.log('closed');      win = null;    })  } //Electron 初始化完成后触发 ready 事件 app.on('ready', createWindow)//  所有的窗口关闭后触发 window-all-closed 事件app.on('window-all-closed', () => {    console.log('window-all-closed');    //非 Mac OS X 平台,直接调用 app.quit() 方法退出程序    if (process.platform !== 'darwin') {      app.quit();    }  })  //窗口激活后触发 activate 事件  app.on('activate', () => {    console.log('activate');    if (win === null) {      createWindow();    }  })

首先在 Windows 10 上测试 Electron 应用,运行 Electron 应用,会显示 Electron 窗口,然后关闭窗口,会在命令提示符中显示如下图所示的信息。

1d683780-acfe-11e8-9c45-adc0fa12a28f

很明显,window-all-closed 事件先于 closed 触发,不过并没有触发 activate 事件,这个事件需要在 Mac OS X 上触发。现在切换到 Mac OS X 系统,用同样的方法运行 Electron 应用,然后最小化窗口,再让窗口获得焦点,最后关闭窗口,会看到终端输出如下图所示的信息。

这说明在 Mac OS X 系统下,当窗口最小化后再获得焦点,会触发 activate 事件,然后关闭窗口,会触发 window-all-closed 和 closed 事件,不过当关闭最后一个窗口后,Mac OS X 下的应用并不会真正退出,而是应用的一部分仍然驻留内存,这主要是为了提高再次运行应用的效率,这也是为什么 Mac 机器的内存占用率会越来越大的原因,因为应用一旦启动,就不会真正完全退出,iOS 系统也有这个问题。

f40b1dc0-acfe-11e8-afe5-6ba901a27e1b

2.4 Electron 应用的特性

到现在为止,我们已经完成了第一个 Electron 应用,再来看一下使用 Electron 开发的应用可以拥有哪些特性:

  • 支持创建多窗口应用,而且每个窗口都有自己独立的 JavaScript 上下文;
  • 可以通过屏幕 API 整合桌面操作系统的特性,也就是说,使用 Web 技术编写的桌面应用的效果与使用本地编程语言(如 C++)开发的桌面应用的效果类似;
  • 支持获取计算机电源状态;
  • 支持阻止操作系统进入省电模式(对于演示文稿类应用非常有用);
  • 支持创建托盘应用;
  • 支持创建菜单和菜单项;
  • 支持为应用增加全局键盘快捷键;
  • 支持通过应用更新来自动更新应用代码,也就是热更新技术;
  • 支持汇报程序崩溃;
  • 支持自定义 Dock 菜单项;
  • 支持操作系统通知;
  • 支持为应用创建启动安装器。

我们刚刚看到,Electron 支持大量的特性,上述列出的只是其中一部分。其中,程序崩溃汇报是 Electron 独特的特性,NW.js 目前并不支持该特性。Electron 最近还发布了用于应用测试和调试的工具:Spectron 和 Devtron,在后面的课程内容中将会对它们进行详细介绍。

点击了解更多《Electron 开发入门》

第03课:Electron 桌面应用开发

开发一款功能完整的桌面应用,通常不会使用记事本去完成所有的开发工作,核心的开发工作一般会在 IDE(集成开发环境,Integrated Development Environment)中完成。由于 Electron 应用主要使用 Web 技术(HTML、CSS 和 JavaScript)开发,因此只要支持编辑 JavaScript、HTML、CSS 代码的 IDE,都可以开发 Electron 应用。本节课将介绍两款常用的 IDE:WebStorm 和 VS Code,这两款 IDE 都支持 Web 开发,不过要想开发 Electron 应用,还需要做一个配置和调整。

3.1 用 Webstorm 开发 Electron 应用

可以直接在 WebStorm 中编辑 Electron 应用的代码,不过运行 Electron 应用需要执行如下的命令。

electron .

当然可以在终端输入上述命令,不过比较麻烦,比较好的做法是在 WebStorm 中直接运行 Electron 应用,实现方法有两个,我们逐一介绍。

1. 使用扩展工具

首先在 WebStorm 中先创建一个空的工程,然后将前面编写的 Electron 应用的 3 个文件复制到 WebStorm 工程中。

再将需要执行的命令添加到 WebStorm 的扩展工具中,打开 WebStorm 的扩展工具设置窗口,按下图进行设置,最后单击 OK 按钮关闭 Create Tool 对话框。

avatar

创建完运行 Electron 应用的扩展工具后,选择工程中的文件,然后在右键菜单中单击 External Tools | electron(如下图所示),就会在 WebStorm 中运行 Electron 应用;或直接单击 WebStorm 中的 Tools | External Tools | electron 菜单项,也可以运行 Electron 应用。

avatar

注意:在 Windows、Program 中要输入 electron.cmd。

2. 使用脚本文件

使用第一种方式运行 Electron 应用,每次都需要单击 electron 菜单项,比较麻烦。为了更简单,可以在工程源代码文件目录(一般为工程根目录)创建一个脚本文件,如 run.js,并输入下面的代码:

var exec = require('child_process').exec;free = exec('electron .');

这两行代码使用了 Node.js 中 child_process 模块的响应 API 执行 electron 命令。直接在 WebStorm 中运行 run.js 文件即可,在第一次运行该文件后,下一次运行可以直接单击 WebStorm 右上角的运行按钮,如下图所示。

avatar

3.2 用 VS Code 开发 Electron 应用

VS Code 是微软公司开发的开源的代码编辑工具,支持插件,它本身其实就是用 Electron 开发的,因此使用 VS Code 开发 Electron 应用更能说明 Electron 的强大。

avataravatar

3.3 用设置断点的方式调试 Electron 应用

调试程序是开发 Electron 应用必不可少的步骤,最简单的调试方式就是执行下面的代码,在主窗口右侧会显示调试窗口,如下图所示。

 win.webContents.openDevTools()

avatar

使用 console.log() 方法可以在调试窗口中输出信息。不过这种调试方式比较笨,而且不能观察变量等资源的状态,因此本节课推荐另外一种调试方式,使用 VS Code 设置断点的方式调试 Electron 应用。

切换到 first.js 文件,在 createWindow() 函数中添加如下两行代码。

var n = 20;console.log(n);

然后在 var n = 20; 的序号前面单击设置断点,如下图所示。

avatar

切换到调试窗口(左侧第 4 个按钮),如下图所示。

avatar

接下来设置 launch.json 文件,代码如下:

{    "version": "0.2.0",    "configurations": [        {            "type": "node",            "request": "launch",            "cwd": "${workspaceRoot}",                        "name": "Electron Main",            "runtimeExecutable": "electron",            "runtimeArgs": [                ".",                "--enable-logging"            ],            "protocol": "inspector"        }    ]}

单击上方的 Debug Main Process 按钮,会用调试的方式运行 Electron 应用,这时并没有显示窗口,而是程序停到了设置断点的那一行。单击代码窗口上方的 Step Over、Step Into 按钮,会一步一步执行程序,在左侧的变量监视区域会显示相关变量值的变化。双击变量,还可以在调试状态修改变量的值,这样可以更方便地观察不同值的变量对程序的影响。

点击了解更多《Electron 开发入门》

附录:Electron 版本升级

在 2019 年 1 月 5 日,Electron 最新的 4.0.1 版发布了,尽管在写作本系列课程内容时,Electron 4.0 稳定版还没有发布,不过经过测试,本课程中的例子在 Electron 4.0 中仍然可以正常使用。Electron 4.0 及以上版本只是修正了一些 bug,同时还加了一些功能(主要增加了事件、一些方法),大的功能并没有增加什么。

avatar

如果希望升级到 Electron 4.0 或更高版本,可以按下面的方式去做。

如果机器上已经安装了 Electron 3.x 或更低版本,不要直接使用下面的代码升级。

npm update electron -g

例如,机器上安装了 Electron 3.0.1,使用上面的命令只能升级到 Electron 3.1.0,跨大版本的升级,如从 2 升级到 3,或从 3 升级到 4,需要先使用下面的命令卸载 Electron。

npm uninstall electron -g

然后使用下面的命令重新安装 Electron。

npm install electron -g

安装完后,输入 electron --version 命令,如果输出 v4.0.1,说明已经安装成功,Good Luck。

第04课:Electron 应用代码管理
第05课:打开对话框的功能效果
第06课:保存对话框和显示对话框消息
第07课:使用 HTML 5 API 创建子窗口
第08课:子窗口交互
第09课:在窗口中嵌入 Web 页面
第10课:使用模板创建原生菜单
第11课:菜单项的角色和类型
第12课:动态创建菜单和上下文菜单
第13课:创建托盘应用
第14课:Electron 应用中的拖拽操作
第15课:摄像头的使用
第16课:根据当前操作系统定制样式
第17课:使用 localStorage 读写键值数据
第18课:JavaScript 引擎操作 SQLite 数据库
第19课:sqlite 3 模块操作 SQLite 数据库
第20课:Electron 直接访问 MySQL 数据库
第21课:剪贴板的使用
第22课:打包和发布 Electron 应用
第23课:实现自己的打包应用
第24课:贪吃蛇游戏
第25课:MySQL 数据库管理系统
第26课:基于以太坊的云笔记
第27课:Node.js 模块详解
第28课:用 C++ 开发 Node.js 和 Electron 本地模块

阅读全文: http://gitbook.cn/gitchat/column/5c3168154fcd483b02710425

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

相关文章

  1. 终于解决qq浏览器里面播放video会带自己广告的问题了

    思路 : 用videojs 播放完后强制销毁video 用一张图片来替代背景 如果想观看 就强制刷新整个页面 很棒 具体不会可以私了留言 就不贴代码了...

    2024/5/6 11:06:23
  2. 个人博客搭建之路(b3log solo)

    我的博客地址:http://h2pl.xyz1首先,想要搭的是b3log开源社区提供的开源博客系统solo。Solo 是一款一个命令就能搭建好的 Java 开源博客系统,并内置了 18+ 套精心制作的皮肤B3log 开源组织有着非常活跃的社区,文章分享到社区后可以让很多人看到,产生丰富的交流互动Solo 的第…...

    2024/5/6 6:33:19
  3. 关于Spring Boot中的getResources

    关于Spring Boot中的getResources 在前一篇讲Spring Boot启动流程的文章中,在获取Initializers和Listeners的时候都会通过ClassLoader的getResources方法获取相关文件的全限定名。 今天着重分析一下ClassLoader.getResources,ClsasLoader.getResource,Class.getResource 1.Cla…...

    2024/4/24 23:11:38
  4. 精通搜索分析

    《精通搜索分析》前言 撰写本书是为了填补搜索行业的一个空白。目前市面上关于网站分析、SEO(Search Engine Optimization,搜索引擎优化)、付费搜索(包括一些站内搜索)的书已经有很多,但本书将着眼于将上述学科融合进SEM(Search Engine Marketing,搜索引擎营销学),这是…...

    2024/4/24 23:11:30
  5. 万能弹窗代码,能突破大部分弹窗拦截插件

    废话不多说,亲测可用,js代码如下:<script type="text/javascript">var authcode = ; var paypopupURL = http://www.xxxx.com/ + authcode; //需要打开网站的网址 var _hascsp = 0, poptype = 1; //弹窗的主要函数 function updatecs() {}; (function() {va…...

    2024/4/24 23:11:29
  6. getResources()从应用中获取资源

    最近看到这个getResources(),很不理解,于是百度了一下,记了下来。 例如:把资源文件放到应用程序的/raw/raw下,那么就可以在应用中使用getResources获取资源后,以openRawResource方法(不带后缀的资源文件名)打开这个文件。例如: Resources myResources = getResources…...

    2024/4/24 23:11:29
  7. 国内外知名的IT社区

    作者:匿名用户链接:https://www.zhihu.com/question/35373320/answer/114468522来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Github - How people build software GitHubGit是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作…...

    2024/4/24 23:11:27
  8. electron打包双平台教程

    1. mac下用electron-packager打包双平台本文主要描述在mac下用 electron 来打包 electorn 双平台的安装包,重点在于讲解mac下打包.exe的操作,文件目录如下├── build├──icons├── 256x256.png├── icon.icns├── icon.ico├──dist ├── node_modules ├── p…...

    2024/4/24 23:11:33
  9. 搜索易- 致力于简化您的搜索流程

    下载地址:http://www.i-ssy.com/你是否是一名搜索控? 你是否每天频繁的在不同的搜索引擎间来回穿梭?你是否厌倦了不停的打开浏览器、输入搜索引擎网址?使用搜索易吧,Ta将大大简化您的搜索流程.搜索易是一款基于.NET平台开发的桌面级免费应用:Ta不是浏览器插件,不会降低您的…...

    2024/5/6 11:26:06
  10. Electron 基础教程-2.1 获取Quick Start代码

    一开始上手Electron可能会很迷茫:文件该放在哪?文件如何命名?代码从哪里开始写?代码应怎么组织?幸运的是,GitHub的Electron开发者创建了一个供初学者学习的GitHub仓库Electron Quick Start。我们将这个仓库中的案例为出发点学习Electron。代码仓库地址为https://github.c…...

    2024/4/24 23:11:24
  11. 解色散方程(附C++和matlab代码)

    解色散方程Solution of the dispersion equation set then known so Constant establishmentSo we can use the dichotomyand To avoid losing accuracy,I made some necessary changesset C++实现(C++ achieve)#include <stdio.h> #include <math.h> #include &…...

    2024/4/24 23:11:23
  12. Android getResources的作用和须要注意点

    今天做一个Android的文件管理器,里面用到非常多的地方用到了getResources。Drawable currentIcon = null;currentIcon = getResources().getDrawable(R.drawable.folder);currentIcon = getResources().getDrawable(R.drawable.image); 一開始不是非常理解为什么用 getR…...

    2024/4/14 21:19:06
  13. 2019 十大国产开源项目来势汹汹!

    作者 | 马超责编 | 胡巍巍出品 | CSDN(ID:CSDNnews)2019年,是国产开源项目的爆发之年,国内各厂商不断有重磅项目开源。世界上最大的开源社区GitHub颇有快速拥抱中国的趋势。在2019中国开源年会上,CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛,就曾与GitHub副总裁T…...

    2024/4/18 14:11:34
  14. 关于提高Linux桌面系统使用效率

    提高Linux桌面使用效率   wuzhaikof   稳定、安全、易用是优秀桌面操作系统的特征。   Linux桌面操作系统经过多年的发展,已经积累了成熟的系统特性、应用。出色的人机交互界面(Desktop Env.)、丰富的应用软件资源(Source)、高效的系统管理(Administation),为桌面用…...

    2024/5/6 6:19:39
  15. matlab求解非线性方程组 fsolve - Solve system of nonlinear equations

    最近有人问我matlab求解方程组的问题, 下面提供了fsolve函数help,但要有几点需要注意 1.方程组的有解性 2.方程组解是否唯一 3.x0的选取,如果解不唯一,不同的x0可能会得到不同的解 fsolve - Solve system of nonlinear equationsEquation Solves a problem specified by F(x…...

    2024/5/1 2:58:38
  16. Android反编译之如何将app注入广告

    一、概述 提高防范意识 二、工具https://ibotpeaches.github.io/Apktool/http://jd.benow.ca/https://sourceforge.net/projects/dex2jar/ 三、步骤 首先需要准备一个apk,我们随便写一个简单的demo。 package com.zhy.decompile;import android.support.v7.app.AppCompatActiv…...

    2024/4/20 12:37:03
  17. 精选180+Python开源项目,随你选!做项目何愁没代码

    编辑 | Jane出品 | Python大本营每一位程序员,每天大部分时间都是在和代码打交道。但是对于广大的普通用户来说,最重要的不是代码,而是代码最终生成的应用程序。但是,每个项目都从头开始自己一行一行码代码,是非常不现实的事情。所以,开源项目就是我们在实践过程中最宝贵…...

    2024/5/3 18:19:54
  18. Android getResources().getColor() 过时 替代方法

    在Java代码中设置控件的Color时,用getResources().getColor()出现如下提示:getColor方法在Android 6.0即API 23中 已经过时,替代方法为:ContextCompat.getColor(context, R.color.black); (总是记不清替代方法是啥来着了,忘了三四次,干脆记录下来,免得以后又找来找去…...

    2024/5/3 16:03:15
  19. Electron 入门

    Electron 是一个使用 JavaScript、 HTML 和 CSS 等 Web 技术创建跨平台桌面应用程序的框架,它负责比较难搞的部分,你只需把精力放在你的核心业务开发上即可。说到把精力放到核心业务开发上,这听起来特别诱人,但是很多初学者在第一个 Hello World 上被各种拦路虎挡住了,我这…...

    2024/4/14 21:19:02
  20. Linux搜索工具将推出 下版KDE冲击Longhorn

    KDE开发者宣布,将添加类似Google风格的搜索 功能,谋求简化这个开源Linux桌面环境内的文件搜索。 预计可能被称作3.4或4的下一版KDE将包含新的特色搜索功能,估计将在18个月内发布。KED开发者之一Aaron Seigo透露,开发者在德国召开 KDE社区世界峰会上讨论并编写了新的搜索引擎…...

    2024/4/24 23:11:24

最新文章

  1. 02.0 基于Verilog控制LED灯每秒钟闪烁一次

    本段代码是为Verilog初学者提供的一个名为led_blink简单实例Verilog模块&#xff0c;其功能是控制6个LED灯同步闪烁&#xff0c;每秒钟闪烁一次。 本例代码用于理解时序逻辑的概念&#xff0c;理解多个always模块完全并行执行的概念&#xff0c;讲授时可以与C语言的执行过程进行…...

    2024/5/6 13:41:59
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 单片机学习day4

    1. 嵌入式驱动 嵌入式驱动&#xff08;Embedded Driver&#xff09;是一种软件模块&#xff0c;用于控制和管理嵌入式系统中的外部设备或组件。 2. 嵌入式驱动程序功能 2.1 设备初始化 2.2 数据传输 2.3 错误处理 2.4 资源管理 2.5 接口适配 3. 中断系统 3.1 定义 中断…...

    2024/5/4 2:44:29
  4. 动态规划刷题(算法竞赛、蓝桥杯)--饥饿的奶牛(线性DP)

    1、题目链接&#xff1a;饥饿的奶牛 - 洛谷 #include <bits/stdc.h> using namespace std; const int N3000010; vector<int> a[N];//可变数组vector存区间 int n,mx,f[N]; int main(){scanf("%d",&n);for(int i1;i<n;i){int x,y;scanf("%…...

    2024/5/1 13:50:31
  5. 微信小程序生命周期管理:从数据初始化到事件绑定

    作为一个独立的应用开发平台,微信小程序提供了自己的生命周期机制,与我们熟悉的Vue.js框架有一些差异。掌握小程序生命周期的特点和使用技巧,对于开发高质量的小程序应用至关重要。深入理解和掌握小程序生命周期的使用技巧,将有助于我们构建出更加健壮和可维护的小程序应用。 小…...

    2024/5/5 13:16:23
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57